逆向彙編基礎

2021-08-10 19:21:29 字數 4886 閱讀 6969

1.1 cpu基本功能

1.1.1         目標**

計算機系統中的cpu只能執行機器指令

由機器指令組成的程式,被稱為目標程式,也被稱為目標**

計算機系統最終執行的是目標程式

int  cf11( void )

等價於:

xor   ecx, ecx

xor   eax, eax

inc   ecx

$ll3@cf11:

mov   edx, ecx

imul  edx, ecx

add   eax, edx

inc   ecx

cmp   ecx, 10

jle   $ll3@cf11

ret

1.1.2基本功能

1.執行機器指令

ücpu能夠直接識別並遵照執行的指令被稱為機器指令

ücpu一條接一條地依次執行存放在儲存器中的機器指令

ü每一條機器指令的功能通常很有限

ücpu能夠執行的全部機器指令,被稱為該cpu的指令集

ücpu決定機器指令。不同種類cpu,其指令集往往不相同

ü按指令的功能來劃分,通常機器指令可分為以下幾大類:

資料傳送指令、算術邏輯運算指令、轉移指令

處理器控制指令、其他指令等

2.暫存少量資料

ü乙個目標程式中的絕大部分指令是對資料進行各種運算或者處理

ücpu有若干個暫存器,可以用於存放運算資料和運算結果,還可以給出儲存單元位址

ü利用暫存器存放運算資料和運算結果,效率最高

ü大部分指令的運算元據至少有乙個在暫存器中

ücpu內可以用於存放運算資料和運算結果的暫存器數量很有限

3.訪問儲存器

ücpu要執行目標程式,就要訪問儲存器。目標程式在儲存器中,待處理              的資料也在儲存器中。這裡儲存器是指cpu能夠直接訪問的計算機系統的物理記憶體

ü儲存器(記憶體)由一系列儲存單元線性地組成,最基本的儲存單元為乙個位元組。為了標識和訪問每乙個儲存單元,給每乙個儲存單元規定乙個編號,也就是儲存單元位址

ücpu支援以多種形式表示儲存單元的位址。一些功能較強的cpu還支援以多種方式組織管理儲存器

int x = 1;

int y = 2;

void cf12( void )

等價於:

int x = 1;

int y = 2;

void cf12( void )

1.2      組合語言概念

1.2.1         機器指令

ü把cpu能夠直接識別並遵照執行的指令稱為機器指令

ü機器指令一般由操作碼和運算元兩部分構成

ü操作碼指出要進行的操作或運算

例如,加、減、傳送等

ü運算元指出參與操作或運算的物件,也指出操作或運算結果存放的位置

例如,暫存器、儲存單元和資料等

xor  ecx, ecx

xor  eax, eax

inc   ecx

lab1:  mov edx, ecx

imul edx, ecx

add   eax, edx

inc   ecx

cmp ecx, 10

jle    lab1

ret

等價於:

33 c9

33 c0

41

8b d1

0f af d1

03 c2

41

83 f9 0a

7e f3

c3

1.2.2         彙編格式指令

1.人們採用便於記憶、並能描述指令功能的符號來表示指令的操作碼。這些符號被稱為指令助記符

2.用符號表示運算元,如暫存器、儲存單元位址等

3.由指令助記符、操作符號和常量等表示的指令被稱為彙編格式指令

ü彙編格式指令的一般格式

[ 標號:]   指令助記符  [ 運算元表]

1.2.3         組合語言及其優缺點

組合語言

ü組合語言是一種程式語言,是機器語言的符號化

ü組合語言的語句主要是彙編格式指令和偽指令

ü由於組合語言的主體是彙編格式指令,而彙編格式指令又與機器密切相關,且功能有限,所以常把組合語言稱為低階語言

彙編和匯程式設計序

ü把用組合語言編寫的程式稱為組合語言源程式,或稱為彙編源程式,或簡稱為源程式。

ü把彙編源程式翻譯成目標程式的過程稱為彙編。

ü把完成彙編工作的工具或程式叫做匯程式設計序(彙編器)。

組合語言的優缺點

ü組合語言與機器關係密切

ü組合語言程式效率高

ü編寫組合語言源程式繁瑣

ü組合語言程式除錯困難

1.3      資料的表示和儲存

1.3.4 資料的儲存

ü以二進位制形式表示的資料和**存放在儲存器(記憶體)之中。

ü記憶體由一系列基本儲存單元線性地組成,每乙個基本儲存單元有乙個唯一的位址。通常,基本儲存單元由8個連續的位構成,可用於儲存乙個位元組的資料。所以,基本儲存單元也被稱為位元組儲存單元。

ü可以把記憶體看作為乙個很大的一維字元陣列,把位址看作為標識陣列元素的下標。

ü位元組儲存單元是基本的儲存單元。

ü乙個位元組儲存單元中8位資料的意義,根據需要可以有不同的解釋。

ü兩個連續的位元組儲存單元構成乙個字儲存單元。字儲存單元的位址是較低的位元組儲存單元的位址。「高高低低」規則

ü四個連續的位元組儲存單元構成乙個雙字儲存單元。

#include

char  buff = ;          // 130=0x82

int  a, b;

int  main( )

逆向工程之彙編基礎

1.1 暫存器 以下是通用暫存器 除了非通用暫存器還有eip指令指標暫存器 多數字串指令通常把ecx用作計數器,把esi作為源指標,把edi作為目的指標,通常情況下棧操作會使用ebp和esp。除了通用暫存器和eip指令暫存器外還有6個16位段暫存器 段 cs 資料段 ds 棧段 ss 額外段 es ...

逆向基礎之彙編(一)

目錄 1.前言 2.進製 2.1 進製的簡寫 3.資料寬度 4.原始碼 反碼和補碼 4.1 有符號與無符號 4.1.1 無符號 4.1.2 有符號 4.2 編碼規則 4.2.1 原碼 4.2.2 反碼 4.2.3 補碼 5 位運算 5.1 與運算 5.2 或運算 5.3 異或運算 5.4 非運算 5...

彙編 逆向工程基礎篇(基礎語法)

逆向工程 一 彙編 逆向工程基礎篇 一.單元,位,位元組。1.位 bit 電腦資料量中的最小單元,即0和 1。2.位元組 byte 乙個位元組有八位。3.字 word 乙個字有兩個位元組,即十六位。雙字 double word 兩個字,三十二位。千字 kilobyte 1024 個位元組 32 32...