我创建了一个简单的 DLL 检查:
#include <Windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
MessageBox(0, 0, 0, 0);
return true;
}
这是注册表:
我已经尝试了所有方法,但我的 DLL 注入不起作用。
预期行为:打开应用程序时,它应该显示空白错误消息
实际行为:什么都没发生。
自 Windows 7 起,
AppInit_DLLs
加载的 DLL 默认情况下必须进行代码签名,除非您将 RequireSignedAppInit_DLLs
设置为 0。您的屏幕截图中没有 RequireSignedAppInit_DLLs
值。
请参阅 Windows 7 和 Windows Server 2008 R2 中的AppInit_DLLs。
另外,注意
MessageBox()
在user32.dll
中,Dynamic-Link Library Best Practices明确指出:
你不应该从内部执行以下任务
:DllMain
- ...
- 调用 User32.dll 或 Gdi32.dll 中的函数。某些函数会加载另一个 DLL,该 DLL 可能未被初始化。
- ...
OutputDebugString()
,然后使用像SysInternals DebugView这样的工具来查看消息。