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指...