逆向——如何区分全局变量和局部变量、堆栈内存区域
第三节 局部变量与全局变量的区别
记住知识点:
1、全局变量,在程序生成后,内存地址是固定了,只有重新编译后
,内存地址才会改变
。
2、全局变量,在汇编中是内存地址的格式存储;局部变量是以[ebp-xxx]的格式存储。
局部变量与全局变量的区别
全局变量与局部变量的区别在于作用域的不同,且存在时间也可能不同。不管有不有外部的变量,main函数中的变量都不能称为全局变量。
全局变量是可以被本程序所有对象或函数引用。
例:
图中的代码,t1为全局变量,可以在main函数中使用,也可以在a函数中使用。
而t2 t3则为局部变量,它们只能在花括号内部被使用。
所以a函数不能使用t2,main函数也不能使用t3。
注意:vs2017、vs2022和vc6局部变量的差别,第一个局部变量是从ebp-8开始:
那么ebp-4是放啥了???
放security cookie了!!!见:为何vs编译边出来的程序ebp-4存放的不是第一个局部变量?而是security_cookie——本质上就是存的随机数和ebp异或的值
第四课 内存图
int globalVar = 1; //全局、局部变量存储在数据段
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = { 1, 2, 3, 4 };
char char2[] = "abcd";
char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof (int)* 4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int)* 4);
free(ptr1);
free(ptr3);
}
上述代码分别存储在什么地方呢?思考一下吧 ヾ(✿゚▽゚)ノ
如下是内存区域划分图,跟刚才你想的一样吗 ?????
标签:
逆向分析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2018-04-02 leetcode 543. Diameter of Binary Tree
2018-04-02 leetcode 268. Missing Number
2018-04-02 DBSCAN