温馨提示×

linux反汇编怎样看字符串

小樊
44
2026-09-15 15:09:19
栏目: 智能运维

在 Linux 下进行反汇编时,“看字符串”通常有以下几种常见场景和方法,按使用工具分析阶段来说明:


一、先用工具直接提取字符串(最常用)

1. strings 命令

适合快速查看二进制中的可读字符串。

strings ./a.out

常见用法:

strings -n 6 ./a.out        # 只显示长度≥6的字符串
strings -a ./a.out          # 扫描整个文件(包括非标准段)
strings ./a.out | grep pass # 查找关键词

⚠️ 缺点:无法知道字符串在代码中的“位置”。


二、在反汇编中定位字符串

2. objdump 反汇编 + 字符串地址

objdump -d -M intel ./a.out

查找字符串引用:

objdump -s -j .rodata ./a.out

示例:

lea rax, [rip+0x1234]   ; 加载字符串地址

然后用:

objdump -s -j .rodata ./a.out

根据地址找到对应字符串。


三、用 GDB 动态看字符串

3. GDB 查看字符串内容

gdb ./a.out

在函数中下断点:

break main
run

查看寄存器中的字符串指针:

x/s $rdi
x/s 0x555555556004

常用命令:

x/s addr     # 以字符串形式查看
x/10c addr   # 查看字符

四、用反编译工具(最直观)

4. Ghidra / IDA Pro / radare2

radare2 示例

r2 ./a.out
aa
izz          # 列出所有字符串
pdf          # 反汇编当前函数

Ghidra

  • 自动识别字符串
  • 双击字符串即可看到引用位置
  • 非常适合逆向分析

五、代码中字符串一般在哪?

  • .rodata:只读字符串(如 printf("hello")
  • .data:已初始化全局变量
  • 栈上:局部字符数组
  • 动态生成:运行时 sprintf / 加密解码

六、小技巧总结

✅ 快速看字符串 → strings
✅ 找引用位置 → objdump / radare2
✅ 动态确认 → gdb
✅ 逆向分析 → Ghidra / IDA


如果你有具体场景(比如:ELF 逆向、CTF、 malware、内核模块),我可以给你更针对性的方法。

0