《軟體除錯分析技術》學習筆記(二)

2021-06-03 13:56:25 字數 3018 閱讀 7565

1.暫存器

暫存器m講的比較透徹。暫存器是**處理器cpu的組成部分,是有限存貯容量的高速存貯部件,它們可用來暫存指

令、資料和位址,是記憶體階層中的最頂端,也是系統獲得操作資料的最快速途徑。

1.1資料暫存器  

資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需占用匯流排和訪問

儲存器的時間。這些 低16位暫存器分別命名為:ax、bx、cx和dx,它和先前的cpu中的暫存器

相一致。在16位cpu中,ax、bx、cx和dx不能作為基址和變址暫存器來存放儲存單元的位址,

但在32位cpu中,其32位暫存器eax、ebx、ecx和edx不僅可傳送資料、暫存資料儲存算術邏輯

運算結果,而且也可作為指標暫存器, 所以,這些32位暫存器更具有通用性。

1.2變址暫存器

暫存器esi、edi、si和di稱為變址暫存器(index register),它們主要用於存放儲存單元在段內

的偏移量, 用它們可實現多種儲存器運算元的定址方式,為以不同的位址形式訪問儲存單元提供

方便。它們可作一般的儲存器指標使用。在字串操作指令的執行過程中,對它們有特定的要求,

而且還具有特 殊的功能。

1.3指標暫存器

暫存器ebp、esp、bp和sp稱為指標暫存器(pointer register),主要用於存放堆疊內儲存單元

的偏移量, 用它們可實現多種儲存器運算元的定址方式,為以不同的位址形式訪問儲存單元提供

方便。指標暫存器不可分割成8位暫存器。作為通用暫存器,也可儲存算術邏輯運算的運算元和運

算結果它們主要用於訪問堆疊內的儲存單元,並且規定:

bp為基指標(base pointer)暫存器,用它可直接訪問堆疊中的資料; 

sp為堆疊指標(stack pointer)暫存器,用它只可訪問棧頂。

1.4段暫存器

段暫存器是根據記憶體分段的管理模式而設定的。記憶體單元的實體地址由段暫存器的值和乙個偏

移量組合而成 的,這樣可用兩個較少位數的值組合成乙個可訪問較大物理空間的記憶體位址

1.5指令指標暫存器

指令指標eip、ip(instruction pointer)是存放下次將要執行的指令在**段的偏移量。在具有預

取指令功能的系統中,下次要執行的指令通常已被預取到指令佇列中,除非發生轉移情況。

1.6標誌暫存器

標誌暫存器(flags register,fr)又稱程式狀態字(program status word,psw)。這是乙個存

放條件標誌、控制標誌暫存器,主要用於反映處理器的狀態和運算結果的某些特徵及控制指令的執

行。2  彙編指令

彙編指令是組合語言中使用的一些操作符和助記符,還包括一些偽指令(如assume,end)。用

於告訴匯程式設計序如何進行彙編的指令,它既不控制機器的操作也不被彙編成機器**,只能為彙編

程式所識別並指導彙編如何進行。彙編指令多到數不過來。這裡來介紹些常用到的:

一、資料傳輸指令

mov        傳送字或位元組

push       把字壓入堆疊

pop        把字彈出堆疊

pusha      把ax,cx,dx,bx,sp,bp,si,di依次壓入堆疊

popa       把di,si,bp,sp,bx,dx,cx,ax依次彈出堆疊

pushad     把eax,ecx,edx,ebx,esp,ebp,esi,edi依次壓入堆疊

popad      把edi,esi,ebp,esp,ebx,edx,ecx,eax依次彈出堆疊

pushf      標誌入棧

popf       標誌出棧

lea        裝入有效位址

lds        傳送目標指標,把指標內容裝入ds

les        傳送目標指標,把指標內容裝入es

lahf       標誌暫存器傳送,把標誌裝入ah

sahf       標誌暫存器傳送,把ah內容裝入標誌暫存器

二、算術運算指令

add        加法

adc        帶進製加法

inc        加 1 

sub        減法

sbb        帶借位減法

dec        減 1

nec        求相反數(以 0 減之)

cmp        比較(兩運算元作減法,僅修改標誌位,不回送結果)

mul        無符號乘法

imul       整數乘法

div        無符號除法

idiv       整數除法

三、邏輯運算指令

or         或運算

and        與運算

xor        異或運算

not        取反

test       測試,兩運算元作與運算,僅修改標誌位,不回送結果

shl        邏輯左移

shr        邏輯右移

rol        迴圈左移

ror        迴圈右移

rcl        通過進製的迴圈左移

rcr        通過進製的迴圈右移

四、串指令

movsx      先符號擴充套件,再傳送

movzx      先零擴充套件,再傳送

movs       串傳送

cmps       串比較

五、程式轉移指令

jmp        無條件轉移指令

call       過程呼叫

ret        過程返回

jg/jnle    大於轉移

jge/jnl    大於或等於轉移

jl/jnge    小於轉移

jle/jng    小於或等於轉移

je/jz      等於轉移

jne/jnz    不等於時轉移

loop       cx不為零時迴圈

《軟體除錯分析技術》學習筆記(一)

今天開始寫寫一些心得體驗。軟體除錯分析技術 是好友monster的 作品。作為一直以的好夥伴,他是我看著長大的,嘻嘻 之所以有今天這樣的成績,是與他的努力和天賦脫不了關係的。他大方地給了我pdf版的,我也大方的給了我們全班。但我們班有同學說,這是撒子呦,看不看不懂 我決心寫一些學習筆記,和我班的同學...

《軟體除錯分析技術》學習筆記(三)

m給出乙個c程式 include include int a int main 這段 定義了乙個整型全域性變數a,在主函式main 中定義了乙個整型區域性變數b和乙個整形指標變數c,然後呼叫malloc 函式申請大小為1個整形變數的記憶體並把申請到的記憶體位址賦值給指標變數c,再依次給變數a b和c...

《軟體除錯分析技術》學習筆記(十)

函式呼叫 許多程式語言中,可以將一段經常需要使用的 封裝起來,在需要使用時可以直接呼叫,這就是程式中的函式 也被稱為過程 其實程式中的函式和數學中所說的函式是很相似的,都是通過輸入自變數 有些函式可能不需要自變數 然後經過一系列的運算,最後得出函式的值。在組合語言中對於函式的呼叫一般用乙個call指...