详细执行流程:
(1) 启动函数
检索命令行指针-》初始化全局变量,堆栈等。
(2) 进入WinMain(): Call 00401000
根据不同的调用约定执行不同的压栈顺序。
_stdcall WINAPI,压栈顺序为从右向左,由系统自动执行栈的回收。
_cdecl C调用约定 压栈顺序为从右向左,由调用者执行栈回收。
Pascal 压栈顺序为从左向右,由系统自动执行栈回收。这里系统为被调用
_fastcall 寄存器
Thiscall 面向对象特有的This指针,同WINAPI,C调用约定,只是需要寄存器保存this指针
堆栈形成顺序
局部变量 |
返回地址 |
函数参数 |
同时应注意名字改编问题:由调用约定+编译器共同决定。
(3)加载动态链接库
加载静态链接库,将函数全部以二进制形式加载到指定位置。(Lib)
静态加载动态连接库,一次性加载所有要用的DLL。(Lib,#import)
动态加载动态连接库,需要的时候加载制定函数。(Def)
参考文献:加密解密(第三版)