我正在编写一个GDB宏来分析核心并打印一个字符串。核心的字符串输出是"sp-4/0/2“。现在我只需要打印"sp",不包括其他。我不确定如何在GDB中实现这一点。这方面的任何建议都将是一个很大的帮助。
提前谢谢。
发布于 2014-06-27 18:34:53
看,argv1是"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发布于 2019-06-24 21:43:57
以下替代方法即使在静态情况下大小未知的情况下也可以使用:
(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调用约定。
https://stackoverflow.com/questions/24448952
复制相似问题