滴水逆向——指针07课堂随笔

1.多级指针

创建指针后一定要赋值,否则就会出现野指针。
在这里插入图片描述
两个命令是完全一样的
选中的项目是p1[0]生成的,cdcall函数调用方法,先传最右边参数。
在这里插入图片描述
在这里插入图片描述
由图中可知push进3个参数,外平栈为0Ch。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ebp-8中存的是p2的值
在这里插入图片描述
在这里插入图片描述
三个printf是等价的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 数组指针(指向数组的指针)

在这里插入图片描述
由上图可看到 px和 * px输出的值是一样的(都是指向数组的首地址),但是是两种不同的类型。对他们进行++操作就可得到他们类型不同,如下图:
在这里插入图片描述
px+1,加法运算,实际加的数px是去掉 * 号后的类型(int[2]类型)宽度为8乘1,这里加8。
在这里插入图片描述

(* px)+i 解释:

例子1:定义的数组指针为char (*)[2]类型。
在这里插入图片描述

结果:实际上是(px+3 * 2 * 1)+3 * 1 从前往后 2 * 1时char [2]的宽度,1是char的宽度。

例子2:定义的数组指针为short (*)[2]类型。
在这里插入图片描述
结果:实际上是(px+3 * 2 * 2)+3 * 2 从前往后 2 * 2是short [2]的宽度 ,2是short的宽度。

例子3:定义的数组指针为int (*)[2]类型。
在这里插入图片描述
结果:实际上是(px+3 *2 * 4)+3 * 4 从前往后 2 * 4是int [2]的宽度 ,4是int的宽度。

一维数组指针真正要取数组里的值需要两个 * 号
在这里插入图片描述
(px+8 * 1)+ 4 * 1,arr中类型都为int4字节。则从1开始偏移为3字节,结果为4。
在这里插入图片描述
(px+8 * 3)+4 * 3。从1开始偏移9个字节。结果为10。
也可以写成2维数组形式达到同样目的:
在这里插入图片描述
但是两种表示方法不能混用:
在这里插入图片描述
一个加了24h,一个加了30h。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值