#go
# A Quick Guide to Go's Assembler
Is it possible to include inline assembly in Go code?
原理是通过 mmap
将待执行的汇编代码的二进制映射到可执行的虚拟内存中。
在使用 mmap
时,需要设置 PROT_EXEC
标志,mmap
会返回一个虚拟地址。接着,将二进制代码复制到这个地址,并将其当作函数地址进行转换和执行。
编译 go tool compile -S -N inc.go
获得 assemble code go tool objdump -S inc.o
按理说已经是根据上面的思路是可以的,比如我试了下 x86_64 格式的汇编指定(由 FASM 生成)是不行的(see Code)
GPT:
由于 Golang 中的机制限制,同样的逻辑用 rust 或 C 都是 Ok 的 Rust Code(l 是否逻辑使用 C,然后在 go 中用 cgo 调用 C)。