C 反彙編九 全域性變數與區域性變數

2021-06-04 02:00:10 字數 2219 閱讀 8721

00401020   push        ebp

00401021 mov ebp,esp

00401023 sub esp,44h

00401026 push ebx

00401027 push esi

00401028 push edi

00401029 lea edi,[ebp-44h]

0040102c mov ecx,11h

00401031 mov eax,0cccccccch

00401036 rep stos dword ptr [edi] // 初始化

10: int x=10;

00401038 mov dword ptr [ebp-4],0ah //區域性變數ebp-4賦值0xa(10)

11: static int y=x;

0040103f xor eax,eax

00401041 mov al,[`variant'::`2'::$s1 (00427c58)] // 全域性變數初始化標誌放入al(8位乙個位元組)

00401046 and eax,1 // 取全域性變數初始化標誌的最後乙個位元組

00401049 test eax,eax // 比較

0040104b jne variant+45h (00401065) // 已經初始化,則跳過初始化過程

0040104d mov cl,byte ptr [`variant'::`2'::$s1 (00427c58)]

00401053 or cl,1

00401056 mov byte ptr [`variant'::`2'::$s1 (00427c58)],cl // 沒有初始化,則將初始化標誌置位

0040105c mov edx,dword ptr [ebp-4]

0040105f mov dword ptr [__cfltcvt_tab+0ab4h (00427c54)],edx // 初始化標誌置位後,將區域性變數的值賦值給全域性變數

12: static int z=g_x;

00401065 xor eax,eax

00401067 mov al,[`variant'::`2'::$s1 (00427c58)] // 全域性變數初始化標誌放入al(8位,乙個位元組)

0040106c and eax,2 // 取全域性變數初始化標誌的第二個位元組,即第二個全域性變數的初始化標誌

0040106f test eax,eax // 判斷

00401071 jne variant+6eh (0040108e) // 已經被初始化,則直接跳出

00401073 mov cl,byte ptr [`variant'::`2'::$s1 (00427c58)]

00401079 or cl,2

0040107c mov byte ptr [`variant'::`2'::$s1 (00427c58)],cl // 否則將初始化標誌置位

00401082 mov edx,dword ptr [g_x (00424a30)] // 全域性變數放edx

00401088 mov dword ptr [__cfltcvt_tab+0ab0h (00427c50)],edx // 全域性變數放到全域性靜態變數中

13: }

0040108e pop edi

0040108f pop esi

00401090 pop ebx

00401091 mov esp,ebp

00401093 pop ebp

00401094 ret

C 全域性變數與區域性變數

lession1.h extern bool a extern int b extern float c extern double d extern unsigned int e extern long f extern unsigned long g extern char h extern l...

全域性變數與區域性變數 C

區域性變數 作用域 函式內 包括形參 或 塊內 定義 函式內,包括形參,塊內 生命週期 從定義的那行開始分配記憶體,直至其所屬 塊內的最後一行結束或者return結束 儲存位置 儲存在棧中,當作用域結束後會自動釋放的區域性變數 注意 不同的作用域可以定義相同的區域性變數,否則不可.未初始化則預設值是...

區域性變數與全域性變數

根據c語言的說法,區域性變數 定義在方法內部的變數叫區域性變數 全域性變數 定義在方法外部的變數叫全域性變數。區域性變數和全域性變數的主要區別在於二者的生存週期不同。全域性變數的生存週期 靜態分配記憶體,程式執行期間常駐記憶體,直到程式執行結束。區域性變數的生存週期 動態分配記憶體,位於執行緒堆疊中...