无法在 gdb 中找到更改的内存内容
Posted
技术标签:
【中文标题】无法在 gdb 中找到更改的内存内容【英文标题】:Failed to find changed memory content in gdb 【发布时间】:2015-07-14 17:20:44 【问题描述】:我正在调试一个x86
32bit
二进制程序。而当我尝试执行下面的指令时,在使用gdb
调试时,我只是在buf
对应的内存中找不到任何内存更新。 (buf
分配在.bss
部分)。
...
movl $0x4E713,buf(,%eax,0x4)
add $0x1,%eax
...
当我在gdb
中执行上述代码时,我做了这些:
x/10x &buf
令我惊讶的是,即使执行了上述代码,buf
的内容仍然是这样的(假设eax
的值是零):
0xf7fb6ef0 <buf>: 0x00000000 0x00000000 0x00000000 0x00000000
0xf7fb6f00 <buffer>: 0x00000000 0x00000000 0x00000000 0x00000000
0xf7fb6f10 <buffer>: 0x00000000 0x00000000
地址 0xf7fb6ef0
不包含值 0x4e713
吗?
我清楚了吗?谁能给我一些帮助?
【问题讨论】:
它应该包含那个值。你确定eax
是零吗?在调试期间的某个时候,我提前或推迟了一条指令,你确定你执行了movl
吗?
@knm241,谢谢。我仔细检查了调试。我确定eax
为零并且它已经执行了指令。
反汇编gdb中的指令,验证地址。
@Jester,谢谢!有用!我在地址0x807de68
中找到了buf
变量,并成功找到了更改后的内存。这真的是有线的..
@Jester。你能在下面写一个回复吗?我会将其标记为答案。
【参考方案1】:
大概你看到的buf
指的是另一个同名的符号,或者gdb 以某种方式选择了错误的地址。反汇编gdb中的指令,验证实际地址。
你也可以试试info variables ^buf$
【讨论】:
以上是关于无法在 gdb 中找到更改的内存内容的主要内容,如果未能解决你的问题,请参考以下文章