LoadLibrary 与将二进制 dll 加载到进程中?

LoadLibrary vs loading binary dll into process?

我尝试使用 ifstream 将我的 dll 文件的内容注入远程进程。我使用了一个char*缓冲区来存储dll的内容,然后使用WriteProcessMemory将dll文件的二进制文件注入到进程中。我使用 CheatEngine 查看 VirtualAllocEx 结果指向的内存区域,所以我知道数据已写入,因为我看到了我创建的其中一个函数的文本参数。我只是好奇 LoadLibrary 与仅将 dll 的原始二进制文件加载到进程中有什么不同。

简而言之,LoadLibrary 做了以下事情:

  1. 映射和重新定位内存中的部分。

  2. 处理导入描述符Table,加载任何依赖项(如果需要),并填写导入地址Table(IAT)。

  3. 将必要的信息写入进程环境块 (PEB),以便您可以在模块列表中找到该模块。

  4. 调用模块加载通知(通常在内核中)。

  5. 清理新模块上下文。

  6. 创建激活上下文(如果有清单)。

  7. 调用入口点 (DllMain),如果它存在。