在 CentOS 上反汇编(disassemble)代码,通常有几种常见方式,取决于你是想反汇编 可执行文件 / 目标文件,还是 运行中的进程 / 内存。下面按使用场景说明。
objdump -d ./a.out
objdump -S ./a.out
objdump -d ./a.out | grep -A 50 "<main>:"
objdump -M intel -d ./a.out
-M intel 使用 Intel 语法(默认是 AT&T)
gdb ./a.out
disassemble
disassemble main
set disassembly-flavor intel
disassemble main
disassemble 0x400500, 0x400600
gdb -p <pid>
然后:
disassemble
cat /proc/<pid>/maps
结合 gdb 或 objdump 使用。
yum install radare2
r2 ./a.out
进入后:
aaa # 分析
pdf # 反汇编当前函数
pdf @ main # 反汇编 main
llvm-objdump -d ./a.out
gcc -g -O0 -fno-pie -no-pie a.c
-g:保留调试信息-O0:不优化,反汇编更直观-no-pie:地址更固定,便于分析默认(AT&T):
mov %rsp, %rbp
Intel:
mov rbp, rsp
如果你能说明:
我可以给你更针对性的命令示例。