【发布时间】:2011-07-18 14:01:05
【问题描述】:
我正在处理虚拟机的本机调用绑定,其中一项功能是能够在运行时按名称查找标准 libc 函数。在 Windows 上,这有点麻烦,因为我需要获取进程中当前加载的 msvcrt 模块的句柄。通常这是 msvcrt.dll,但也可能是其他变体(msvcr100.dll 等),如果使用具有不同名称的变体,调用 GetModuleHandle("msvcrt") 可能会失败。
我想做的是反向查找,从 libc(我有很多)获取函数指针并获取提供它的模块的句柄。基本上是这样的:
HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
void *vfunc = GetProcAddress(hlibc);
在 win32 API 中是否有这样的东西,而不需要手动遍历进程句柄和符号表?反之,如果我想太多问题,有没有更简单的方法可以在 win32 上按名称查找 libc 函数?
【问题讨论】: