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


15.3.4與暫存器或記憶體的搭配(8位元)

 單純一個mov指令一但與暫存器及記憶體搭配就會變得非常複雜,雖然結論會很簡單如下圖,但光排列組合就會是個大表格。

    
 

首先來看8位元的情況,按照官方說法格式有一種是「mov r8/m8,r8」,其中r表暫存器,m表記憶體。他的運算碼是88開頭配合來源暫存器編號。但依照前面所提過的16位元定址裡,並不允許8位元的記憶體定址。

簡單來說就是沒有像這種「mov [al],al」用法。但是,重點就在這個但是!會不會我們誤解了「mov r8/m8,r8」的意思?會不會是表示後面的暫存器是8位元,放到一段記憶體裡面,很自然就只能放了8位元的位置,也就是說我們假設決定權在於後面的這個第二運算元,這我們在後面的範例二就會驗證這個假設。

再來就是,不知各位有沒有發現,表中這兩種指令當 mov r8,r8時到底是用88h還是8Ah?

我們先幫各位整理出各種排列情況,並先給了答案,後面再挑著來驗證。左方表示第一運算元,右上方表第二運算元。請留意一下為何下方有一塊特別框起來的地方,因為MOV指令並沒有「mov m,m」這種語法

其餘的部分就留給各位練習練習。

發表留言

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