推荐阅读:

C++反汇编代码分析–函数调用

C++反汇编代码分析–循环结构

C++反汇编代码分析–偷调函数

走进内存,走进汇编指令来看C/C++指针

讲述两点:
      1、汇编下的p与*p
      2、有关指针初始化的金科玉律
int* p;
p与*p,相信很多人都在这犯过迷糊,最后在死记硬背中记住了他们的区别,但实际怎样,也没有亲自到内存中看过,这里,就带您到内存中看看,到汇编中溜溜,看看p与*p的庐山真面目。
简单的程序:

1#include <iostream>
2using namespace std;
3int main()
4{
5    int i = 1;
6    int* p=&i;
7}

先看汇编代码分析:
(如果您不理解为什么[ebp-4][ebp-8]处存放的是函数第一和第二个局部变量,您可先阅读《C++反汇编代码分析--函数调用 》)

看到很多人问 指针p指向一个地址,那指针p有自己的地址么?答案是肯定的,通过上面的分析可以看出 p的地址是0012ff40,此地址处存放的是变量i的地址。除了通过这种方式,其实还有一种可输出的方式查看p自己的地址,int*(*q)=&p;则q存放的就是p的地址,可以自己输出查看一下。

再从内存验证以下是否真的如此:
我们已经分析出来p的地址是0012ff40,可以直接在内存观察器中看一下,如图:

最后一个小验证,呵呵,直接在变量监视器中看(其实是最简单的):

Ok,认识他们了吧,呵呵。在学习C++指针时,很多人都云里雾里的,一会儿地址一会儿值的,老师说是啥,咱就背啥,最多也就是输出看一下。我自己好奇心很强,什么事情都喜欢刨根问底,那会儿最想掰开内存看看,到底是不是这样,但那时我不会,特憋屈感觉。如果你也跟我一样的话,看那,就是了,呵呵。其实自我感觉搞懂指针还是很有用的,特别是在学习跟安全有关的东西。
2、指针的初始化
只讲一点,关于使用指针的金科玉律:一定要在对指针应用解除引用操作符(*)之前,将指针初始化一个确定的、适当的地址。
依然是一个简单的小程序:

1#include <iostream>
2using namespace std;
3void main()
4{
5    int i = 1;
6    int* p;
7   //int*p = &i;
8    *p=1;
9}
//一共两种情况,一种是之前给了指针一个确定的、适当的地址,然后赋值1,一种是没有,直接赋值1

直接看汇编指令:

仅介绍指针初始化的这条金科玉律,至于初始化的其他操作,应该没有什么了,翻翻书,好多,不再赘述。
参考书籍:C++ primer plus Stephen Prata著 孙建树 韦强 译

