Windows逆向安全(一)之基础知识(六)
创始人
2025-05-31 02:05:32
0

全局变量和局部变量

在提及全局变量和局部变量之前,需要先谈谈程序运行时在内存中的状态

任何一个程序在运行时都会把内存分成如下几块区域:

在这里插入图片描述

全局变量

  • 全局变量在程序编译完成后地址就已经确定下来了,只要程序启动,全局变量就已经存在了,启动后里面是否有值取决于声明时是否给定了初始值,如果没有,默认为0
  • 全局变量的值可以被所有函数所修改,里面存储的是最后一次修改的值.
  • 全局变量所占内存会一直存在,直到整个进程结束.
  • 全局变量的反汇编识别:
MOV  寄存器,byte/word/dword ptr ds:[0x12345678]

上面的0x12345678是固定的地址,每次程序启动都不变

通过寄存器的宽度,或者byte/word/dword 来判断全局变量的宽度

  • 全局变量就是所谓的基址

局部变量

  • 局部变量在程序编译完成后并没有分配固定的地址
  • 在所属的方法没有被调用时,局部变量并不会分配内存地址,只有当所属的程序被调用了,才会在堆栈中分配内存
  • 当局部变量所属的方法执行完毕后,局部变量所占用的内存将变成垃圾数据.局部变量消失
  • 局部变量只能在方法内部使用,函数A无法使用函数B的局部变量
  • 局部变量的反汇编识别
    [ebp-4]
    [ebp-8]
    [ebp-0xC]

例子

#include "stdafx.h"
//全局变量
int global=0x610;
int main(int argc, char* argv[])
{//局部变量int temp=0x160;global=global+temp;return 0;
}

在这里插入图片描述

4:    #include "stdafx.h"
5:    //全局变量
6:    int global=0x610;
7:    int main(int argc, char* argv[])
8:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,44h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-44h]
0040101C   mov         ecx,11h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
9:        //局部变量
10:       int temp=0x160;
00401028   mov         dword ptr [ebp-4],160h
11:
12:       global=global+temp;
0040102F   mov         eax,[global (00428a64)]
00401034   add         eax,dword ptr [ebp-4]
00401037   mov         [global (00428a64)],eax
13:
14:       return 0;
0040103C   xor         eax,eax
15:   }
0040103E   pop         edi
0040103F   pop         esi
00401040   pop         ebx
00401041   mov         esp,ebp
00401043   pop         ebp
00401044   ret

我们可以看到相关代码在这里:

9:        //局部变量
10:       int temp=0x160;
00401028   mov         dword ptr [ebp-4],160h
11:
12:       global=global+temp;
0040102F   mov         eax,[global (00428a64)]
00401034   add         eax,dword ptr [ebp-4]
00401037   mov         [global (00428a64)],eax

我们可以很清楚地看到局部变量是直接保存在[ebp-4]也就是堆栈中的

而全局变量则是保存在一个固定的内存地址00428a64里

同时在断点刚断下的时候,就是还没运行上面的代码时,观察[global (00428a64)]也就是全局变量地址里存储的内容时,可以看到

在这里插入图片描述
我们全局变量已经初始化并被赋值了,观察整个main函数的反汇编代码,我们并没有看到全局变量赋值相关的语句,但这并不能说明程序在运行前就已经赋值了,别忘了也有可能是在mainCRTStartup中将这里初始化的,为了印证这一点,我们直接将程序用OD打开,然后会在mainCRTStartup函数执行前断下,以此来验证是否是一打开程序全局变量就已经初始化了

输入之前全局变量的地址,然后查看

在这里插入图片描述
在这里插入图片描述

可以观察到左下角数据窗口里,我们的全局变量已经初始化了,验证完毕

相关内容

热门资讯

“AI数字人”亮明身份才能行稳... 记者近日随机采访了数十名路人,至少有七成受访者称曾刷到过“AI数字人”视频,并且“难以分清到底是真人...
数字模块赋能行政执法监督工作 转自:法治日报本报讯 记者战海峰 近日,重庆市涪陵区司法局依托重庆市“执法+监督”数字运用,打造“行...
巴州警方“流动驿站”打造便民服... 转自:法治日报□ 本报记者   潘从武□ 本报通讯员 朱祥明 李桂华  近年来,新疆维吾尔自治区巴音...
实时监测护航平安路 6月11日,中国铁路郑州局集团有限公司洛阳电务段综合分析室里,几名工作人员盯着电脑屏幕,对远在300...
北方稀土相关公司新增一项116... (转自:快查一企业中标了)快查APP显示,北方稀土相关公司内蒙古包钢钢联股份有限公司于2025年6月...
我们战队名字 是◇◆丶纪念 谁... 我们战队名字 是◇◆丶纪念 谁能帮我设计个YY马甲 ,谢谢了·喜欢就好,随意喜欢就好,随意 ◇◆丶纪...
旅游经营者未按约提供服务需承担... 本期法官赵爽 西宁市中级人民法院知识产权审判庭二级法官旅行经营者应当按照旅游合同约定全面履行义务,不...
“不仅要在物质形式上传承好,更... ●新华社记者 蒋芳 叶昊鸣 “水陆并行、河街相邻”,位于苏州古城东北隅的平江历史文化街区,...
汪汪叫的小岛读后感怎么写? 汪汪叫的小岛读后感怎么写?汪汪叫的小岛读后感怎么写?读后感是指读了一本书,一篇文章,一段话,一段视频...
“我随时可能走掉”是哪首歌? “我随时可能走掉”是哪首歌?那么骄傲 金海星
湫在名字里是什么意思? 湫在名字里是什么意思?基本字义1. 水潭:“南有龙兮在山~”。大龙~(瀑布,在中国浙江省雁荡山)。...
中医有哪些精彩的案例? 中医有哪些精彩的案例?中医流传了几千年,历史上的故事太多了,精彩的案例在我看来就是关羽当年的刮骨疗毒...
口袋妖怪出过原型是老虎的精灵吗... 口袋妖怪出过原型是老虎的精灵吗?有啊,雷公的原型不就是虎嘛雷公是虎,水君是豹,炎帝是狮
有心无力,爱莫能助的意思是什么... 有心无力,爱莫能助的意思是什么?我想要帮助你,却没有能力,爱莫能助。爱莫能助。就是喜欢,却不能相助。...
马向阳下乡记马向阳最后和谁在一... 马向阳下乡记马向阳最后和谁在一起了和周冰在一起了
锦绣北疆绿更浓 ●新华社记者 刘伟 张丽娜 魏婧宇 三北地区是我国生态脆弱地区,也是我国生态保护修复的攻...
一个道德败坏的人如果真心的知道... 一个道德败坏的人如果真心的知道错了,你们觉得能原谅吗?如果真的真心悔过,任何人都值得原谅,知错能改,...
句子成分问题? 句子成分问题?Go and wash that filth off your hand “off ...
5月份国民经济运行总体平稳、稳... 新华社北京6月16日电(记者 张晓洁 潘洁) 国家统计局16日发布的数据显示,今年5月份,国民...
用泥土与色彩雕琢时代年轮 张江豪正在雕刻泥塑作品(资料图片)。 李羚蔚 摄 ●李羚蔚 在乌鲁木齐市疆小陶...