【发布时间】: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 字节块。谢谢!
-
我应该把答案写在这里,还是你愿意?