发表人:ds 2022-06-01 09:37:38 最新回复: 2022-06-01 09:37:38
在栈上初始化变量的时候,对于栈变量,尤其是数组,一定要特别注意,如果访问越界,是没法通过valgrind表现出来的,例如如下代码,强制修改指针的地址,使得
变量x,可以修改数组c1的数据
#include <iostream>
using namespace std;
class StackOverAcc {
public:
StackOverAcc() {}
void fn() {
char x= 0;
char* addr = (char*)&x;
char c1[100] {0};
char *addr_c1 = addr+0x20;
cout<<"addr_c1="<<(void*)addr_c1<<", c1="<<(void*)c1<<endl;
c1[0] = 'A';
*addr_c1 = 'B';
cout<<"c1[0]="<<c1[0]<<endl; //c1[0]=B
c1[10] = 'D';
}
};
int main()
{
StackOverAcc sacc;
sacc.fn();
return 0;
}