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

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

静态整数f(整数x)
{
int y=x*x;
返回y+2;
}

没有外部引用,没有要导出到链接器的内容。我想得到一个小文件,里面只有这个功能的机器指令,没有任何其他装饰。除了32位保护模式外,有点像(DOS).COM文件

answer=“1647405”的数据

试试这个:

$gcc-c test.c
$objcopy-O binary-j.text test.O binfile

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

$objdump-d test.o
test.o:文件格式pe-i386
第节的分解。正文:
00000000&lt_f>:
0:55推力%ebp
1:89 e5 mov%esp,%ebp
3:83 ec 04子$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 C002添加$0x2,%eax
16:c9离开
17:c3 ret

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

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

发表评论