【问题标题】:GetModuleHandle() cannot retrieve handle of "advapi32.dll" loaded by "notepad.exe" [duplicate]GetModuleHandle() 无法检索“notepad.exe”加载的“advapi32.dll”的句柄 [重复]
【发布时间】:2019-01-05 08:38:12
【问题描述】:

我正在尝试获取 notepad.exe 处理的文件信息。

所以,我的程序执行以下步骤。

  1. 为notepad.exe创建进程

    CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

  2. 等到notepad.exe初始化完成

    WaitForInputIdle(pi.hProcess, 10000);

  3. 将 notepad.exe 进程作为调试对象附加到我的程序。

    DebugActiveProcess(dwPID)

  4. 等待来自被调试者的调试事件。

  5. 当我的程序收到CREATE_PROCESS_DEBUG_EVENT,做我需要的事情。

这是我的函数有问题。

LPVOID g_pfHookingAdd = NULL;
BOOL OnCreateProcessDebugEvent(LPDEBUG_EVENT pde)
{
    DWORD dwLastErr;
    if (NULL == GetModuleHandleA("advapi32.dll"))   // Not able to get a handle here.
    {
        dwLastErr = GetLastError(); // dwLastErr => 126 => (0x7E) 
    }
    g_pfHookingAdd = GetProcAddress(GetModuleHandleA("advapi32.dll"), "IsTextUnicode");
    return TRUE;
}

如您所见,我的目标是检索加载IsTextUnicode() 函数的地址。

但是,当我拨打 GetModuleHandleA("advapi32.dll") 时,我收到错误代码 126,即 ERROR_MOD_NOT_FOUND.

我还检查了在 notepad.exe 执行期间是否加载了 advapi32.dll

谁能告诉我为什么这不起作用?

这是我的环境条件:

Windows 10 专业版 1803(操作系统内部版本 17134.165)

【问题讨论】:

  • 你很幸运你的程序没有加载 advapi32.dll。目标很模糊,但是当你编写调试器时,你需要学习如何使用the DbgHelp api
  • 如果你有LOAD_DLL_DEBUG_EVENT,你需要什么GetModuleHandle?而对于你所说的DebugActiveProcess,只需创建带有标志DEBUG_ONLY_THIS_PROCESS 的进程?
  • 我正在尝试获取函数加载的第一个字节数据。实际上这是我要解决的另一个问题,当我使用标志 DEBUG_ONLY_THIS_PROCESSDEBUG_PROCESS 创建进程时,我无法从 [memcpy(&g_cpdi, &pde->u.CreateProcessInfo, sizeof(CREATE_PROCESS_DEBUG_INFO)); ReadProcessMemory(g_cpdi.hProcess, g_pfHookingAdd, &g_chOrgByte, sizeof(BYTE), NULL);] 获得正确的数据

标签: c++ winapi reverse-engineering notepad


【解决方案1】:

这不起作用,因为GetModuleHandle() ...

检索指定模块的模块句柄。该模块必须 已被调用进程加载。

GetModuleHandle(), for a DLL in another process 的回答可能会对您有所帮助。

【讨论】:

  • 感谢您的快速回答。那你的意思是不是notepad.exe直接加载advapi32.dll?
  • @Lance 请再次阅读我的回答。 GetoduleHanle() 失败,因为 advapi32.dll 是由 notepad.exe 加载的,而不是您正在执行的程序 GetModuleHandle()
  • 天哪,我完全误解了 GetModuleHandle。非常感谢。
  • 很好的诊断,但它实际上使这个问题与您找到的问题重复。
  • @BenVoigt 好吧,我想回答这个问题并没有什么坏处,尽管它是重复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多