在不执行 dllmain 函数的情况下加载 Dll

Posted

技术标签:

【中文标题】在不执行 dllmain 函数的情况下加载 Dll【英文标题】:Load Dll without execute dllmain function 【发布时间】:2013-05-18 05:21:22 【问题描述】:

我想加载特殊的 dll 而不执行 dllmain 函数。

我觉得,在dllmain设置断点可以解决这个问题。

但我不知道该怎么办?

我也想调用dll的导出函数。

我曾尝试将 LoadLibraryEx 与 dont_resolve_dll_references 一起使用,但 dll 的函数调用出现错误。

我该如何解决这个问题?请给我你的想法。

谢谢。

【问题讨论】:

【参考方案1】:

如本问题所述:Win32 API to enumerate dll export functions?

您可以将 LoadLibraryEx 与 DONT_RESOLVE_DLL_REFERENCES 标志一起使用,即使强烈建议不要使用该标志。 如果是这样,如果你真的想使用它,你可能必须释放并重新加载 dll。

【讨论】:

【参考方案2】:

还有explained here:

动态链接库 (DLL) 的可选入口点。当系统启动或终止进程或线程时,它会使用进程的第一个线程为每个加载的 DLL 调用入口点函数。当使用 LoadLibrary 和 FreeLibrary 函数加载或卸载 DLL 时,系统还会调用 DLL 的入口点函数。

如果您使用标准方式加载和执行动态库,则调用 DllMain 是一项操作系统功能(尽管实现该功能是可选的)。所以没有官方的方法可以做到这一点。

【讨论】:

好吧,我现在正在尝试调试一个包含guard dll 的程序。所以我想通过标准或非标准的方式传递守卫的dllmain函数。

以上是关于在不执行 dllmain 函数的情况下加载 Dll的主要内容,如果未能解决你的问题,请参考以下文章

Dllmain的作用

加载链接到使用空DllMain的DLL时,应用程序无法启动(0xC0000142)

正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码

加载链接到使用空 DllMain 的 DLL 时,应用程序无法启动 (0xC0000142)

逆向学习-DLL注入

Windbg里DLL相关下断点