2012-01-07 70 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