【发布时间】:2013-07-27 05:59:45
【问题描述】:
我正在尝试在 Linux 中查看已编译 C 程序的 x86 程序集,但我没有源代码。这可以用 GCC 完成,还是我需要不同的工具?谢谢。
【问题讨论】:
-
你真的想为此研究反汇编程序。
标签: assembly x86 reverse-engineering
我正在尝试在 Linux 中查看已编译 C 程序的 x86 程序集,但我没有源代码。这可以用 GCC 完成,还是我需要不同的工具?谢谢。
【问题讨论】:
标签: assembly x86 reverse-engineering
GCC 是一个编译器。您正在寻找的是反汇编程序。在linux上,你可以使用objdump(1)。
一个例子(一些objdump的输出被剪掉以便于阅读):
$ cat example.c
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
$ clang -Wall -Wextra -O2 -o example example.c
$ ./example
Hello, world!
$ objdump -d example | grep -A10 '<main>'
0000000000400500 <main>:
400500: 55 push %rbp
400501: 48 89 e5 mov %rsp,%rbp
400504: bf 0c 06 40 00 mov $0x40060c,%edi
400509: e8 e2 fe ff ff callq 4003f0 <puts@plt>
40050e: 31 c0 xor %eax,%eax
400510: 5d pop %rbp
400511: c3 retq
400512: 90 nop
400513: 90 nop
400514: 90 nop
【讨论】:
objdump -d 程序> dumped.txt
【讨论】: