逆向分析技术学习小结

本文总结了Windows程序启动的过程,包括C/C++运行时启动函数的作用,如命令行检索、环境变量初始化等,并详细介绍了入口点函数、ExitProcess函数的调用。此外,还探讨了函数的返回值、参数传递、调用约定,以及局部变量的生成与管理,特别是编译器优化下的表现。同时,涉及虚函数表、转移指令的分类以及字符串编码形式。最后,讨论了strlen函数的优化实现和对eax寄存器的优化策略。
摘要由CSDN通过智能技术生成

1、所有C/C++运行时的启动函数作用基本相同:检索指向新进程的命令行指针、检索指向新进程的环境变量指针、全局变量初始化、内存堆栈初始化等。当所有的初始化操作完成后,启动函数就调用应用程序的入口点函数。

拿VC编译的程序来讲,有GetVersion(确定Windows系统版本)、GetCommondLineA(指向进程的完整命令行的指针)、GetStratupInfoA(获取进程的启动信息)、GetMoudleHandleA(返回进程地址空间执行文件基地址),然后调用入口点函数。当然,不同版本编译信息不同。

当入口点返回时,启动函数便调用C运行库的exit函数,将返回值(nMainRetVal)传递给它,进行一些必要的处理,最后调用系统函数ExitProcess退出。


2、函数的部分:返回值、函数名、参数、功能。

返回值:return一般放在EAX寄存器,如果超出大小,则放在EDX:EAX中。当然,也有通过引用传递和全局变量来返回值的。

名称修饰约定



参数传递:通过寄存器、全局变量、堆栈。其中传递参数需要遵循一定的调用约定&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值