- x86匯編與逆向工程:軟件破解與防護的藝術
- (美)斯蒂芬妮·多馬斯 (美)克里斯托弗·多馬斯
- 468字
- 2025-02-10 16:05:47
3.1 x86指令格式
在x86匯編中,助記符的使用讓人們更容易閱讀匯編代碼。每一個助記符指令都被匯編成能夠控制處理器的機器碼。所以,處理器對助記符一無所知,只知道機器碼。例如,助記符add被匯編成機器碼值0x04。
在x86中,指令采用特定的格式編寫。下面是一個簡單的x86指令示例:

在這里,add是指示處理器所需執行任務的助記符。這條指令也包含了一些操作數,這些操作數表示此次操作需使用的數據。在此示例中,操作數就是寄存器eax和數值1。在正常情況下,x86指令最多可以有三個操作數。雖然x86語言有特殊擴展,可以允許最多有四個操作(VEX前綴),但我們不會深入探討這個方面。
x86指令的操作數可以是寄存器、立即數或內存位置。寄存器通常是通用寄存器,而內存位置則由地址指定,立即數則是如12345這樣的數字或常數。
雖然x86指令可以包含上述任何內容,但最多只能包含一個內存位置。例如,指令add eax,ebx和add eax,[0x12345678]都是有效的,因為前者訪問兩個寄存器,后者訪問一個寄存器和一個內存位置。但是,指令add[0x12345678],[0x87654321]是無效的,因為它一次使用了兩個內存地址。這是因為處理器管線(pipeline)是一個精妙的設計,每條指令只能執行一次內存讀取。