LoadLibrary 与将二进制 dll 加载到进程中?
LoadLibrary vs loading binary dll into process?
我尝试使用 ifstream
将我的 dll 文件的内容注入远程进程。我使用了一个char*
缓冲区来存储dll的内容,然后使用WriteProcessMemory
将dll文件的二进制文件注入到进程中。我使用 CheatEngine 查看 VirtualAllocEx
结果指向的内存区域,所以我知道数据已写入,因为我看到了我创建的其中一个函数的文本参数。我只是好奇 LoadLibrary
与仅将 dll 的原始二进制文件加载到进程中有什么不同。
简而言之,LoadLibrary
做了以下事情:
映射和重新定位内存中的部分。
处理导入描述符Table,加载任何依赖项(如果需要),并填写导入地址Table(IAT)。
将必要的信息写入进程环境块 (PEB),以便您可以在模块列表中找到该模块。
调用模块加载通知(通常在内核中)。
清理新模块上下文。
创建激活上下文(如果有清单)。
调用入口点 (DllMain
),如果它存在。
我尝试使用 ifstream
将我的 dll 文件的内容注入远程进程。我使用了一个char*
缓冲区来存储dll的内容,然后使用WriteProcessMemory
将dll文件的二进制文件注入到进程中。我使用 CheatEngine 查看 VirtualAllocEx
结果指向的内存区域,所以我知道数据已写入,因为我看到了我创建的其中一个函数的文本参数。我只是好奇 LoadLibrary
与仅将 dll 的原始二进制文件加载到进程中有什么不同。
简而言之,LoadLibrary
做了以下事情:
映射和重新定位内存中的部分。
处理导入描述符Table,加载任何依赖项(如果需要),并填写导入地址Table(IAT)。
将必要的信息写入进程环境块 (PEB),以便您可以在模块列表中找到该模块。
调用模块加载通知(通常在内核中)。
清理新模块上下文。
创建激活上下文(如果有清单)。
调用入口点 (
DllMain
),如果它存在。