逆向基礎之彙編(一)

2021-10-04 21:24:03 字數 1818 閱讀 5438

目錄

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.5 左移

5.6 右移

網鼎盃在即,大一大二打過演算法競賽,理所應當的成了組內逆向(re)選手,但是我這專業沒開過彙編,故學習之,話不多說,我們開始。

所謂簡寫就是將原本的二進位制化成十六進製制,如下圖:

這是winhex開啟的某個程式中的一小段,比如6d,二進位制的可讀性實在太差,故轉成十六進製制,需要我們熟練互相轉化。

如果是學過程式語言的朋友都會繞不開乙個叫做變數的概念,簡而言之,變數是用於跟蹤幾乎所有型別資訊的簡單工具。這些東西占用了計算機中的部分儲存空間,而計算機的儲存空間都是有他們的位址。

還是這張圖這個00000070就代表的是位址,類似於現實中的郵編,感興趣的朋友可以深入了解,這裡引入變數這個概念意指引出資料寬度這個概念。所有的資料都是存在乙個個變數中,而每個變數都有其大小,或者說寬度。

計算機常用的單位有:位元組、字、雙字等。他們的寬度(範圍)如下圖:

不必深究原因,只需知道當資料超出了上限,超過的位數將被丟棄。

在了解編碼規則之前需要先整明白數的符號。 

無符號數字在儲存的時候沒有特殊規則,轉換為二進位制直接儲存即可。例如:

127 => 0111 1111

現實世界的數字有正數和負數之分,計算機採用最高位來表示有符號數的正負。最高位是1則是負數,最高位是0則是正數。例如:

-126 => 1111 1110                  126 => 0111 1110

計算機中有三種編碼規則:原碼、反碼、補碼。

按二進位制編碼儲存,即符號位+數值。例如:126 => 0111 1110    -126 => 1111 1110

正數儲存規則與原碼相同,負數則符號位不變,其他按位取反。例如:126 => 0111 1110   -126 => 1000 0001

正數儲存規則與原碼相同,負數則符號位不變,其他位按位取反並+1。例如:126 => 0111 1110   -126 => 1000 0010

其中,原碼是儲存資料的必須手段,反碼則是讓計算機學會減法,補碼則是為了解決雙0問題。感興趣的可以訪問大佬的部落格:原碼、補碼和反碼深入了解。

計算機中運算規則有所不同,需了解。

規則:兩數都為1時才為1。例如:

規則:兩數有乙個為1即為1。例如:

規則:兩數不相同的時候為1。例如:

規則:0與1互換。例如:

規則:各位左移,高位丟棄,低位補0。例如:

規則:各位右移,低位丟棄,高位補符號位或0。例如:

補0右移兩位:

補符號右移兩位:

逆向彙編基礎

1.1 cpu基本功能 1.1.1 目標 計算機系統中的cpu只能執行機器指令 由機器指令組成的程式,被稱為目標程式,也被稱為目標 計算機系統最終執行的是目標程式 int cf11 void 等價於 xor ecx,ecx xor eax,eax inc ecx ll3 cf11 mov edx,e...

逆向工程之彙編基礎

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

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

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