问题背景:
一个函数内部的局部变量 初始化 X=0,然后中间X++ 。再去访问时,X还是0;
伪代码
function A
{
int x=0;
int buff[4096];
int tx[4096];
....
;;;;
for()
{
x++
....
if(x == 1)
{
....
.....
}
function B(buff)
function C()
......
}
}
原本经过 function C 以后应该 x==1 但是,x==0.
针对这个问题思考我的思考点
(1)栈是不是溢出了,查看linux的栈带下8M。应该不会溢出
(2)数组越界访问,导致的读脏数据之类。
第一种思路不展开讲了,没多少意义
针对第二个思路,我发现了我们现有代码的一个漏洞
function B传入的buff指针,buff在function B内又通过传到 function B_1() function B_1_1()
在函数function B_1_1()对buff的指针进行了memset(0,size)。然后这个size= 27K。直接越界了。导致buff指针后面的数据全是0了。
function B系列的函数传入的是指针 ,没有待缓存的大小。在初始化时,memset直接使用了一个宏定义大小。。
当另一个人调用这个函数 function B_1_1()时,他不知道有一个宏定义的大小,他就定义了一个缓存buff【4096】,直接将指针传入了function B_1_1()。这就出现了越界。
一个架构的bug
调用关系越深,这种问题越不容易发现。