指针引用非法地址,理解指针含义

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

程序很短,方法和思想值得一看!

程序1:

#include <iostream>

using namespace std;

void main()

{

int b = 2100;//跟踪得到变量b的地址为0x0012ff7c

int *a;

a = (int *)0x0012ffff;//赋值为b变量地址附近的某个地址(经测试前四位和其相同一般都可以)

//,增加地址允许访问的概率性。

cout<<*a;

}

可以看出通过此等转换,指针可以访问任何此进程有访问权限的地址。利用此种方法就可以神不只鬼不觉地修改某些变量的值如下程序:

程序2:

#include <iostream>

using namespace std;

void main()

{

int b = 2100;//跟踪得到变量b的地址为0x0012ff7c

int *a;

a = (int *)0x0012ff7c;

*a = 2200;

cout<<b;

}

程序结果输出为2200,b值通过a指针给偷偷的修改了!

基本上可以看出,指针就是一个long型变量,只不过其具有特殊功能,可以通过*一起联合使用作为一个表示地址为此指针值的变量。

因此我们可以将程序1改的更隐藏,代码如下:

程序3:

#include <iostream>

using namespace std;

void main()

{

int b = 2100;//跟踪得到变量b的地址为0x0012ff7c

cout<<*(int *)0x0012ffff;

}

程序2也可改为:

#include <iostream>

using namespace std;

void main()

{

int b = 2100;//跟踪得到变量b的地址为0x0012ff7c

*(int *)0x0012ff7c = 2200;

cout<<(int *)0x0012ff7c;

}

作者:胡一刀 2005.7.13 email:hlq83@126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航