全局變量的特點
1、全局變量在程序編譯完成后地址就已經確定下來了,只要程序啟動,全局變量就已經存在了,啟動后里面是否有值取決於聲明時是否給定了初始值,如果沒有,默認為0
2、全局變量的值可以被所有函數所修改,里面存儲的是最后一次修改的值.
3、全局變量所占內存會一直存在,知道整個進程結束.
4、全局變量的反匯編識別:
MOV 寄存器,byte/word/dword ptr ds:[0x12345678]
通過寄存器的寬度,或者byte/word/dword 來判斷全局變量的寬度
全局變量就是所謂的基址
1 int g_n = 10; 2 int Function() 3 { 4 int x = 2; 5 int y = 3; 6
7 return g_n+x+y; 8 } 9 int Function2() 10 { 11
12 int y = 3; 13
14 return g_n+x+y; 15 }
局部變量的特點:
1、局部變量在程序編譯完成后並沒有分配固定的地址.
2、在所屬的方法沒有被調用時,局部變量並不會分配內存地址,只有當所屬的程序被調用了,才會在堆棧中分配內存.
3、當局部變量所屬的方法執行完畢后,局部變量所占用的內存將變成垃圾數據.局部變量消失.
4、局部變量只能在方法內部使用,函數A無法使用函數B的局部變量.
5、局部變量的反匯編識別:
[ebp-4]
[ebp-8]
[ebp-0xC]
1 int Function() 2 { 3 int x = 2; 4 int y = 3; 5
6 return g_n+x+y; 7 } 8 int Function2() 9 { 10 int x = 3; 11 int y = 4; 12
13 return g_n+x+y; 14 }