2012-01-07 66 views
1

我想用ollydbg来调试一个程序,我怀疑索引模式地址使用SS前缀。汇编堆栈索引地址

以下是截图:

此时,指令

MOV BYTE PTR SS:[EBP-1],BL 

将8位从EBX移动解决EBP(0012FDCC)减去一个尖头 - 0012FDCB

如果以上是不正确的,请告诉我。

在OllyDbg的程序,右下具有堆与第一列地址的表示。为什么没有0012FDCB的条目在哪里?0012FDCB指向哪里?

回答

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,但同样的原则适用。

+1

andmart,看到屏幕截图后,看来发生的事情正是我所猜测的。 ollydbg在DWORDS中显示堆栈的内容。因此,在0012FDC8h处查看DWORD最重要的字节,BL将被存储在那里。 – 2012-01-07 16:21:21