[英]How to translate assembly code snippet into binary machine code snippet?
是否可以自动将x86汇编代码段(不是完整程序)转换为相应的二进制机器代码段?
例如:
xor eax, eax
mov [ebx + 12], eax
成:
31 c0
89 43 0c
我真的只需要相应的字节集。 通常我会查看一些指令集引用并手动翻译它,但我很确定有一些程序会自动执行它。
如果你知道这样的工具,请告诉我它的名字或分享链接。
我为我的问题做了一个解决方法。 它适用于Windows平台,并使用与Visual Studio一起使用的ML64汇编程序。 我用这个模板创建了一个template.asm文件:
.code
main proc
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
; -------------------------------------------
; enter assembly code here
; -------------------------------------------
mov [ebx + 12], eax
xor eax, eax
; -------------------------------------------
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
main endp
end
然后我编译它:
ml64 /c template.asm
知道nop
指令被转换为0x90
我可以编写一个程序,在两个10 x 0x90字节的块之间搜索字节。
我有类似的情况。 不过,我的解决方案只适用于gcc工具链。
假设你在code.s中有你的程序集,那么下面的代码就可以了:
$ gcc -c code.s && ld -o output.bin code.o --oformat=binary -Ttext=0 2>/dev/null && rm code.o
在output.bin中,您将获得组装的指令。 如果您希望它们采用十六进制格式,则可以执行以下操作(仅适用于Linux或使用xxd的系统):
$ xxd -p output.bin
你可以使用fasm 。 它可以将汇编代码的自包含片段编译成二进制文件。 非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.