一尘不染

有没有办法让gcc输出原始二进制文件?

linux

是否有一组命令行选项可以说服gcc从自包含的源文件生成平面二进制文件?例如,假设foo.c的内容是

static int f(int x)
{
  int y = x*x;
  return y+2;
}

没有外部引用,没有要导出到链接器的内容。我想获得一个仅带此功能机器说明的小文件,而无需任何其他装饰。有点像(DOS).COM文件,但32位保护模式除外。


阅读 445

收藏
2020-06-02

共1个答案

一尘不染

试试看:

$ cc -c test.c
$ objcopy -O binary test.o binfile

您可以使用来确保它是正确的objdump

$ objdump -d test.o 
test.o:     file format pe-i386


Disassembly of section .text:

00000000 <_f>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 04                sub    $0x4,%esp
   6:   8b 45 08                mov    0x8(%ebp),%eax
   9:   0f af 45 08             imul   0x8(%ebp),%eax
   d:   89 45 fc                mov    %eax,-0x4(%ebp)
  10:   8b 45 fc                mov    -0x4(%ebp),%eax
  13:   83 c0 02                add    $0x2,%eax
  16:   c9                      leave  
  17:   c3                      ret

并与二进制文件进行比较:

$ hexdump -C binfile 
00000000  55 89 e5 83 ec 04 8b 45  08 0f af 45 08 89 45 fc  |U......E...E..E.|
00000010  8b 45 fc 83 c0 02 c9 c3                           |.E......|
00000018
2020-06-02