MemoryModulePP icon indicating copy to clipboard operation
MemoryModulePP copied to clipboard

好像不能加载user32.dll

Open bennywingggg opened this issue 3 years ago • 7 comments

如题,加载user32.dll DLL_PROCESS_ATTACH失败,能找到函数,但会报访问无效地址的错误

bennywingggg avatar Jul 08 '22 14:07 bennywingggg

#2

bb107 avatar Jul 08 '22 23:07 bb107

你好,请在加载前调用GetModuleHandle获取一下user32的句柄。如果能获取到,那么通过LoadLibraryMemory加载失败是正常的;如果获取不到并且加载失败请告诉我。如果问题解决了请关闭这个issue。 祝好。

bb107 avatar Jul 11 '22 00:07 bb107

感谢回复,试了下加载前调用GetModuleHandle获取user32的句柄为空,然后LoadLibraryMemory加载失败,调试了下,发现在导入Import Table时候加载了自己 ,LoadLibrary user32.dll导致的,这样的循环调用,是不是只要在导入Import Table时候不加载自己 ,还没有试

bennywingggg avatar Jul 11 '22 02:07 bennywingggg

你用的哪个系统版本?

bb107 avatar Jul 11 '22 02:07 bb107

Win10 20H2

bennywingggg avatar Jul 11 '22 02:07 bennywingggg

user32确实存在一条循环依赖路径: user32 -> gdi32 -> gdi32full -> user32 我调整了一下加载的逻辑,把解析导入表挪到了插入LdrDataTableEntry之后,并且在我的系统上测试成功了

bb107 avatar Jul 11 '22 05:07 bb107

你需要在调用的时候使用正确的DllBaseName和DllFullName

    status = LdrLoadDllMemoryExW(
        &hModule,                               // ModuleHandle
        nullptr,                                // LdrEntry
        0,                                      // Flags
        buffer,                                 // Buffer
        0,                                      // Reserved
        L"user32.dll",                          // DllBaseName
        L"C:\\Windows\\System32\\user32.dll"    // DllFullName
    );

bb107 avatar Jul 11 '22 05:07 bb107