论坛首页> 三共建设

栈访问越界的演示代码(win-msvc14.2)

在栈上初始化变量的时候,对于栈变量,尤其是数组,一定要特别注意,如果访问越界,是没法通过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;
}



全部回复

暂无更多回复内容