gpt4 book ai didi

c - 如何从 Win32 中的 func ptr 获取模块句柄?

转载 作者:太空狗 更新时间:2023-10-29 16:57:57 25 4
gpt4 key购买 nike

我正在研究虚拟机的 native 调用绑定(bind),其中一项功能是能够在运行时按名称查找标准 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 函数?

最佳答案

获取模块句柄的记录方法是使用 GetModuleHandleEx .

HMODULE hModule = NULL;

if(GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, // behave like GetModuleHandle
(LPCTSTR)address, &hModule))
{
// hModule should now refer to the module containing the target address.
}

关于c - 如何从 Win32 中的 func ptr 获取模块句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com