【问题标题】:Creating plain binary data (no ELF, symbol table etc) using an assembler使用汇编器创建纯二进制数据(无 ELF、符号表等)
【发布时间】:2011-03-09 22:01:35
【问题描述】:

我想打开一个纯数据输入文件,例如:

 .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 作为选项,但无济于事。我可以修改输入格式,如果这样会使答案更容易(即使用更多不同的伪操作)。

非常感谢任何提示!

问候,詹斯

【问题讨论】:

  • 它必须是调用汇编程序的单步输出吗?大多数情况下,这是通过 objcopy 对 ELF 输出进行后处理来完成的。
  • 您需要使用ldobjcopy 处理来自GNU as.o

标签: gnu nasm assembly i386


【解决方案1】:

在 MASM 中,您可以将 MASM 组装成一个 .obj 文件,将LINK 组装成一个 .exe 文件,然后使用 EXE2BIN 实用程序对结果 exe 文件进行后处理。

在 TASM 中,您将组装成一个 .obj 文件,然后将 TLINK/t/x 参数链接。

【讨论】:

    【解决方案2】:

    我挖了一下,找到了一个使用 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 中的普通二进制文件。猜猜这让我成为一个自学者:-)

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2014-11-05
      • 2016-05-07
      • 2013-11-18
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      相关资源
      最近更新 更多