是否可以自动将x86汇编代码段(非完整程序)转换为相应的二进制机器代码段?
例如:
xor eax, eax
mov [ebx + 12], eax
成:
31 c0
89 43 0c
我真的只需要相应的字节集。通常情况下,我必须查看一些指令集参考并手动翻译,但我很确定有一些程序可以自动完成。
如果您知道此类工具,请告诉我其名称或分享链接。
答案 0 :(得分:2)
我解决了我的问题。它适用于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字节的块之间搜索字节。
答案 1 :(得分:0)
汇编程序有几种符号变体,据我所知,MASM与VS语法更兼容。
这些从程序集生成机器代码。如果要查看十六进制字节,请使用首选的十六进制编辑器。
到目前为止我只在Windows下使用NASM,所以我无法告诉你有关VS集成的任何信息,但通常汇编程序应该是你正在使用的工具。
答案 2 :(得分:0)
我有类似的情况。不过,我的解决方案只适用于gcc工具链。
假设您在汇编中使用了汇编代码,那么以下内容将起作用:
$ 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
答案 3 :(得分:0)
您可以使用fasm。它可以将汇编代码的自包含片段编译成二进制文件。很有用。