温馨提示×

Linux反汇编怎么找函数

小樊
47
2026-10-15 04:57:32
栏目: 智能运维

在 Linux 下进行反汇编并定位函数,常见方法和工具如下,按“从易到难 / 从高级到底层”给你一个清晰路径。


一、先用符号信息(最快)

1. 查看二进制里的函数符号

nm ./a.out
  • T / t:代码段中的函数(T 为全局,t 为局部)
  • U:未定义(外部函数)
nm -C ./a.out   # C++ 符号反修饰

2. 动态符号

objdump -T ./a.out

二、用 objdump 反汇编并找函数

1. 反汇编整个文件

objdump -d ./a.out

2. 只反汇编函数(有符号时)

objdump -d -j .text ./a.out

3. 查看某函数反汇编

objdump -d ./a.out | grep -A 30 '<main>:'

三、用 GDB(动态 + 静态结合)

1. 列函数

gdb ./a.out
(gdb) info functions

2. 反汇编函数

(gdb) disassemble main

3. 运行时定位

(gdb) break main
(gdb) run
(gdb) disassemble

四、无符号(strip 过)怎么找函数

1. 看入口和 call 指令

  • main 一般在 _start 之后
  • 找 call 指令目标地址
objdump -d ./a.out | less

2. 识别函数 prologue

常见函数开头:

push rbp
mov rbp, rsp
sub rsp, 0x10

3. 用 IDA / Ghidra(强烈推荐)

  • 自动识别函数边界
  • 恢复控制流
  • 支持伪代码(F5)

五、高级:ELF 结构层面

1. 查看节区

readelf -S ./a.out

2. 符号表

readelf -s ./a.out

六、常见实战流程(推荐)

  1. file ./a.out
  2. nm / readelf -s 看有没有符号
  3. 有符号:objdump -d 或 gdb
  4. 无符号:IDA / Ghidra
  5. 动态行为:gdb 下断点 + 反汇编

如果你愿意,可以告诉我:

  • 是 C / C++ / 汇编 / 恶意样本?
  • 是否 strip 过?
  • 用的是 x86 / x64 / ARM?

我可以直接给你具体命令或反汇编示例。

0 踩