解析x86指令格式
詳解x86指令格式
格式總覽
Instruction Prefixes: 指令字首,0到4個位元組,可選
Opcode: 操作碼,指令的靈魂所在,必須有,1- ,2-,或者3個位元組
ModR/M: 1個位元組,可選,8位資料,按2:3:3格式分段,Mod(6 7位)/ Reg/Opcode(3 4 5位) / R/M(0 1 2位)Mod和R/M,共5位,結合起來,定址,Reg/Opcode,一般情況是來確定一個暫存器,特定情況下,是Opcode的補充碼
SIB: 對ModR/M的補充
Displacement: 偏移
Immediate: 立即數
Instruction Prefixes: 分四組,在一條指令中,每組字首指令最多1個位元組,一條指令中,最多4個位元組的指令字首,這4個位元組不分前後順序
Group1:LOCK和REPEAT
lock | F0 | 鎖地址匯流排 |
---|---|---|
REPNE/REPNZ | F2 | 重複指令 |
REP/REPZ | F3 | 重複指令 |
Group2:段字首指令
CS(2EH),SS(36H),DS(3EH),ES(26H),FS(64H),GS(65H)
Group3:Operand-size override prefix(運算元寬度字首),值為66H
雙向起作用,如果當前系統預設是16位寬度,加了此字首後,變成32位寬度,反之,亦然。
Group4:地址寬度字首,值為67H 類似Group3
Opcode決定是否有ModR/M:,ModR/M決定是否有SIB
Zz表示法: 大寫字母+小寫字母表示各種不同的含義,對於含義的定義,參見Intel軟體開發人員手冊A.2.1 Codes for Addressing Method部分和A.2.2 Codes for Operand Type部分,分別是A-Z,a-z的含義說明。
例如 Opcode=0x00時 查到的指令為 ADD Eb,Gb 首先這是一個ADD指令
E:一個ModR/M位元組跟在操作碼後面,並指定(詳細說明了)運算元
G:ModR/M位元組的reg欄位選擇一個通用暫存器(例如AX(000))
b:一個位元組,運算元的寬度
這個Opcode告訴我們,它後邊還跟著一個ModR/M位元組
以上這些分析,需要查表,表在開發手冊裡。下一篇著重整理下查表。
相關文章
- 常用的x86彙編指令
- GPS 格式解析
- BVH檔案格式解析
- 從X86指令深扒JVM的位移操作JVM
- 解析#pragma指令 (轉)
- java class 檔案格式解析Java
- Flutter資料解析Map格式Flutter
- GEOJSON資料格式解析JSON
- Windows Phone 解析圖片格式Windows
- nginx的listen指令解析Nginx
- pycharm 破解指令碼解析PyCharm指令碼
- MP4檔案格式解析
- Qt的.pro檔案格式解析QT
- ORACLE 資料塊格式深入解析Oracle
- json格式構成深度解析JSON
- Windows Phone 7解析圖片格式Windows
- arkTS 如何解析MD格式?
- Nginx Location 指令語法解析Nginx
- shell指令碼(3)-格式化輸出指令碼
- PE檔案格式詳細解析(一)
- 解析 CSS 格式化上下文CSS
- C#解析Matrix Marke資料格式C#
- android解析HashMap格式的jsonAndroidHashMapJSON
- shell指令碼獲取時間格式化指令碼
- (轉)shell 指令碼date時間格式(備查)指令碼
- 將timestamp轉成date格式的指令碼指令碼
- 程式碼格式化指令碼CodeFormat (轉)指令碼ORM
- PE檔案格式詳細解析(二)--IAT
- python 從TXT中解析json格式PythonJSON
- 深入解析Oracle IMU模式下的REDO格式Oracle模式
- iOS開發之解析XML格式資料iOSXML
- js格式化(解析)PHP時間戳JSPHP時間戳
- 深入解析Vue.directive 自定義指令Vue
- shell指令碼實現DNS正向解析指令碼DNS
- 檔案格式引起的指令碼執行錯誤指令碼
- [JGL]Rman指令碼書寫格式和注意事項指令碼
- 如何將Excel檔案解析為json格式ExcelJSON
- JSONObject與JSONArray 解析JSON格式字串JSONObject字串