在 Linux 下用 GCC 做“反汇编”(把编译后的程序或目标文件转成汇编代码),常见做法有几种,下面按使用场景给你整理一下。
gcc -S test.c
会生成:
test.s ← 汇编代码
想看更直观的 Intel 语法(x86):
gcc -S -masm=intel test.c
先用 GCC 编译:
gcc -o test test.c
再用 objdump 反汇编:
objdump -d test
只看 main 函数:
objdump -d test | grep -A 30 "<main>:"
Intel 语法:
objdump -d -M intel test
gcc -c test.c
objdump -d test.o
gcc -g -o test test.c
objdump -d -M intel test
或者配合 gdb:
gdb ./test
(gdb) disassemble main
Intel 语法:
(gdb) set disassembly-flavor intel
(gdb) disassemble main
gcc -O0 -S test.c # 不优化,好读
gcc -O2 -S test.c # 优化后,难读
| 工具 | 用途 |
|---|---|
gcc -S |
源码 → 汇编 |
objdump -d |
二进制 → 汇编 |
gdb disassemble |
调试中看汇编 |
nm |
看符号 |
readelf |
看 ELF 结构 |
gcc -S -masm=intel -O0 test.c
objdump -d -M intel ./test
gdb ./test
如果你是:
可以告诉我你的具体目的,我可以给你更针对性的命令和示例。