在 Linux 下进行反汇编时,“看字符串”通常有以下几种常见场景和方法,按使用工具和分析阶段来说明:
strings 命令适合快速查看二进制中的可读字符串。
strings ./a.out
常见用法:
strings -n 6 ./a.out # 只显示长度≥6的字符串
strings -a ./a.out # 扫描整个文件(包括非标准段)
strings ./a.out | grep pass # 查找关键词
⚠️ 缺点:无法知道字符串在代码中的“位置”。
objdump 反汇编 + 字符串地址objdump -d -M intel ./a.out
查找字符串引用:
objdump -s -j .rodata ./a.out
示例:
lea rax, [rip+0x1234] ; 加载字符串地址
然后用:
objdump -s -j .rodata ./a.out
根据地址找到对应字符串。
gdb ./a.out
在函数中下断点:
break main
run
查看寄存器中的字符串指针:
x/s $rdi
x/s 0x555555556004
常用命令:
x/s addr # 以字符串形式查看
x/10c addr # 查看字符
r2 ./a.out
aa
izz # 列出所有字符串
pdf # 反汇编当前函数
.rodata:只读字符串(如 printf("hello")).data:已初始化全局变量sprintf / 加密解码✅ 快速看字符串 → strings
✅ 找引用位置 → objdump / radare2
✅ 动态确认 → gdb
✅ 逆向分析 → Ghidra / IDA
如果你有具体场景(比如:ELF 逆向、CTF、 malware、内核模块),我可以给你更针对性的方法。