如何在GDB中为指定地址添加自定义标签?
GDB自定义地址标签的实现方法
GDB支持你需要的自定义地址标签功能,有两种实用的实现方式:
1. 手动通过符号文件添加标签
先创建一个包含自定义符号的临时目标文件,再导入GDB:
- 编写临时汇编文件:
echo "something_interesting = 0;" > /tmp/label.s - 编译成目标文件:
as -o /tmp/label.o /tmp/label.s - 在GDB中导入该符号文件并绑定到目标地址:
add-symbol-file /tmp/label.o 0x7ffff00904e4
完成后,执行print/a 0x7ffff00904e8就会输出:
0x7ffff00904e8 <something_interesting+4>
2. 封装成自定义GDB命令
为了简化操作,可以把上述流程封装成GDB自定义命令,添加到你的.gdbinit文件中:
define new_label set $target_addr = $arg0 set $label_name = $arg1 shell echo "$label_name = 0;" > /tmp/gdb_temp_label.s shell as -o /tmp/gdb_temp_label.o /tmp/gdb_temp_label.s add-symbol-file /tmp/gdb_temp_label.o $target_addr end document new_label 给指定地址添加自定义标签,用法:new_label <目标地址> <标签名> end
之后在GDB中直接执行你想要的命令即可:
(gdb) new_label 0x7ffff00904e4 something_interesting (gdb) print/a 0x7ffff00904e8 0x7ffff00904e8 <something_interesting+4>
注意:每次添加新标签会生成临时文件,不需要时可以手动删除/tmp/gdb_temp_label.*这类文件,也可以在自定义命令中加入清理逻辑。
内容的提问来源于stack exchange,提问作者enigmaticPhysicist
相关产品推荐
相关产品推荐

