1. 程式人生 > >反匯編技術筆記-基礎知識

反匯編技術筆記-基礎知識

一個 偏移 flag 當前 ack 尋址 nes 任務切換 軟件

---------------|相關學習資源|---------------
二進制安全相關工具和教程站點
http://www.openrce.org
http://www.ollydbg.de
http://www.sysersoft.com
http://www.idapro.com
http://www.woodmann.com
http://www.hex-rays.com IDA pro

---------------|二進制基礎知識|---------------
CPU指令的基本單位
1 byte = 8 bit
1 word = 2 byte
1 double word = 2 word
1 kilobyte = 1024 byte

1 megabyte = 1024 kbyte = 1024*1024 byte = 1048576 byte

---------------|匯編語言基礎知識|---------------
寄存器
80386處理器中的寄存器分為8組,每組寬度為32位
通用寄存器
段寄存器
指令寄存器
標誌寄存器
系統地址寄存器
控制寄存器
調試寄存器
測試寄存器

通用寄存器:

EAX 累加器
EBX 基址寄存器
ECX 計數器
EDX 數據寄存器
ESI 源變址寄存器
EDI 目的變址寄存器
EBP 擴展基址指針寄存器
ESP 棧指針寄存器

EAX EBX ECX EDX ESI EDI EBP ESP #32位

AX BX CX DX SI DI BP SP #低16位
AH BH CH DH #高8位
AL BL CL DL #低8位

段寄存器:
CS:代碼段(Code Segment)
DS:數據段(Data Segment)
ES:附加數據段(Extra Segment)
SS:堆棧段(Stack Segment)
FS:附加段
GS 附加段

指令寄存器:
EIP 指令指針寄存器
低16位為IP(8086)
它存儲的是下一條要執行指令的地址。

標誌寄存器:
IOPL(I/O Privilege Level) I/O特權級字段,它的寬度為2bit,它指定了I/O指令的特權級。如果當前的特權級別在數值上小於或等於IOPL,那麽I/O指令可執行。否則,將發生一個保護性異常。

NT(Nested Task): 控制中斷返回指令IRET,它寬度為1位。NT=0,用堆棧中保存的值恢復EFLAGS,CS和EIP從而實現中斷返回;NT=1,則通過任務切換實現中斷返回。
RF(Restart Flag): 重啟標誌,它的寬度是1位。它主要控制是否接受調試故障。RF=0接受,RF=1忽略。如果你的程序每一條指令都被成功執行,那麽RF會被清0。而當接受到一個非調試故障時,處理器置RF=1。
VM(Virtual Machine): 虛擬8086模式(用軟件來模擬8086的模式,所以也稱虛擬機)。VM=0,處理器工作在一般的保護模式下;VM=1,工作在V8086模式下。
其它16個標誌位的含義和8086一樣:
CF(Carry Flag): 進位標誌位,由CLC,STC兩標誌位來控制
PF(Parity Flag): 奇偶標誌位
AF(Assistant Flag): 輔助進位標誌位
ZF(Zero Flag): 零標誌位
SF(Singal Flag): 符號標誌位
IF(Interrupt Flag): 中斷允許標誌位,由CLI,STI兩條指令來控制
DF(Direction Flag): 向量標誌位,由CLD,STD兩條指令來控制
OF(Overflow Flag): 溢出標誌位

尋址方式
段基址*10H+段內偏移地址,形成20位地址
段基址是16的倍數,長度最大不超過64K

反匯編技術筆記-基礎知識