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

时间:2016-07-03 07:39:05

标签: c++ c winapi dll dll-injection

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

1 个答案:

答案 0 :(得分:4)

简而言之,LoadLibrary执行以下操作:

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

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

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

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

  5. 清理新模块上下文。

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

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