使用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

链接地址: http://www.djcxy.com/p/86789.html

上一篇: Using GCC to produce readable assembly?

下一篇: How can I improve the compiler's handling of my SSE intrinsics?