使用GCC生成可读的组件?
我想知道如何在我的C源代码文件上使用GCC来转储机器代码的助记符版本,这样我就可以看到我的代码被编译进了什么程序。 你可以用Java来做到这一点,但我一直无法找到GCC的方式。
我正在尝试在汇编中重新编写一个C方法,并且看看GCC如何实现这一点会有很大的帮助。
如果使用调试符号进行编译,则可以使用objdump
来产生更易读的反汇编。
>objdump --help
[...]
-S, --source Intermix source code with disassembly
-l, --line-numbers Include line numbers and filenames in output
例:
> gcc -g -c test.c
> objdump -d -M intel -S test.o
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
#include <stdio.h>
int main(void)
{
0: 55 push ebp
1: 89 e5 mov ebp,esp
3: 83 e4 f0 and esp,0xfffffff0
6: 83 ec 10 sub esp,0x10
puts("test");
9: c7 04 24 00 00 00 00 mov DWORD PTR [esp],0x0
10: e8 fc ff ff ff call 11 <main+0x11>
return 0;
15: b8 00 00 00 00 mov eax,0x0
}
1a: c9 leave
1b: c3 ret
我想补充一下这些答案,如果你给gcc flag -fverbose-asm
,它发出的汇编器会更清晰地阅读。
使用-S(注意:大写S)切换到GCC,它会将汇编代码发送到扩展名为.s的文件。 例如,以下命令:
gcc -O2 -S foo.c
会将生成的汇编代码留在文件foo.s.
直接从http://www.delorie.com/djgpp/v2faq/faq8_20.html中删除(但删除了错误的-c
)
上一篇: Using GCC to produce readable assembly?
下一篇: How can I improve the compiler's handling of my SSE intrinsics?