我正在尝试使用ollydbg调试程序,我怀疑使用SS前缀索引模式地址。
以下是截图:
此时,指令
MOV BYTE PTR SS:[EBP-1],BL
会将EBX
中的8位移至EBP(0012FDCC)
中指向的地址减去1 0012FDCB
。
如果上述情况不正确,请告诉我。
在ollydbg程序中,右下角有一个堆栈表示,第一列是地址。为什么0012FDCB
没有0012FDCB
指向的位置?
答案 0 :(得分:2)
我对ollydbg一无所知;希望熟悉它的人也会发布答案。
您对我们向您展示的指令所做的理解大多是正确的:它会将BL的内容(即EBX的低 8位)移动到该地址中。堆栈段由[EBP减1]指出。如果EBP是0012FDCCh,那么该字节将存储在0012FDCBh。
我们通常不会说0012FDCBh指向任何地方,我们只是说它是一个内存位置,在这种情况下包含一个字节,即使从技术上来说,它是更正确的说它是一个内存位置的地址,因此在某种意义上,数字“指向”一个字节。但我们更愿意考虑指向内存的指针或寄存器,而不是纯数字。
我不知道为什么ollydbg没有显示0012FDCBh。你确定它没有显示出来吗?它可能显示0012FDCCh和0012FDC8h吗?如果是这样,那么它只是显示以DWORD分组的堆栈存储器,因此不显示0012FDCBh,因为它对应于0012FDC8h处DWORD中的四个字节之一。查看存储在0012FDC8h中的DWORD值,单步执行MOV指令,您应该看到该字的最高有效字节更改为BL的值。 (如果该地址中的值与BL的值不同。)Ollydbg也可能显示的行分组行数超过一个DWORD,但同样的原则适用。