Why does calling kernel32.GetModuleHandleA() for msvcr100 fail in Python?

后端 未结 4 813
挽巷
挽巷 2021-01-27 03:06

I am having a problem with calling GetModuleHandleA() using Python. I have a module that attaches as debugger to the process. I\'m working on a function that would

4条回答
  •  醉话见心
    2021-01-27 04:03

    You've found the solution to your problem, but I'm answering anyway to explain why your original effort failed (and why your fix worked).

    First, msvcrt/msvcr100 are two different versions of Microsoft's C runtime library. There are other versions as well, and all of them contain their own definitions for printf(). A given process may have any one of them loaded, or multiple versions loaded, or no versions loaded - it's possible to produce console output using only WinAPI functions! In short, if it's not your process, you can't depend on any given version of the C runtime being available.

    Second, GetModuleHandle() doesn't load anything. It returns a handle to the named module only if it has already been loaded. msvcr100.dll can be sitting right there on disk, but if the process hasn't already loaded it then GetModuleHandle won't give a handle to you. LoadLibrary() is the function you'd call if you wanted to both load and retrieve a handle to a named module... But you probably don't want to do this in a process you don't own.

    FWIW, Process Explorer is a handy tool for viewing the DLLs already loaded by a process.

提交回复
热议问题