GDB&x27;查找';命令提前终止
我在GDB中的程序内存中寻找一系列特定的字节 从某个地址(0x104f90)上方开始的“查找”有效,但从该地址下方开始的“查找”无效:GDB&x27;查找';命令提前终止,gdb,gdbserver,Gdb,Gdbserver,我在GDB中的程序内存中寻找一系列特定的字节 从某个地址(0x104f90)上方开始的“查找”有效,但从该地址下方开始的“查找”无效: (gdb) find /w 0x104f90, 0x108fe4, 0x6863203b 0x108e08 0x108e58 0x108ee8 vs GDB(似乎)可以访问此地址周围的内存: (gdb) x/12x 0x104f80 0x104f80: 0x00000000 0x00000000 0x00000000 0x00000000 0x1
(gdb) find /w 0x104f90, 0x108fe4, 0x6863203b
0x108e08
0x108e58
0x108ee8
vs
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中有一个bug,如果“find”函数在16000字节内找不到它要查找的内容,它就会放弃。有关官方错误报告,请参阅
解决方案是更新到gdb 10(这将有一个修复程序),或者将“查找”查询限制在16000字节以下您是否正在使用gdbserver进行调试?是!这可能是导致问题的原因吗?是的,您发现了gdbserver错误。我刚刚发布了修复。是的,这就是问题所在!非常感谢你!作为记录,问题似乎不是搜索本身>=16000个字符,而是“如果在16000个字符内找不到匹配项,它就会放弃”(这可能是您的修复程序所说的,我不太确定),但是的,我的解决方案似乎是更新或将搜索限制在16000字节块。非常感谢。我应该把答案写在这里,还是你愿意?
(gdb) x/12x 0x104f80
0x104f80: 0x00000000 0x00000000 0x00000000 0x00000000
0x104f90: 0x00000000 0x00000000 0x00000000 0x00000000
0x104fa0: 0x00000000 0x00000000 0x00000000 0x00000000