OllyDbg完全教程 反組譯碼器[Disassembler]

來源:互聯網
上載者:User
三,反組譯碼器[Disassembler]

反組譯碼器識別所有的標準80x86、保護、FPU、MMX和3DNow!指令集(包括Athlon擴充的MMX指令集)。但它不識別ISSI命令,儘管計劃要在下個版本中支援這種命令。某些過時或者未公開的命令,像LOADALL,也不支援。

反組譯碼器可以正確解碼16位地址。但它假設所有的段都是32位的(段屬性使用32位)。這對於PE[Portable Executable]格式檔案總是真的。OllyDbg不支援16位的NE
[New Executables]格式。

如果您熟悉MASM或者TASM,那麼反組譯碼的代碼對於您沒有任何問題。但是,一些特例也是存在的。以下命令的解碼與Intel的標準不同:

AAD (ASCII Adjust AX Before Division) -
該命令的解碼後的一般形式為:AAD imm8

AAM (ASCII Adjust AX After Multiply) -
該命令(非十進位數)的一般解碼形式為:AAM imm8

SLDT (Store Local Descriptor Table register) -
運算元總被解碼為16位。這個命令的32位形式會在目的運算元的低16位中儲存段選取器,並保留高16位不變。

SALC (Sign-extend Carry bit to AL, undocumented) -
OllyDbg 支援這個未公開指令。

PINSRW (Insert Word From Integer Register, Athlon extension to MMX) -
在AMD的官方文檔中,這個命令的記憶體形式使用了16位記憶體運算元;然而寄存器形式需要32位寄存器,但只使用了低16位。為了方便處理,反組譯碼器解碼寄存器為16
位形式。而彙編器兩種形式都支援。

CVTPS2PI and CVTTPS2PI (Convert Packed Single-Precision Floating to Packed Doubleword, Convert with Truncation Packed Single-Precision Floating to Packed Doubleword) -

在這些命令中,第一個運算元是MMX寄存器,第二個或者是128位XMM寄存器或者是64位記憶體地區。為了方便處理,記憶體運算元也被解碼為128位。

有些指令的助記符要依賴運算元的大小:

不分大小的形式 明確的16位形式 明確的32位形式
PUSHA PUSHAW PUSHAD
POPA POPAW POPAD
LOOP LOOPW LOOPD
LOOPE LOOPWE LOOPDE
LOOPNE LOOPWNE LOOPDNE
PUSHF PUSHFW PUSHFD
POPF POPFW POPFD
IRET IRETW IRETD
您可以改變解碼大小敏感助記符[decoding of size-sensitive mnemonics].。根據選項,反組譯碼器從三種可能中選擇之一進行解碼。這個選項也會影響彙編器的預設處理方式。

解碼MMX和3DNow!指令總是開啟的,儘管您的處理器並不支援這些指令。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.