温馨提示×

linux反汇编如何看字符串

小樊
49
2026-09-03 09:20:54
栏目: 智能运维

在 Linux 下进行反汇编(如用 objdumpgdbradare2IDA 等)时,“看字符串”通常有以下几种常见做法,按使用场景从简单到专业说明:


一、最简单:直接提取字符串(不反汇编也能看)

1. strings 命令

strings ./a.out
  • 提取程序中所有可打印字符串
  • 常用于快速定位提示信息、URL、密钥等

只看数据段里的:

strings -a ./a.out

二、在反汇编中看字符串(最常用)

2. objdump + 字符串引用

objdump -d -M intel ./a.out

反汇编后,字符串通常以地址引用形式出现:

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

然后用:

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

查看 .rodata 段中的字符串内容。


三、在 GDB 中看字符串

3. 运行 / 调试时看字符串

gdb ./a.out

查看某地址字符串:

x/s 0x555555556004

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

x/s $rdi

列出所有字符串引用(配合 pwndbg):

strings

四、用 radare2(强烈推荐)

4. 自动识别字符串

r2 ./a.out

进入后:

izz        # 列出所有字符串
iz         # 列出引用的字符串
ps @ str.main  # 打印某个字符串

反汇编中直接看到字符串:

pdf @ main

五、IDA / Ghidra(图形化最清晰)

  • 字符串窗口自动列出
  • 双击即可跳转到引用位置
  • 最适合逆向复杂程序

六、常见字符串存放位置

段名 说明
.rodata 只读字符串(最常见)
.data 可修改全局字符串
.text 偶尔内联字符串

七、实战技巧

  • 看到 lea reg, [rip+xxx] → 多半是字符串
  • puts / printf 的第一个参数通常是字符串
  • 混淆程序可能加密字符串(运行时解密)

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

  • 用的是哪种工具(objdump / gdb / radare2 / IDA)
  • 是 CTF、逆向分析还是漏洞利用

我可以给你具体命令 + 示例汇编解读

0