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

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

static int f(int x)

{

int y = x*x;

return y+2;

}

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

回答:

试试看:

$ 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

以上是 有没有办法让gcc输出原始二进制文件? 的全部内容, 来源链接: utcz.com/qa/410057.html

回到顶部