• 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扫描它并加载保存的文件,发现该变量还是可以修改我们感兴趣的数据,那么对于指针变量的保存和加载,我们就学会了。

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

  • 相关阅读:
    使用Linux JumpServer 堡垒机进行远程访问
    武大50名学生造卫星,南航“00后”学生造火箭,后浪制造未来可期
    JZ04 [剑指 Offer 04] 二维数组中的查找
    SQL被当成代码?谷歌的理由绝了
    JavaScript 数组 【‘遍历数组’,‘增‘,‘删’,‘改‘,‘查‘】 详解 +增删查改数组案例
    2022河南萌新联赛第(七)场:南阳理工学院 B 龍
    HBuilder X配置代码块快速创建代码 VSCode配置代码块保姆级教程
    element树形控件单选
    C++ map clear内存泄漏问题
    『大模型笔记』Google CEO Sundar Pichai(桑达尔·皮查伊)谈人工智能的未来!
  • 原文地址:https://blog.csdn.net/qq_36694133/article/details/127818171