首页
社区
课程
招聘
[旧帖] [讨论]《C++反汇编与逆向分析》P228 0.00雪花
发表于: 2012-8-14 09:26 1775

[旧帖] [讨论]《C++反汇编与逆向分析》P228 0.00雪花

2012-8-14 09:26
1775
最近在CSDN上写了一些自己对“临时对象”的出现时机的看法。在跟网友讨论问题的时候发现了一个令人十分困惑的地方,想在这里求高人指点(新手不能再书籍讨论区发帖,请见谅)。问题如下:
《C++反汇编与逆向分析》一书中P228。在函数GetCReturn()返回自定义的类对象objA时,当函数运行完成后,会将函数体中的局部变量objA拷贝到提前传入函数体中的一个“隐含参数”(个人理解这就是main函数为临时对象开辟的栈空间)指定的内存中。按道理说,当函数运行完成后,应该直接将此“临时对象”中的内容通过rep movs直接拷贝到目标对象(main函数中)的objA中,但是P228中的反汇编代码在call指令后,又在main的栈中开辟了一块内存区间,不同于先前传入GetCReturn()函数中的那一区域,再次将返回的对象拷贝到新开辟的栈空间中,然后再拷贝到目标对象objA中。

这里为什么又要开辟另外的一个栈空间,为什么不能直接将提前开辟的栈空间中的内容直接拷贝到目标对象,个人尝试发现,如果我在自定义的类中,显式定义出构造函数的话,就会减少新开辟栈空间的反汇编代码。不知道这里的机制到底是什么,还请大家来帮忙看一看。多谢。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你说的是那个add esp ,4吧?那个不是用来开辟栈空间的,这个是用来平栈的,回到压栈eax前的状态
2013-3-17 22:28
0
游客
登录 | 注册 方可回帖
返回
//