首页 > 其他分享 >局部静态变量的初始化观测

局部静态变量的初始化观测

时间:2024-10-18 18:43:45浏览次数:5  
标签:初始化 局部变量 变量 静态 global mov int 全局变量

局部静态变量的初始化观测

//全局变量

int global=0x11111;

int main(int argc, char* argv[])

{

//局部变量

int temp=0x160;

global=global+temp;

return 0;

}

6: int global=0x111111;

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

可以查找到0040102F mov eax,[global (00428a64)]

我们可以很清楚地看到局部变量是直接保存在[ebp-4]也就是堆栈中的而全局变量则是保存在一个固定的内存地址00428a64里,同时在断点刚断下的时候,就是还没运行上面的代码时,观察[global (00428a64)]也就是全局变量地址里存储的内容时,可以看到我们全局变量已经初始化并被赋值了,观察整个main函数的反汇编代码,我们并没有看到全局变量赋值相关的语句,但这并不能说明程序在运行前就已经赋值了,别忘了也有可能是在mainCRTStartup中将这里初始化的,一打开程序全局变量就已经初始化了。

静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配好了内存,但在C和C++中静态局部变量的初始化节点又有点不太一样。在C中,初始化发生在代码执行之前,编译阶段分配好内存之后,就会进行初始化,所以我们看到在C语言中无法使用变量对静态局部变量进行初始化,在程序运行结束,变量所处的全局内存会被全部回收。而在C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始化必须执行相应构造函数和析构函数,在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作,并非简单地分配内存。所以C++标准定为全局或静态对象是有首次用到时才会进行构造,并通过atexit()来管理。在程序结束,按照构造顺序反方向进行逐个析构。所以在C++中是可以使用变量

标签:初始化,局部变量,变量,静态,global,mov,int,全局变量
From: https://www.cnblogs.com/maqun/p/18474860

相关文章

  • C++ 基础-面试题01(C和C++区别、C结构体和C++结构体区别、C和C++ static区别、a和&a区
    1.C和C++的区别特性CC++编程范式面向过程编程面向对象编程+面向过程编程+泛型编程类和对象不支持类和对象支持类和对象,封装、继承、多态等特性标准库标准库有限,如stdio.h、stdlib.h丰富的标准库,如STL(容器、算法)函数和运算符重载不支持支持内存管理手动管理,使用malloc......
  • Linux配置静态IP
    在日常实验中我们需要使用ssh工具来远程我们的linux系统,因此就需要配置系统的静态IP。linux系统一切皆文件,配置静态ip也就是在配置网络ip地址的文件内修改。linux系统的网络配置文件是放在/etc/sysconfig/network-netwrok内(CentOS6的网络配置文件是ifcfg-eth0,CentOS7的网络配置文......
  • Next.js 深度教程:服务端渲染、静态生成到增量静态再生 | 2024最新版
    优化字体和图像书接上回,我们学习了如何设计Next.js应用程序,让我们继续优化主页和添加自定义字体、图像。在网站设计中,字体扮演着关键角色,然而,若需获取并加载字体文件,项目中引入自定义字体可能对性能产生影响。Google采用累计布局偏移(CLS)作为评估网站性能和用户体验的指标。对......
  • iOS Swift 里的捕获变量
    在Swift中,闭包不仅可以作为函数的简洁表达方式,还能捕获和存储其所在上下文中的常量和变量。捕获的变量会随着闭包的生命周期延续,即使这些变量已经超出了原作用域,它们仍然可以在闭包中被访问和修改。这种行为被称为闭包捕获,是闭包的核心特性之一。//变量值捕获funcmakeIncrem......
  • web服务器静态资源下载
    1.使用Beego实现静态文件下载Beego是一个强大的GoWeb框架,提供了处理静态文件的功能。通过简单的配置,我们可以将本地文件夹作为静态资源目录,并为用户提供下载链接。1.1配置静态文件路径首先,在main.go中,我们使用SetStaticPath将本地的staticfiles目录映射为可以通......
  • el-cascader 级联选择器清空初始化
    解决方案判断输入框为空值之后做以下操作恢复到初始化状态: this.$refs.myCascader.$refs.panel.checkedValue=[];//清空选中值this.$refs.myCascader.$refs.panel.clearCheckedNodes();//清空级联选择器选中状态this.$refs.myCascader.$refs.panel.activePath=[]......
  • 云天社区管理平台---项目初始化
    云天社区管理平台---项目初始化环境配置准备工作创建项目项目结构四、运行和调试正式开发创建项目预览项目修改布局效果展示环境配置准备工作安装HUAWEIDevEcoStudioDevEcoStudio是基于IntelliJIDEACommunity开源版本打造,为运行在HarmonyOS和OpenHarmony......
  • github pages + hugo 搭建静态博客网站
    体验地址1.起因,目的:其实6年前,我就写过这个。项目代码博客地址最近想改写一下。github推荐的主题是Jekyll,我当时用的就是这个,感觉很麻烦。尤其是文章命名。新的主题hugo用起来还行。2.过程:过程记录,需要详细!因为问题非常多!3.参考教程:视频教程:ht......
  • 静态网页练习之我的网站
    文章目录静态网页练习之我的网站布局搭积木盒子思维div静态网页案例:实现思路:实现步骤:1.初始化页面,并且写好三个div标签2.引入头像,写好第一个div盒子的样式2.第二个div盒子设置样式3.第三个div盒子完整demo:静态网页练习之我的网站布局搭积木盒子思维根据我......
  • 变量与数据类型:程序的基本构建块!
    Java入门之旅:变量与数据类型的奥秘在编程的世界里,变量就像是每个程序员的好伙伴,它们在代码中存储着各种信息,帮助我们在计算机中执行复杂的逻辑。而数据类型则是对这些变量的基本属性定义,影响着它们的行为和存储方式。今天,就让我们一起探索Java中的变量和数据类型,揭开它们的......