dll可以有一个入口点函数,系统会在不同的时候调用这个入口函数。
这个调用是通知性质的,通常被dll用来执行一些与进程或线程有关的初始化和清理工作
如果将dll的入口点函数命名为DllMain之外的其他名称,那么虽然代码仍可以编译和链接成功,但入口函数将永远不会被
调用
DllMain函数执行的时候可能同一地址空间中的其他dll还没有执行他们的DllMain
创建新进程时:系统分配进程地址空间
映射exe,dll的文件映像
创建主线程
主线程调用每个dll的DllMain函数
主线程执行可执行模块的C/C++运行时的启动代码
主线程执行可执行程序的入口点函数
LoadLibrary: 定位dll
映射dll到进程的地址空间
该线程调用dll的DllMain函数传递DLL_PROCESS_ATTACH
DllMain返回true,线程继续执行
DllMain范回false,系统自动从进程的地址空间撤销对dll文件的映射
BOOL WINAPI DllMain(INSTANCE hInstDll,DWROD fdwReason,PVOID fImpLoad)
hInstDll表示一个虚拟内存地址,dll的文件映像就被映射到进程地址空间中的这个位置
fdwReason表示系统调用入口点函数的原因
fImpLoad表示dll是不是隐式载入的
相关文章
- Newtonsoft.Json.dll解析json的dll文件使用
- 无法加载Dll”ArcGISVersion.dll”:0x8007007E
- 64位移植: DLL 和 extern "C"
- Visual Stdio 无法找到资源编译器DLL
- dotnet部署出现Failed to load the dll from [ ... ], HRESULT: 0x80070057
- 把dll模块注入到游戏进程的方法_基于文件修改的注入方式
- [X264] MinGW编译x264,VC中调用libx264.dll-------------<参考转>
- C#中调用c++的dll具体创建与调用步骤,亲测有效~
- 解决流氓软件里的.dll文件无法删除问题,简单易懂
- 从__acrt_first_block == header 谈起,记录dll链接不一致的问题