利用一个函数VirtualQuery可以获取指定内存所在的模块:
inline HMODULE GetModuleFromAddr(PVOID p)
{
MEMORY_BASIC_INFORMATION m = { 0 };
VirtualQuery(p, &m, sizeof(MEMORY_BASIC_INFORMATION));
return (HMODULE) m.AllocationBase;
}
有了上面的函数,就非常容易获取当前模块的句柄(比如在静态LIB链接到DLL的项目中,需要知道模块句柄的情况):
HMODULE hThisModule = GetModuleFromAddr(当前模块中的任意函数或变量地址);
更进一步的应用,假如我们需要知道那个模块在调用自己,可以结合_ReturnAddress() intrinsic来实现:
全局声明:EXTERN_C PVOID _ReturnAddress();
调用:HMODULE hCallerModule = GetModuleFromAddr(_ReturnAddress());
加载DLL注入到目标进程 | VC中有没有DoEvents类似的函数? |
获取指定内存所在的模块、当前模块、当前函数的返回模块 | |
[ 发布日期:19年前 (2005-12-07) ] [ 来自:本站原创 ] | [分类:C\C++相关] |
[ 分类:C\C++相关
| 查看:1067 ]
上一篇: 加载DLL注入到目标进程
下一篇: VC中有没有DoEvents类似的函数?
暂时没有评论,快来发表一个评论吧。
发表评论 |