本文介绍了有没有办法得到gcc输出原始二进制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有一组命令行选项将说服gcc从自包含的源文件生成一个平面的二进制文件?例如,假设foo.c的内容是
Is there a set of command-line options that will convince gcc to produce a flat binary file from a self-contained source file? For example, suppose the contents of foo.c are
static int f(int x)
{
int y = x*x;
return y+2;
}
没有外部引用,无法导出到链接器。我想得到一个小文件,只有这个功能的机器说明,没有任何其他装饰。
No external references, nothing to export to the linker. I'd like to get a small file with just the machine instructions for this function, without any other decoration. Sort of like a (DOS) .COM file except 32-bit protected mode.
推荐答案
尝试使用此方法:
$ cc -c test.c
$ objcopy -O binary test.o binfile
您可以使用 objdump
确认是否正确:
You can make sure it's correct with 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输出原始二进制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!