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

推荐阅读:

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

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

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

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

讲述两点:

1、汇编下的p与p

2、有关指针初始化的金科玉律

int
p;

p与p,相信很多人都在这犯过迷糊,最后在死记硬背中记住了他们的区别,但实际怎样,也没有亲自到内存中看过,这里,就带您到内存中看看,到汇编中溜溜,看看p与p的庐山真面目。

简单的程序:
1走进内存,走进汇编指令来看C/C++指针#include<iostream>

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

3走进内存,走进汇编指令来看C/C++指针intmain()

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

5走进内存,走进汇编指令来看C/C++指针inti=1;

6走进内存,走进汇编指令来看C/C++指针intp=&i;

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

先看汇编代码分析:

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

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

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



再从内存验证以下是否真的如此:

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

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



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

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



Ok,认识他们了吧,呵呵。在学习C++指针时,很多人都云里雾里的,一会儿地址一会儿值的,老师说是啥,咱就背啥,最多也就是输出看一下。我自己好奇心很强,什么事情都喜欢刨根问底,那会儿最想掰开内存看看,到底是不是这样,但那时我不会,特憋屈感觉。如果你也跟我一样的话,看那,就是了,呵呵。其实自我感觉搞懂指针还是很有用的,特别是在学习跟安全有关的东西。

2、指针的初始化

只讲一点,关于使用指针的金科玉律:一定要在对指针应用解除引用操作符()之前,将指针初始化一个确定的、适当的地址。

依然是一个简单的小程序:
1走进内存,走进汇编指令来看C/C++指针#include<iostream>

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

3走进内存,走进汇编指令来看C/C++指针voidmain()

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

5走进内存,走进汇编指令来看C/C++指针inti=1;

6走进内存,走进汇编指令来看C/C++指针int
p;

7走进内存,走进汇编指令来看C/C++指针//intp = &i;

8走进内存,走进汇编指令来看C/C++指针p=1;

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

//一共两种情况,一种是之前给了指针一个确定的、适当的地址,然后赋值1,一种是没有,直接赋值1

直接看汇编指令:

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



仅介绍指针初始化的这条金科玉律,至于初始化的其他操作,应该没有什么了,翻翻书,好多,不再赘述。

参考书籍:C++ primer plus Stephen Prata著 孙建树 韦强 译
原文链接: https://www.cnblogs.com/shitouer/archive/2010/04/11/1709328.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/9861

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午10:55
下一篇 2023年2月6日 下午10:57

相关推荐