我正在调试x86
32bit
二进制程序。当我尝试执行下面的指令时,在使用buf
进行调试时,我在gdb
对应的内存中找不到任何内存更新。 (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
?
答案 0 :(得分:3)
据推测,您看到的buf
引用了同名的另一个符号,或者gdb以某种方式选择了错误的地址。反汇编gdb中的指令,并验证实际地址。
您也可以尝试info variables ^buf$