在 Linux 下进行反汇编(如用 objdump、gdb、radare2、IDA 等)时,“看字符串”通常有以下几种常见做法,按使用场景从简单到专业说明:
strings 命令strings ./a.out
只看数据段里的:
strings -a ./a.out
objdump + 字符串引用objdump -d -M intel ./a.out
反汇编后,字符串通常以地址引用形式出现:
lea rax, [rip+0x1234] ; 加载字符串地址
然后用:
objdump -s -j .rodata ./a.out
查看 .rodata 段中的字符串内容。
gdb ./a.out
查看某地址字符串:
x/s 0x555555556004
查看寄存器中的字符串指针:
x/s $rdi
列出所有字符串引用(配合 pwndbg):
strings
r2 ./a.out
进入后:
izz # 列出所有字符串
iz # 列出引用的字符串
ps @ str.main # 打印某个字符串
反汇编中直接看到字符串:
pdf @ main
| 段名 | 说明 |
|---|---|
.rodata |
只读字符串(最常见) |
.data |
可修改全局字符串 |
.text |
偶尔内联字符串 |
lea reg, [rip+xxx] → 多半是字符串puts / printf 的第一个参数通常是字符串如果你愿意,可以告诉我:
我可以给你具体命令 + 示例汇编解读。