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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3121|回复: 6
收起左侧

[C&C++ 原创] 【笔记】从反汇编角度理解 this 关键字

  [复制链接]
潜伏者的破解 发表于 2015-11-12 20:37
本帖最后由 奋斗丶小Z 于 2015-11-12 21:23 编辑

先上代码:
[Asm] 纯文本查看 复制代码
struct Base
{
        int a;
        int b;
        int Plus()
        {
                return a + b;
        }
        int GetAddre()
        {
                return (int)this;
        }
};

int main(int argc, char* argv[])
{
        Base base; 
        base.a = 1;
        base.b = 2;
        printf("%d\n", sizeof(base));
        printf("%d\n", base.Plus());
        printf("0x%x\n", base.GetAddre());
        return 0;
}


运行结果:
3.png
从运行结果看,base对象的大小为8字节,所以函数写在结构体里是不占有空间的。


代码反汇编:
1.png

现在跟进到base.Plus()函数中:
2.png

结论:结构体中的函数被调用时,程序会自动将当前结构体对象的地址传递到函数中。
我们根据上面的运行结果和反汇编结果也可以看出, this的值等于ECX,所以this就是指向当前对象的指针


免费评分

参与人数 1热心值 +1 收起 理由
Cizel + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

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

Arlenhy 发表于 2015-11-12 21:31
函数名只是起到标识作用,不占用内存空间。
magnate2008 发表于 2015-11-13 18:21
luoky7 发表于 2015-11-15 10:00
灵动心境 发表于 2015-11-16 14:38
虽然不怎么懂汇编,但是记住楼主的结果了!谢谢楼主分享!
那么难 发表于 2015-11-19 16:34 来自手机
一个指针指向一个地址,C语言中的指针
jxbxp 发表于 2015-11-20 18:21
学习了,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-5-29 10:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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