逆向分析之路-從運算碼開始-04


15.3.2 運算元長度覆蓋

運算元長度覆蓋(Operand-size override),運算碼是66 h再與其他運算碼搭配使用,用在16位元與32位的大小切換。其實他是一個在現有編碼上面的擴充方法,怎麼說呢?

還記得上個小節裡我們故意不講的AX、CX、DX、BX嗎?是的,他就用了這個擴充碼來與32位元的EAX、ECX、EDX、EBX共用運算碼。我們用同法來追蹤一下:

放大來看,每個都有66h開頭,搭配EAX、ECX、EDX、EBX,就把32位元暫存器切換成16位元暫存器:

把剩下的給驗證完:此處定義(#define)中的倒斜線(\)是換行表示用,只是整齊好看而已。

同樣的,8位元的SP、BP、SI、DI也用這種運算元重寫(Operand override) 66 h來與ESP、EBP、ESI、EDI共用編碼,這樣各位可以把上小節的運算碼給填補齊全了嗎?

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料