如何将汇编代码段转换为二进制机器代码段?

时间:2014-01-24 19:17:46

标签: assembly x86

是否可以自动将x86汇编代码段(非完整程序)转换为相应的二进制机器代码段?

例如:

xor eax, eax
mov [ebx + 12], eax

成:

31 c0
89 43 0c

我真的只需要相应的字节集。通常情况下,我必须查看一些指令集参考并手动翻译,但我很确定有一些程序可以自动完成。

如果您知道此类工具,请告诉我其名称或分享链接。

4 个答案:

答案 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)

我知道两个主要的汇编程序:NASMMASM

汇编程序有几种符号变体,据我所知,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。它可以将汇编代码的自包含片段编译成二进制文件。很有用。