首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在GDB中打印部分字符串

我想在GDB中打印部分字符串
EN

Stack Overflow用户
提问于 2014-06-27 17:53:38
回答 2查看 234关注 0票数 0

我正在编写一个GDB宏来分析核心并打印一个字符串。核心的字符串输出是"sp-4/0/2“。现在我只需要打印"sp",不包括其他。我不确定如何在GDB中实现这一点。这方面的任何建议都将是一个很大的帮助。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-06-27 18:34:53

看,argv1是"sp-4/0/2“

代码语言:javascript
复制
(gdb) p argv[1]
$4 = 0x7fffffffe3fa "sp-4/0/2"

这只是前两个字符:

代码语言:javascript
复制
(gdb) printf "%.2s\n", argv[1]
sp

代码语言:javascript
复制
(gdb) printf "%c%c\n", argv[1][0],argv[1][1]
sp
票数 0
EN

Stack Overflow用户

发布于 2019-06-24 21:43:57

以下替代方法即使在静态情况下大小未知的情况下也可以使用:

代码语言:javascript
复制
(gdb) p {char} argv[1]@2

也就是说,您可以用变量或寄存器值替换2。例如,当您在write中添加断点并且没有可用的调试符号时,这将非常有用:

代码语言:javascript
复制
(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调用约定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24448952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档