无法在 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 中找到更改的内存内容的主要内容,如果未能解决你的问题,请参考以下文章

GDB再学习:断点调试之硬断点

我可以在 GDB 中的“内存访问”上设置断点吗?

更改 Xcode 中的工作目录

更改数组中对象的属性

怎么更改电脑储存位置

GDI:原始 DC 位图更改,无法恢复