【问题标题】:GDB 'find' command terminating earlyGDB“查找”命令提前终止
【发布时间】:2020-04-25 00:23:09
【问题描述】:

我正在 GDB 中的程序内存中寻找特定系列的字节。

从某个地址 (0x104f90) 以上开始的“查找”有效,但从该地址以下开始的“查找”无效:

(gdb) find /w 0x104f90, 0x108fe4, 0x6863203b
 0x108e08
 0x108e58
 0x108ee8

(gdb) find /w 0x104f80, 0x108fe4, 0x6863203b
 Pattern not found.

这个地址周围的内存(似乎)可以被 GDB 访问:

(gdb) x/12x 0x104f80
0x104f80:  0x00000000  0x00000000  0x00000000  0x00000000
0x104f90:  0x00000000  0x00000000  0x00000000  0x00000000
0x104fa0:  0x00000000  0x00000000  0x00000000  0x00000000

这两个地址都在堆上——info proc mappings 表示堆从0xe7000 运行——0x109000

任何人都可以就我在这里缺少的内容提出建议吗?谢谢!

【问题讨论】:

  • 你在用 gdbserver 调试吗?
  • 是的!这可能是导致问题的原因吗?
  • 是的,您发现了一个 gdbserver 错误。我刚刚发布了修复here
  • 是的,这就是问题所在!太感谢了!作为记录,看起来问题不是> = 16,000个字符本身被搜索,就像“如果它在16,000个字符内找不到匹配它放弃”(这可能是你的修复所说的,我不太确定)但是,看起来我的解决方案是更新或将我的搜索限制为 16,000 字节块。谢谢!
  • 我应该把答案写在这里,还是你愿意?

标签: gdb gdbserver


【解决方案1】:

问题是我使用的是 gdbserver,并且 gdbserver 中存在一个错误,如果在 16,000 字节中找不到它正在寻找的内容,“find”函数就会放弃。官方错误报告见https://sourceware.org/pipermail/gdb-patches/2020-April/167829.html

解决方案要么更新到 gdb 10(将​​有一个修复),要么将“查找”查询限制为小于 16,000 字节

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多