吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16312|回复: 34
收起左侧

[调试逆向] 在汇编的角度来看C语言3级指针

  [复制链接]
SuperProgram 发表于 2018-5-17 10:21
C语言中指针使用频率是很高的,我们知道指针一个特殊的变量,它的值是指向一块内存地址

我写了一个简单的C代码
[C] 纯文本查看 复制代码
void Test1()
{
	int ***ptr_int = NULL;

	int i1 = 100;

	int *ptr_1 = &i1; //一级内存地址空间偏移

	int **ptr_2 = &ptr_1; //二级内存地址空间偏移

	ptr_int = &ptr_2; //三级内存地址空间偏移

	int k = ***ptr_int;
}


编译,然后OllyDbg载入

11.jpg

我们一句句来

mov dword ptr ss:[ebp-0xC],0x0
将值0 放入栈空间地址  ss:[ebp-0xC]  物理地址为  00D3FBDC
对应C代码    int ***ptr_int = NULL;

mov dword ptr ss:[ebp-0x18],0x64
将值0x64 放入栈空间地址 ss:[ebp-0x18]  物理地址为  00D3FBD0  00000064
对应C代码  int i1 = 100;


这两行代码 先将  ss:[ebp-0x18] 地址赋给寄存器 eax,然后将eax值赋给地址 ss:[ebp-0x24]
00E41716    8D45 E8         lea eax,dword ptr ss:[ebp-0x18]
00E41719    8945 DC         mov dword ptr ss:[ebp-0x24],eax

对应C代码
int *ptr_1 = &i1; //一级内存地址空间偏移
这里的 ss:[ebp-0x18]便是 整型变量i1的内存地址



这两行代码 做的事情同上,但注意地址变化了,这是是将地址 ss:[ebp-0x24] 赋给 ss:[ebp-0x30]
而 ss:[ebp-0x24]就是指针变量 int *ptr_1的值
00E4171C    8D45 DC         lea eax,dword ptr ss:[ebp-0x24]
00E4171F    8945 D0         mov dword ptr ss:[ebp-0x30],eax

对应C代码
int **ptr_2 = &ptr_1; //二级内存地址空间偏移



这两行代码 做的事情同上,  将二级指针变量地址  ss:[ebp-0x30] 赋给  ss:[ebp-0xC]三级指针变量
00E41722    8D45 D0         lea eax,dword ptr ss:[ebp-0x30]
00E41725    8945 F4         mov dword ptr ss:[ebp-0xC],eax

对应C代码
ptr_int = &ptr_2; //三级内存地址空间偏移


将3级指针地址对应的解引用 取 出来。
00E41728    8B45 F4         mov eax,dword ptr ss:[ebp-0xC]  

对应C代码

int k = ***ptr_int;







免费评分

参与人数 18吾爱币 +20 热心值 +17 收起 理由
doctorblackjack + 1 + 1 谢谢@Thanks!
yimo_chenai + 1 + 1 谢谢@Thanks!
天空下骄傲 + 1 + 1 谢谢@Thanks!
balloon0104 + 1 + 1 用心讨论,共获提升!
18627026939 + 1 + 1 我很赞同!
rover牧马人 + 1 + 1 用心讨论,共获提升!
Jeep + 1 + 1 用心讨论,共获提升!
玩世不攻 + 1 + 1 热心回复!
kilkilo502 + 1 + 1 谢谢@Thanks!
xiaofeiyang + 1 + 1 谢谢@Thanks!
粉藍弟 + 1 + 1 我很赞同!
戏言19 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bbn + 1 + 1 我很赞同!
xinkui + 1 + 1 用心讨论,共获提升!
边缘随行 + 1 + 1 厉害
Honey丶Linux + 2 + 1 牛逼
bgmqk8 + 1 我很赞同!
L4Nce + 3 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zzzain46 发表于 2018-5-18 19:47
正在学习C语言,学了没几节课就已经听说了指针的厉害...作为一个小白,还是先收藏下来了,等日后用到了再看看
gunxsword 发表于 2018-5-17 11:18
C++反汇编与逆向分析技术揭秘 推荐这本书,讲的很好!
jim19 发表于 2018-5-17 17:36
最好定义堆变量三级指针来说明这种层级以及地址关系
沧海一声贱笑 发表于 2018-5-17 20:56
正在看mooc里面的计算机系统基础,看到汇编就比较懵。。
.·.·. 发表于 2018-5-17 21:14
编译时候有没有试试-O3
:)
会很好玩的
闲月疏云 发表于 2018-5-17 23:11
.·.·. 发表于 2018-5-17 21:14
编译时候有没有试试-O3
:)
会很好玩的

编译优化本来就不是在这种时候开启的。
caoyuze 发表于 2018-5-18 04:52
楼主可以的
kanxue2018 发表于 2018-5-18 07:51
指针是最难也是最灵活的。
jj120511 发表于 2018-5-18 08:36
学习了~感谢分享
头像被屏蔽
Dormleader 发表于 2018-5-18 09:30
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 20:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表