title: How to get Module HANDLE from func ptr in Win32?
body: <p>I'm working on native call bindings for a virtual machine, and one of the features is to be able to look up standard libc functions by name at runtime. On windows this becomes a bit of a hassle because I need to get a handle to the msvcrt module that's currently loaded in the process. Normally this is msvcrt.dll, but it could be other variants as well (msvcr100.dll, etc) and a call to GetModuleHandle("msvcrt") could fail if a variant with a different name is used.</p>
  
  <p>What I would like to be able to do is a reverse lookup, take a function pointer from libc (which I have in abundance) and get a handle to the module that provides it. Basically, something like this:</p>
  
  <pre><code>HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
  void *vfunc = GetProcAddress(hlibc);
  </code></pre>
  
  <p>Is there such a thing in the win32 API, without descending into a manual walk of process handles and symbol tables? Conversely, if I am over-thinking the problem, is there an easier way to look up a libc function by name on win32?</p>