2010-08-13 41 views
4

我正在嘗試寫一個反彙編程序。我發現操作碼及其含義下面的列表,所以我決定在運行時解析它: http://mprolab.teipir.gr/vivlio80X86/pentium.txtx86操作碼編碼:sib字節

但我被困在操作碼爲0x00: 其次是一個reg/modbyte。解析它對我來說不是什麼問題。 但是我在使用Scale-Index-Byte時遇到了問題: 如果實際上將esp指定爲索引寄存器,則實際上意味着沒有索引寄存器。 同樣適用於ebp的基址寄存器。但我已經用C++內聯彙編器試過了:可以編譯: 「add [ebp * 2 + ebp],cl」

那麼ebp如何作爲基址寄存器意味着根本不使用基址寄存器!

回答

6

「缺失的EBP」情況僅適用於情況下ModR/M.Mod字段的值爲00二進制。如果您需要EBP作爲基礎,彙編改變了國防部爲01二進制,並增加了8位位移爲零值:

004C6D00添加[EBP + EBP * 2],CL

+0

確定是否有其他失蹤註冊8位和32位的位移值呢? 任何其他奇怪的過度依戀? – Zotta 2010-08-13 13:33:36

+1

只有EBP「缺失」。請注意,您可以編碼純[位移]由於 「缺少ESP指數」 和addresing 「失蹤EBP基地」 兩種方式: 000D 78563412添加[12345678],CL 000C25 78563412添加[12345678],CL 然而, 64位模式下,第一個操作碼意味着: 000D 78563412 add [rip + 12345678],cl 編輯:狗屎,換行符被吃掉了什麼使評論更不可讀。 – MazeGen 2010-08-13 13:46:18

+0

好吧,現在它工作。十分感謝! – Zotta 2010-08-14 09:06:22