我想用ollydbg來調試一個程序,我懷疑索引模式地址使用SS前綴。彙編堆棧索引地址
以下是截圖:
此時,指令
MOV BYTE PTR SS:[EBP-1],BL
將8位從EBX
移動解決EBP(0012FDCC)
減去一個尖頭 - 0012FDCB
。
如果以上是不正確的,請告訴我。
在OllyDbg的程序,右下具有堆與第一列地址的表示。爲什麼沒有0012FDCB
的條目在哪裏?0012FDCB
指向哪裏?
我想用ollydbg來調試一個程序,我懷疑索引模式地址使用SS前綴。彙編堆棧索引地址
以下是截圖:
此時,指令
MOV BYTE PTR SS:[EBP-1],BL
將8位從EBX
移動解決EBP(0012FDCC)
減去一個尖頭 - 0012FDCB
。
如果以上是不正確的,請告訴我。
在OllyDbg的程序,右下具有堆與第一列地址的表示。爲什麼沒有0012FDCB
的條目在哪裏?0012FDCB
指向哪裏?
我什麼都不知道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,但同樣的原則適用。
andmart,看到屏幕截圖後,看來發生的事情正是我所猜測的。 ollydbg在DWORDS中顯示堆棧的內容。因此,在0012FDC8h處查看DWORD最重要的字節,BL將被存儲在那裏。 – 2012-01-07 16:21:21