我正在为一个虚拟机编写本地调用绑定,其中一个特性是能够在运行时通过名称查找标准libc函数。在Windows上这有点麻烦,因为我需要获取到当前进程中已加载的msvcrt模块的句柄。通常这是msvcrt.dll,但也可能是其他变体(如msvcr100.dll等),如果使用不同名称的变体,则对GetModuleHandle("msvcrt")的调用可能会失败。
我想要做的是反向查找,从libc中获取一个函数指针(我有很多),并获取提供它的模块的句柄。基本上就像这样:
我想要做的是反向查找,从libc中获取一个函数指针(我有很多),并获取提供它的模块的句柄。基本上就像这样:
HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
void *vfunc = GetProcAddress(hlibc);
在win32 API中有这样一种东西吗,而不需要降到手动遍历进程句柄和符号表的级别?相反地,如果我过于考虑问题,有没有更简单的方法在win32上按名称查找libc函数?