【发布时间】:2018-05-28 18:59:47
【问题描述】:
我已经编写了最简单的注入 dll。这是完整的代码:
#include "stdafx.h"
#include <stdio.h>
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
FILE * File = fopen("D:\\test.txt", "w");
if(File != NULL)
{
fclose(File);
}
return TRUE;
}
超级简单吧?好吧,我什至无法让它工作。此代码编译为 dll,我已将此 dll 的路径放在注册表中的 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] 下。我还应该提到 LoadAppInit_DLLs 注册表值设置为 1。通过这样做,我希望在启动其他应用程序(如 notepad.exe)时看到文件“D:\test.txt”出现,但事实并非如此。我不明白。还有另一个 .dll,它非常古老,是用 Visual Studio '97 编写的(我正在尝试替换),当我将 AppInit_DLLs 设置为指向它并启动任意应用。我可以看出它在其他应用程序启动时正在加载。
我不确定这里发生了什么,但这应该可行,不是吗?再简单不过了。我正在使用 VS 2010,我认为我已经创建了一个非常平面的 Jane .dll,所以我认为任何项目设置都不应该出现问题,但我对此并不完全确定。我在这里错过了什么?
设置信息
- 操作系统:Windows 7 64 位
- 操作系统版本:6.1.7601 Service Pack 1 Build 7601
- IDE:Visual Studio 2010
- IDE 版本:10.0.40219.1 SP1Rel
【问题讨论】:
-
我随意猜测您是在 64 位版本的 Windows 上尝试此操作。使用 SysInternals 的 ProcMon 停止猜测。
-
是的,我使用的是 Windows 7 64 位。我一直在启动 32 位应用程序,因为我一直使用的 AppInit_DLLs 注册表项是 32 位的。如果我将保留有关我的设置的信息,我将在我的问题中添加一个部分。
标签: dll dll-injection