利用匯編語言計算機和人類鏈接更爲便捷如下圖所示:
寄存器:
簡單講就是CPU可以存儲數據的器件,一個CPU可以有多個寄存器。AX、BX是兩個不同的寄存器。
16位處理器有14個寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
32位處理器有16個寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、EIP、ES、CS、SS、DS、FS、GS、EFLAGS。
64位處理器有15個寄存器:RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、R15
寄存器的作用
- 可以用來讀寫數據到電腦的周邊設備
- 可將寄存器內的數據執行算術及邏輯運算
- 存於寄存器內的地址可用來指向內存的某個位置,即尋址
數學運算的彙編指令 mov、add、sub、xor
彙編指令 | 控制CPU完成的操作 | 用高級語言的語法描述 |
---|---|---|
mov ax ,18 | 將18送入寄存器AX | AX=18 |
mov ah ,78 | 將18送入寄存器AH | AH=78 |
mov ax ,bx | 將寄存器BX中的數據送入寄存器AX | AX=BX+18 |
add ax ,8 | 將寄存器AX中的數值加上8 | AX=AX+8 |
sub ax ,18 | 將寄存器AX中的數值減去18 | AX=AX-18 |
xor ax ,18 | 將寄存器AX中的數值與18異或 | AX=AX^18 |
函數跳轉指令
- 無條件轉移指令 (長轉移)
JMP-- 無條件轉移指令
CALL-- 過程調用
RET/RETF-- 過程返回. - 條件轉移指令-- (短轉移,-128到+127的距離內)( 當且僅當(SF XOR OF)=1時,OP1<OP2 )
JA/JNBE – 不小於或不等於時轉移.
JAE/JNB – 大於或等於轉移.
JB/JNAE – 小於轉移.
JBE/JNA – 小於或等於轉移.
以上四條,測試無符號整數運算的結果(標誌C和Z).
JG/JNLE --大於轉移.
JGE/JNL --大於或等於轉移.
JL/JNGE --小於轉移.
JLE/JNG – 小於或等於轉移.
以上四條,測試帶符號整數運算的結果(標誌S,O和Z).
JE/JZ --等於轉移.
JNE/JNZ – 不等於時轉移.
JC – 有進位時轉移.
JNC – 無進位時轉移.
JNO – 不溢出時轉移.
JNP/JPO – 奇偶性爲奇數時轉移.
JNS --符號位爲 “0” 時轉移.
JO – 溢出轉移.
JP/JPE – 奇偶性爲偶數時轉移.
JS – 符號位爲 “1” 時轉移. - 循環控制指令(短轉移)
LOOP – CX不爲零時循環.
LOOPE/LOOPZ – CX不爲零且標誌Z=1時循環.
LOOPNE/LOOPNZ – CX不爲零且標誌Z=0時循環.
JCXZ – CX爲零時轉移.
JECXZ – ECX爲零時轉移. - 中斷指令
INT – 中斷指令
INTO – 溢出中斷
IRET – 中斷返回 - 處理器控制指令
HLT — 處理器暫停, 直到出現中斷或復位信號才繼續.
WAIT --當芯片引線TEST爲高電平時使CPU進入等待狀態.
ESC – 轉換到外處理器.
LOCK — 封鎖總線.
NOP – 空操作.
STC --置進位標誌位.
CLC --清進位標誌位.
CMC – 進位標誌取反.
STD --置方向標誌位.
CLD – 清方向標誌位.
STI --置中斷允許位.
CLI --清中斷允許位.
IDA安裝問題解決彙總:
1、打開的時候出現:Oops! internal error 40343 occured.
Further work is not possible and IDA will close.
Would you like to create a crash dump for a bug report?
仔細檢查一下安裝路徑,必要要求:安裝路徑下不能出現漢字。重裝一下即可
2、另一個是按F5查看代碼的時候總是出現錯誤或者不能使用的: 仔細看下文件,好多文件需要32位的IDA打開才能正常使用,可以用kali 輸入命令file + 文件名查看文件位數。
但有的不是這種問題,可以試一下如下解決方法:
圈着的Stack pointer 前邊勾選即可。