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


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

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

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

    1. #include
    2. #include
    3. int main()
    4. {
    5. int *number=(int*)malloc(sizeof(int));
    6. *number=100;
    7. while(1)
    8. {
    9. system("cls");
    10. int select=0;
    11. printf("当前数字为:%d\n",*number);
    12. printf("1.数字加10\n");
    13. printf("2.数字不变\n");
    14. printf("0.退出程序\n");
    15. printf("输入您的选项:");
    16. scanf("%d",&select);
    17. if(select==0)
    18. {
    19. break;
    20. }
    21. switch(select)
    22. {
    23. case 1:
    24. *number+=10;
    25. break;
    26. case 2:
    27. break;
    28. default:
    29. break;
    30. }
    31. }
    32. }

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

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

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

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

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

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

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

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

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

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

     

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

     

     直接确定

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

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

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

     

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

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

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

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

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

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

  • 相关阅读:
    Hbuilder本地调试微信H5项目(二)--添加UView框架插件
    基于单片机设计的自动门控制系统
    ABB机器人的MoveL和MoveJ运动指令基本功能介绍
    Canvas录制视频
    【Python语言速回顾】——爬虫基础知识
    从零开始的Linux 阿里云ECS服务器搭建、FileZilla和宝塔
    python带你采集桌游、剧本杀游戏店数据信息~
    复习Day08:哈希表part01:242.有效的字母异位词、349. 两个数组的交集、1. 两数之和、160. 相交链表
    【DRAM存储器十】SDRAM介绍-刷新
    .NET GC
  • 原文地址:https://blog.csdn.net/qq_36694133/article/details/127818171