我正在进行 CMU炸弹挑战,并坚持(第6阶段)。
使用GDB进行调试时我无法理解两件事,请查看屏幕截图以获得清晰度。
如您所见,当前要执行的指令是
mov eax,DWORD PTR [edx+ecx*1]
和寄存器中的值:
EDX:0xc
ECX:0x1
因此,计算后移动的值应为 0xd ,但 0x4 ,如下面的第二个屏幕截图所示。
在上面的屏幕截图中(标记为 2 ),什么是 eiz ,因为gdb正在显示?
经过一些评论后,虽然怀疑2 被清除但引起了对寄存器寻址的一些基本疑虑
假设:
edx = 0xffffd120和[edx] = 2
ecx = 0xffffd130和[ecx] = 3
< strong> [0x4ffff15e0] = 7
mov eax,DWORD PTR [edx+ecx*4]
以上表达式是否与此相同: eax = [edx] + [ecx] * 4 (即2 + 3 * 4 = 0xd)?
或者说: eax = [edx + ecx * 4] (即7)
即0xffffd120+0xffffd130*4 = 0x4ffff15e0 ==> [0x4ffff15e0]