No Picture

c++函数的返回值存在哪?反汇编代码分析

2016年1月17日 shaohua 0

这几天一直在给同学讲数据结构和算法的题,讲题的过程中突然想到这函数的返回值究竟是存放在哪的,为什么可以通过函数的调用来直接给变量赋值。仔细想想这么多年居然没有深究过这个问题,太不应该,于是今天花了些时间来好好研究了一下这个问题。也跟了一些thread,某些前辈的观点是“不应该动不动就提到寄存器,栈,堆这些较底层的概念。完全可以这样理解:返回值保存在一段临时区域,到下一条语句时,返回值被销毁,所以,如果要继续使用返回值,必须将返回值赋予其他变量。”这确实不假,但是我觉得这位前辈应该是在透彻理解了内在的机理之后才这么说的,我觉得作为学习过程还是应该深究一下。 另有一位前辈说“不大于32位的(返回值)在eax中,64位的在edx + eax中。再大就传指针了。” 那么就拿反汇编代码开刀,验证一下。 (一)  基础知识 在看反汇编代码之前,应该有几点要明确一下: 1.每个进程对应一个Call Stack(调用栈),而CallStack 又由许多Stack Frame(栈帧)组成,对应每个未完成的函数调用,由系统分配。(VC调试中默认是会显示调用栈窗口的,越往栈顶的就是越最近调用的函数,黑色显示 [点击详细……]

No Picture

中轉inline hook,不需要恢複首字節的hook

2016年1月17日 shaohua 0

注:我實驗的環境:win7 x64 經驗證XP會有稍微區別,主要是我本次實驗HOOK的API, 從XP到WIN7微軟有了些許改變。 —————————————————————————————————————————————- 最近在看驅動教程時,從前人的HOOK得到啓發,才有了本篇文章,在此甚是感激。 文章估計有些長,當是我的學習筆記了,適合有一定HOOK基礎的盆友, 我寫這篇文章的目的就是爲了提高HOOK的效率。 本次我以HOOK GetProcAddr [点击详细……]