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

2021-06-03 16:14:41 字數 1477 閱讀 8461

m給出乙個c程式

#include #include int a; 

int main()

這段**定義了乙個整型全域性變數a,在主函式main()中定義了乙個整型區域性變數b和乙個整形指標變數c,然後呼叫malloc()函式申請大小為1個整形變數的記憶體並把申請到的記憶體位址賦值給指標變數c,再依次給變數a、b和c指向的記憶體賦值1、2、3,接下來釋放剛才申請到的堆記憶體,釋放後退出主函式main()。

用od載入

.text:00401000    push    ebp 

.text:00401001 mov ebp, esp

.text:00401003 sub esp, 8

這裡把棧頂向下壓8個位元組,為整型變數b和指標變數c開闢空間。它們都是區域性變數。

.text:00401006    push    4               ; size 

.text:00401008 call ds:__imp__malloc

.text:0040100e add esp, 4

.text:00401011 mov [ebp+c], eax

乙個整型變數占用的空間為4個位元組,這裡呼叫函式malloc()申請大小為4個位元組的堆空間,然

後把申請到的記憶體空間位址賦值給變數c。

.text:00401014    mov     ?a@@3ha, 1      ; int a 

.text:0040101e mov [ebp+b], 2

.text:00401025 mov eax, [ebp+c]

.text:00401028 mov dword ptr [eax], 3

這裡分別給三個變數賦值1、2、3。可以看到變數a所使用的記憶體空間位址是乙個常量,它存在於程式的資料段中;變數b所使用到的記憶體空間位址是ebp+b,它位於棧區;指標變數c儲存的資料是剛才由函式malloc()申請到的堆空間位址。

.text:0040102e    mov     ecx, [ebp+c] 

.text:00401031 push ecx ; memory

.text:00401032 call ds:__imp__free

.text:00401038 add esp, 4

.text:0040103b xor eax, eax

.text:0040103d mov esp, ebp

.text:0040103f pop ebp

這裡呼叫函式free()來釋放剛才由函式malloc()申請到的堆空間位址。

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

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

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

1.暫存器 暫存器m講的比較透徹。暫存器是 處理器cpu的組成部分,是有限存貯容量的高速存貯部件,它們可用來暫存指 令 資料和位址,是記憶體階層中的最頂端,也是系統獲得操作資料的最快速途徑。1.1資料暫存器 資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需占用匯流排和訪問 儲存器...

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

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