Skip to content

好像不能加载user32.dll #11

Open

Description

@bennywingggg

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

Activity

  1. bb107 commented on Jul 8, 2022

    @bb107
    Owner
  2. bb107 commented on Jul 11, 2022

    @bb107
    Owner

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

  3. bennywingggg commented on Jul 11, 2022

    @bennywingggg
    Author

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

  4. bb107 commented on Jul 11, 2022

    @bb107
    Owner

    你用的哪个系统版本?

  5. bennywingggg commented on Jul 11, 2022

    @bennywingggg
    Author

    Win10 20H2

  6. bb107 commented on Jul 11, 2022

    @bb107
    Owner

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

  7. bb107 commented on Jul 11, 2022

    @bb107
    Owner

    你需要在调用的时候使用正确的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
        );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions