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


範例三:圖例說明MOV AL, [記憶體]的狀況

  1. 我們直接用內嵌組合語言的方式在程式中直接比對正反向的所產生的等價關係。

     

  1. 對於內嵌組合語言的方式不允許我們在32位元情況下去直接對16位元暫存器位址存取,所以我們使用本書一開始的組合語言寫法,特別去看 [si] 與 [di]的運算碼。

 

補充: 

  1. 根據16位元定址模式,可以知道組合中,有[BX]、[BP]、[SI]及[DI],但下面表格中我們只列入[SI]及[DI],是因為表格編號比較整齊而已,下方補充中我們只會列出[BX]及[BP]的驗證結果,提供給各位參考,知道有這麼回事。

 

 在圖中,各位有沒有發現

mov al, [bx] 的運算碼是8A 07,雖然前面多了前置碼67,

但居然與mov al, [edi] 產生相同運算碼8A 07!

 

  1. 我們所整理的運算元編碼表裡,除了第1點的原因外,還記得範例二中有兩個[esp]及[ebp]編碼跳開的情況,也沒列在我們表裡,之後在討論16位元及32位元的情況時,各位也別忘了去追蹤一下。

 

  1. 8位元記憶體,在轉換組合語言運算碼時,留意到他都會用byte ptr方式轉換。為何要特別說明這個,因為我們後面就會用到了。

發表留言

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