-
-
[旧帖]
[讨论]《C++反汇编与逆向分析》P228
0.00雪花
-
发表于:
2012-8-14 09:26
1775
-
[旧帖] [讨论]《C++反汇编与逆向分析》P228
0.00雪花
最近在CSDN上写了一些自己对“临时对象”的出现时机的看法。在跟网友讨论问题的时候发现了一个令人十分困惑的地方,想在这里求高人指点(新手不能再书籍讨论区发帖,请见谅)。问题如下:
《C++反汇编与逆向分析》一书中P228。在函数GetCReturn()返回自定义的类对象objA时,当函数运行完成后,会将函数体中的局部变量objA拷贝到提前传入函数体中的一个“隐含参数”(个人理解这就是main函数为临时对象开辟的栈空间)指定的内存中。按道理说,当函数运行完成后,应该直接将此“临时对象”中的内容通过rep movs直接拷贝到目标对象(main函数中)的objA中,但是P228中的反汇编代码在call指令后,又在main的栈中开辟了一块内存区间,不同于先前传入GetCReturn()函数中的那一区域,再次将返回的对象拷贝到新开辟的栈空间中,然后再拷贝到目标对象objA中。
这里为什么又要开辟另外的一个栈空间,为什么不能直接将提前开辟的栈空间中的内容直接拷贝到目标对象,个人尝试发现,如果我在自定义的类中,显式定义出构造函数的话,就会减少新开辟栈空间的反汇编代码。不知道这里的机制到底是什么,还请大家来帮忙看一看。多谢。
[课程]FART 脱壳王!加量不加价!FART作者讲授!