全局变量与局部变量的特点


全局变量的特点

  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 }    

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM