我正在编写一个GDB宏来分析核心并打印一个字符串。来自核心的字符串输出是“sp-4/0/2”。现在我需要只打印“sp”,排除其他人。我不知道如何在GDB中实现这一点。任何指针都会有很大的帮助。
提前致谢。
答案 0 :(得分:0)
参见,argv [1]是“sp-4/0/2”
(gdb) p argv[1]
$4 = 0x7fffffffe3fa "sp-4/0/2"
这只是两个第一个字符:
(gdb) printf "%.2s\n", argv[1]
sp
或者
(gdb) printf "%c%c\n", argv[1][0],argv[1][1]
sp
答案 1 :(得分:0)
即使大小不是静态已知,以下替代方法也可以使用:
(gdb) p {char} argv[1]@2
即您可以将2
替换为变量或寄存器值。当您在(例如)中添加断点时,此功能很有用write
并且没有可用的调试符号:
(gdb) b -qualified write # only match write, don't do globbing
(gdb) cond 1 $rdi == 2 # only when writing to stderr
(gdb) command 1
bt
p {char} $rsi@$rdx # print (partial) buffer
cont
上面的方法在使用System V AMD64调用约定时有效,但是可以通过调整寄存器轻松地用于arm调用约定。