【发布时间】:2023-04-03 10:24:01
【问题描述】:
我正在调试一个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。你能在下面写一个回复吗?我会将其标记为答案。
标签: assembly x86 gdb 32-bit att