使用汇编程序创建纯二进制数据(无ELF,符号表等)

时间:2011-03-09 22:01:35

标签: gnu nasm assembly i386

我想转换一个仅限数据的输入文件,例如:

 .data
 .org 0
 .equ foo, 42
 .asciz "foo"
label:
 .long 0xffffffff
 .long 0x12345678
 .byte foo
 .long label
 .long bar
 .equ bar, 'x'

到具有相应字节序列'f','o','o',0,0xff,0xff,0xff,0xff,0x78,0x56,0x34,0x12,42,4,0,0,0的文件中,'x',0,0,0。

当我用GNU(as -o foo.o -s foo.S)组装它时,我得到一个400+字节的ELF文件。我如何使GNU(或NASM或任何其他汇编程序)给我简单的二进制表示?我已经研究过GNU作为选项,但无济于事。我可以修改输入格式,如果这样可以使答案更容易(即使用更多不同的伪操作)。

任何暗示都深表赞赏!

此致,Jens

2 个答案:

答案 0 :(得分:0)

在MASM中,您可以将MASM汇编到.obj文件中,将LINK汇编到.exe文件中,然后使用EXE2BIN实用程序对结果exefile进行后处理。

在TASM中,您将组装成.obj文件,然后将TLINK/t/x参数相关联。

答案 1 :(得分:0)

我挖了一下,找到了一个使用nasm的解决方案,从http://www.nasm.us/抓住。

原始数据的等效指令将是这样的:

     org 0
foo  equ 42
     db "foo", 0
label:
     dd 0xffffffff
     dd 0x12345678 
     db foo
     dd label
     dd bar
bar  equ 'x'

使用nasm -f bin -o file.bin file.S进行汇总。瞧! file.bin中的普通二进制文件。猜猜这让我成为一个自学者: - )