GDB 'find' 命令提前终止

GDB 'find' command terminating early

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

'find' 从特定地址 (0x104f90) 开始有效,但从该地址以下开始的 'find' 无效:

(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 中有一个错误,如果 'find' 函数在 16,000 字节中找不到它正在寻找的内容,它就会放弃。请参阅 https://sourceware.org/pipermail/gdb-patches/2020-April/167829.html 以获取官方错误报告。

解决方案要么更新到 gdb 10(这将有一个修复),要么限制 'find' 查询少于 16,000 字节