是否有一组命令行选项可以说服gcc从自包含的源文件生成一个平面二进制文件?例如,假设foo.c的内容是
静态整数f(整数x)
{
int y=x*x;
返回y+2;
}
没有外部引用,没有要导出到链接器的内容。我想得到一个小文件,里面只有这个功能的机器指令,没有任何其他装饰。除了32位保护模式外,有点像(DOS).COM文件
answer=“1647405”的数据
共同学习, 共同进步, 祝各位早日成为代码大神
是否有一组命令行选项可以说服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<_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