CE修改器学习历程之指针变量的保存

上一节课给大家介绍了普通变量的保存,本节课给大家介绍一下指针变量的保存。

如果一个变量是指针变量,那么我们按照普通变量的方式来保存是无效的,接下来我们先举个例子来简单说明这一现象。

我们对上节课的C程序稍作修改,把number变成一个指针变量

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *number=(int*)malloc(sizeof(int));
	*number=100;
	while(1)
	{
		system("cls");
		int select=0;
		printf("当前数字为:%d\n",*number);
		printf("1.数字加10\n");
		printf("2.数字不变\n");
		printf("0.退出程序\n");
		printf("输入您的选项:");
		scanf("%d",&select);
		
		if(select==0)
		{
			break;
		}
		
		switch(select)
		{
			case 1:
				*number+=10;
				break;
			case 2:
				break;
			default:
				break;
		}
	}
} 

可以看到,number此时是一个一级指针变量,判断一个指针变量是几级的,就看它有几个星号【*】。

如果我们按照上节课来操作,就会得到这种结果

就是说,我们查找到的地址已经不再是number指针指向的地址了。

这现象解释起来也十分简单 ,我们可以看到这段代码【int *number=(int*)malloc(sizeof(int));

它的意思就是程序运行的时候给number指针随机分配一段可用的地址空间,所以每次运行程序的时候,分配的地址空间都不尽相同,也就成功解释了我们保存的地址为啥不是上一次保存的数据了,那我们如果应对指针变量这种情况呢?

说起来也不难,指针它指向的地址是变化的,但是指针本身是不变的,有点抽象吧。

对于我们的内存单元,我们可以这样形象化,每一个内存单元由一个地址和一个数值这两个属性来描述。对于我们此课的C程序,number它是一个指针,它有自己的地址,它的数值存放的是我们要保存的数据的地址,用图来解释就是

每次启动number指针的数值都会发生变化,所以我们直接保存要保存的数据的地址是不正确的,会导致程序重新运行的时候找不到要找的数据

所以我们正确的保存姿势,应该是保存number指针的地址以及偏移量

但是无论如何,我们先利用第一节课的知识找到要保存的数据的地址

 

右键单击选中的记录,选择对此地址指针进行扫描

 

 直接确定

 第一次扫描将名称命名为1.ptr即可,以后依次类推。

 这是第一次扫描出来的结果。可以看到有着上千个,暂时还不好断定哪个是我们要找的number指针。

我们可以把C程序进程关闭掉,重新打开,并使用CE修改器打开该进程,再回到1.ptr窗口,右键单击一条数据并选择更新视图。

 

可以看到有一些地址以及不再指向我们要找到数据了, 由于是一级指针,我们点击基址列排序

可以看到一级指针有且仅有一个,鼠标左键双击它,即可将其加入我们的记录栏目中。

 接下来就可以把CE修改器多余的窗口关闭掉了,只留下主窗口即可。

图中所示为我们找到的number指针地址以及其偏移量,可以轻松修改数据。

我们使用上节课的方式保存,再重新打开C进程,CE扫描它并加载保存的文件,发现该变量还是可以修改我们感兴趣的数据,那么对于指针变量的保存和加载,我们就学会了。

多级指针如何查找呢?怎么确定它是几级指针呢? 下面把问题留给大家了,希望可以认真思考并积极回答,评论区就留给你们了。

猜你喜欢

转载自blog.csdn.net/qq_36694133/article/details/127818171