【问题标题】:Compile code to raw binary将代码编译为原始二进制文件
【发布时间】:2014-12-30 16:15:29
【问题描述】:

我正在尝试将我的代码编译成原始二进制文件,并按照其他 SO 帖子的建议(如 thisthis)我尝试了 objdump:

$ gcc -c foo.c
$ objcopy -O binary foo.o foo.bin

然后我尝试确定这是否有效:

$ objdump -d foo.o

foo.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <main>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   48 83 ec 10             sub    $0x10,%rsp
   8:   89 7d fc                mov    %edi,-0x4(%rbp)
   b:   48 89 75 f0             mov    %rsi,-0x10(%rbp)
   f:   bf 00 00 00 00          mov    $0x0,%edi
  14:   b8 00 00 00 00          mov    $0x0,%eax
  19:   e8 00 00 00 00          callq  1e <main+0x1e>
  1e:   b8 00 00 00 00          mov    $0x0,%eax
  23:   c9                      leaveq 
  24:   c3                      ret

$ hexdump -C foo.bin

00000000  14 00 00 00 00 00 00 00  01 7a 52 00 01 78 10 01  |.........zR..x..|
00000010  1b 0c 07 08 90 01 00 00  1c 00 00 00 1c 00 00 00  |................|
00000020  00 00 00 00 25 00 00 00  00 41 0e 10 86 02 43 0d  |....%....A....C.|
00000030  06 60 0c 07 08 00 00 00                           |.`......|
00000038

显然出了点问题。我用 gcc 交叉编译的结果检查了这一点,结果很明显是不正确的。

【问题讨论】:

  • 在转换为 bin 之前不应该链接吗?
  • 无论如何,您链接到的答案之一的 cmets 建议使用 -j .text 作为 objcopy 的参数。
  • 试试objcopy -j text -O binary
  • @Michael 添加-j .text 似乎工作正常。谢谢你。你想把它作为答案发布吗?

标签: gcc command-line machine-code objcopy


【解决方案1】:

您可以将-j .text 传递给objcopy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2018-08-25
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多