彙編語言基礎指令解析

彙編語言

01.彙編語言簡介 02.進制 03.數據寄存器 04.指針寄存器 05.變址寄存器 06.指令指針寄存器 07.標誌寄存器 08.段寄存器 09.數據傳送指令 10.加減運算指令 11.邏輯運算 12.移位指令 13.test,cmp指令 14.push,pop指令 15.jmp,nop指令 16.jcc指令 17.call,retn指令 18.總結

學習彙編語言用處:遊戲外掛與反外掛,遊戲安全類,軟件破解,軟件暴力破解。。。

01.彙編語言簡介

彙編語言的由來:方便我們閱讀和記憶機器指令(硬編碼)

操作:寄存器ebx的內容移動到eax中
機器指令:1000100111011000    
彙編指令:mov eax,ebx

機器語言(硬編碼):由0和1組成

寄存器:cpu上的一個元件,它可以暫時保存數據(0,1)

02.進制

十進制:0 1 2 3 4 5 6 7 8 9

10 11 12 13…19 20

二進制:0 1

10 11 100 //102 113 100==4

十六進制:0 1 2 3 4 5 6 7 8 9 a b c d e f

10 11 12 //1016 1218

一般反彙編引擎(OD)都是以十六進制的形式表達二進制。

03.數據寄存器

寄存器:cpu上的一個元件(部件),讀寫速度非常快。

數據寄存器:保存操作數,計算結果。

EAX (Accumulator):累加寄存器,也稱之爲累加器; EBX (Base):基地址寄存器; ECX (Count):計數器寄存器; EDX (Data):數據寄存器;

32位寄存器:EAX,EBX,ECX,EDX

16位寄存器:AX,BX,CX,DX

低八位:al

高八位:ah

04.指針寄存器

指針寄存器:操作棧的寄存器

棧:參數,變量

EBP:棧底的指針

ESP:棧頂的指針

05.變址寄存器

esi和edi :用來存放一個地址的寄存器。

06.指令指針寄存器

eip:cpu下一次將要執行的代碼的地址。

07.標誌寄存器

標誌寄存器:flag寄存器 16位

置爲1

08.段寄存器

段寄存器是因爲對內存的分段管理而設置的。計算機需要對內存分段,以分配給不同的程序使用。

mov dword ptr ds:[0x405528],edx

ds.base+0x405528

09.數據傳送指令

mov ax,bx

10.加減運算指令

add

sub

add eax,8 //int a=8; a= 8+0;

11.邏輯運算

邏輯與:and

同爲1就爲1,只要一個不爲1,就不爲1。

mov eax,1;
and eax,2;
01
10
00

邏輯或:or

只要一個爲1,就是1。

mov eax,1;
or eax,2;
01
10
11

邏輯異或:xor

同爲0,異爲1。

mov eax,1;
xor eax,2;
01
10
11

邏輯非:not

mov eax,3;
not eax;
11
00

12.移位指令

算術移位指令:

// 算術左移
mov eax,2 //10(二進制) == 2(十進制)
sal eax,1 //算術左移與邏輯左移 功能是一樣的
00000010
00000100 //100(二進制) == 4
// 算術右移
mov eax,2 //10(二進制) == 2(十進制)
sar eax,1 //
00000010
00000001

邏輯移位指令:

// 邏輯右移
mov eax,2  //10(二進制) == 2(十進制)
shr eax,1   //
00000010
00000001

13.test,cmp指令

test指令:實際就是作邏輯與運算

與邏輯與(and)不同點是:test指令不會改變值,只會改變z標誌位的值。

and eax,1

test eax,1

cmp指令:實際上作的是減法運算

與算術運算(sub)不同點是:cmp指令也是不會改變值,只會影響到z標誌位。

sub eax,1
cmp eax,1

14.push,pop指令

push 壓棧指令

pop 出棧指令

棧:先進後出,後進先出

push指令:
	//push ebp
	01.提升棧頂(esp-4)
	02.把ebp裏面的內容壓到棧(esp-4)

pop指令:
	//pop ebp
	01.把棧頂裏面值取出來放到ebp
	02.恢復棧原來的樣子(esp+4)

15.jmp,nop指令

jmp指令:無條件跳轉指令

nop指令:空指令(cpu執行到這個命令什麼也不幹)

16.jcc指令

JCC指條件跳轉指令,CC就是指條件碼。

JZ 如果表達式計算的結果等於0,那麼zf標誌位會置爲1,則jz指令跳轉。

17.call,retn指令

call:

①jmp + 函數地址

②push call函數指令的下一行指令的地址

retn:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章