首页
社区
课程
招聘
[求助]这两条语句怎么解释
发表于: 2015-10-8 10:46 4948

[求助]这两条语句怎么解释

2015-10-8 10:46
4948
下面IDA F5出来的语句,两条语句都是出现在构造函数中(两个构造函数),给同一个变量赋值,为什么F5出来后不一样。

语句1:  *(_DWORD *)(a1 + 56) = 0;
语句2:  *((_DWORD *)this + 14) = 0;

求懂的朋友解答。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 289
活跃值: (83)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
2
指针++啊   14*4=56
2015-10-8 11:01
0
雪    币: 18
活跃值: (1039)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
语句1:  *(_DWORD *)(a1 + 56) = 0; //内存位置赋值.
语句2:  *((_DWORD *)this + 14) = 0;//类成员变量赋值.

注意上面括号的区别就知道了.
2015-10-8 11:14
0
雪    币: 18
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你好,能解释的再详细点吗,我不懂得就是上面括号和指针的用法
2015-10-8 11:39
0
雪    币: 18
活跃值: (1039)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
语句1:  *(_DWORD *)(a1 + 56) = 0;
这句里面a1是一个内存地址,现在加上偏移56,获得一个新位置,然后强行清零DWORD大小的字节.
语句2:  *((_DWORD *)this + 14) = 0;
这里this是一个指针,转换为DWORD*加上偏移14再赋值,为什么不直接使用this加偏移?因为this是c++里面的一个关键字,没有类型定义,这里是强行转换为DWORD的指针类型再赋值,同时这句应该在当前类的构造函数里面执行,第一句应该在其他类里面执行,也就是说a1是一个指向语句2类的变量.
2015-10-8 11:59
0
雪    币: 2852
活跃值: (2650)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
二楼已经说了,4字节型的指针+14等于地址+14*4=56
所以两种写法,指向的地址是同一个
2015-10-8 11:59
0
雪    币: 18
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
十分谢谢
2015-10-8 13:04
0
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
a1->_member1 = 0;
this->_member2 = 0;
2015-10-8 17:09
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
说道重点了,一下就明白了.
2015-10-10 14:18
0
游客
登录 | 注册 方可回帖
返回
//