走进内存,走进汇编指令来看C/C++指针相关推荐

  1. 实验1 查看CPU和内存、用机器指令和汇编指令编程

     实验任务 一.使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码        汇编指令 b8 20 4e     mov ax,4E20H 05 16 14     add ax,1 ...

  2. ARMv7和ARMv8中关于内存访问的汇编指令总结对比

    ARMv7和ARMv8中关于内存访问的汇编指令总结对比 文章目录 ARMv7和ARMv8中关于内存访问的汇编指令总结对比 前言 ARMv7下的内存访问指令 寻址模式 多加载/存储 ARMv8下的内存访 ...

  3. 8086CPU常见汇编指令、debug命令

    一条指令对应的两个操作数位数必须一致 汇编指令: 1.mov x,y 传送:y到x x,y: 寄存器,数据 寄存器,寄存器 寄存器,内存物理地址 内存物理地址,寄存器 内存物理地址,数据 寄存器,内存 ...

  4. 汇编语言:实验一 查看CPU和内存,用汇编指令和机器指令编程

    Debug的使用: Debug 是DOS和Windows 实模式 (8086方式)的调试器,可以查看修改寄存器内容以及内存内容,机器码级别 Debug命令: 1)R命令:显示或修改寄存器内容 -r 显 ...

  5. 实验一 查看CPU和内存 用机器指令和汇编指令编程

    一. Debug的使用 1. 什么是Debug Debug是Dos.Windows都提供的实模式(8086方式)程序调试的工具.使用它,可以查看CPU各种寄存器的内容.内存的情况和在机器码级跟踪程序运 ...

  6. [汇编语言]实验一:查看CPU和内存,用机器指令和汇编指令编程。

    实验一 实验任务: 查看CPU和内存,用机器指令和汇编指令编程. 实验内容: (1)实验代码: 开始执行命令: (2)实验代码: (3)实验代码: 找到了,日期为:01/01/92,这个是虚拟机dos ...

  7. 【实验报告】微处理器原理与应用 CPUHomework1.2 上篇【掌握DEBUG基本命令及其功能 查看CPU和内存 用机器指令和汇编指令编程】

    实验报告 课程名称:微处理器原理与应用 实验名称:CPUHomework1.2 掌握 DEBUG 基本命令及其功能 文章目录 实验报告 [实验目的] [实验要求] 上篇[查看CPU和内存,用机器指令和 ...

  8. 实验一 查看CPU和内存,用机器指令和汇编指令编程

    1.打开DosBox,输入指令:mount c d:\masm 2.使用R命令查看.改变CPU寄存器的内容 (1)查看 CS=073F,IP=0100,所以内存073F:0100处的指令为CPU当前要 ...

  9. 汇编语言——用DOSBox的debug查看CPU和内存 用机器指令和汇编指令编程

    实验一 查看CPU和内存,用机器指令和汇编指令编程   实验目的 了解什么是Debug,以及Debug中需要用的一些功能 R:查看.改变CPU寄存器的内容 D:查看内存中的内容 E:改写内存中的内容 ...

  10. 关于win10系统如何调用debug查看CPU汇编指令和内存

    下载安装DOSBox.网上提供下载地址:DOSBOX Debug是DOS(Disk Operating System,磁盘操作系统).windows提供的实模式(8086方式)程序的调试工具.使用它, ...

最新文章

  1. 别挖我的墙脚!乔布斯生前邮件竟爆出秘密协议
  2. LNMP(Nginx负载均衡,SSL原理,Nginx配置SSL,生产SSL密钥对)
  3. 欧加自贸协定“难产” 物联网安全受关注
  4. c语言输出后面空格,新人提问:如何将输出时每行最后一个空格删除
  5. 微信红包随机生成算法(PHP版)
  6. 异步串行通讯和同步串行通讯对比
  7. dspemif怎么读_DSP技术在EMIF接口中的BOOT方法简析
  8. 驱动精灵w8ndows xp sp2,爱普生Epson TM-T90打印机驱动官方正式版下载,适用于winxp,winvista,win7,win8,win10-驱动精灵...
  9. java 读取rtf字节_JAVA读取RTF文档
  10. 关于Pycharm进行pytorch分布式训练代码
  11. K_MEANS 聚类
  12. Qt Creator 添加大恒相机SDK库
  13. 拉肚子差评回复模板_女子吃外卖烧烤后拉肚子给差评,老板电话骂人后还说“欧耶”...
  14. torch.load received a zip file
  15. 为什么成立计算机维修社团,张家口煤矿机械制造高级技工学校学生计算机维修社团成立...
  16. 【机器学习】adaboost算法
  17. XChat屏幕聊天插件
  18. 基于工业物联网的草场环境监测信息管理系统
  19. Fiddler_Https_浏览器与手机端_抓包_手顺书
  20. 线性回归、logistic回归、一般线性模型回归

热门文章

  1. Xcode8自带注释不管用解决办法
  2. 如何运行自动 Mac 清理
  3. Tuxera NTFS有什么优点可以让我们使用?
  4. 【Flutter】Dart中的继承
  5. 【Flutter】Dart中的类和对象
  6. 如何在NEO区块链上实现信息加密
  7. 新手学习Linux——搭建个人论坛
  8. Eclipse下搭建Android的NDK开发环境
  9. Apache-ActiveMQ消息队列 — HelloWorld实例
  10. 手工删除oracle的方法