首页
社区
课程
招聘
[原创]静态变量的底层实现
发表于: 2019-6-28 17:50 4586

[原创]静态变量的底层实现

2019-6-28 17:50
4586

静态变量有局部静态变量(作用域内的静态变量),全局静态变量,然而他们的实现和全局变量是一样的,而局部静态变量只能在作用域访问是C语言的优化。

局部静态变量不会随作用域结束而销毁,并且在未进入作用域之前就已经存在,其生命周期也与全局变量相同。局部静态变量和全局变量都保存在执行文件中的数据区中。

局部静态变量会预先被作为全局变量处理,而它的初始化部分,只是在做赋值操作而已。

在C++语法中局部静态变量只能被初始化一次,编译器的内部实现如下


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2019-7-17 04:24 被Hasic编辑 ,原因: 乱码修改
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 602
活跃值: (584)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
原文地址   299K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5i4y4A6j5$3u0A6N6q4)9J5k6h3y4F1i4K6u0r3x3U0l9I4z5q4)9J5c8U0p5H3i4K6u0r3x3U0m8Q4x3V1j5J5x3o6p5^5i4K6u0V1x3e0m8Q4x3X3b7J5x3q4)9J5k6q4)9J5y4f1f1&6i4K6t1#2z5f1c8Q4x3U0f1&6z5g2)9J5y4f1f1$3i4K6t1#2z5o6m8Q4x3U0f1^5x3g2)9J5y4f1f1#2i4K6t1#2z5p5k6Q4x3U0f1&6z5q4)9J5y4f1f1&6i4K6t1#2z5o6N6Q4x3U0f1^5c8W2)9J5y4f1f1#2i4K6t1#2b7V1q4Q4x3U0f1&6y4g2)9J5y4f1f1#2i4K6t1#2b7U0q4Q4x3U0f1^5x3W2)9J5y4f1f1#2i4K6t1#2b7f1g2Q4x3U0f1&6c8g2)9J5y4f1f1%4i4K6t1#2z5p5g2Q4x3U0g2n7x3q4)9J5c8R3`.`.
2019-6-28 17:57
0
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
。。。。。原创?
2019-6-28 18:34
0
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
没看明白 楼主能否讲得再细致一点呢
2019-7-1 14:14
0
雪    币: 602
活跃值: (584)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
killpy 没看明白 楼主能否讲得再细致一点呢
每个静态变量都会在有一个BIT位置存储它的初始化状态,这个BIT位会在static变量地址的附近,第一次初始化判断BIT位是否为1,如果是1跳过赋值代码,如果不是1,赋值为1 (or 指令)。
2019-7-15 08:56
0
雪    币: 602
活跃值: (584)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
killpy 没看明白 楼主能否讲得再细致一点呢
文中代码
void Static(int nNum)
{
    static int g_nNum = nNum;
    xor eax,eax
    mov al,byte ptr['Static'::'2'::$$1 (004257cc)]
    and eax,1
    test eax,eax
    jne pp
    mov cl,byte ptr['Static'::'2'::$$1 (004257cc)]
    or cl,1
    mov byte ptr['Static'::'2'::$$1 (004257cc)], cl
    mov edx,[ebp + 8]
    mov [_sbh_sizeHeaderList+4 (004257c8)],edx
pp:
    printf("%d", g_nNum);
}
2019-7-15 08:57
0
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
Hasic 文中代码 void Static(int nNum) { static int g_nNum = nNum; xor eax,eax mov al,byte ptr[ ...
知道了 感谢
2019-7-21 13:54
0
游客
登录 | 注册 方可回帖
返回