指针有效性检查的函数
我们都知道几乎每个 Windows 程序在加载的时候都会为它分配堆段,用于存放静态数据,栈段,用于存放动态数据。除此还有代码段,一般开始于 ImageBase 0x00400000。一般指针如果指向了一个不允许访问的地址就会 Access Violation,我想能不能有办法让程序自己从 Windows 那里获得可访问地址段,如果指针指向了非可访问地址,就跳过,避免 Exception 出现。
比如,
char* a = (char*)0x00000000;
cout << a;
肯定 Access Violation,因为 a 不属于可访问的栈段。但,
char* a = (char*)0x00300000;
cout << a;
可以打印出一些无意义的东西,虽然没有用,但不会 Exception。
当然,堆会随着程序申请的空间而不断增大,所以就要求能获得堆段的起始地址和当前结束地址。