欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
加载DLL注入到目标进程 紫雨轩网站访问方式
未知  获取指定内存所在的模块、当前模块、当前函数的返回模块
[ 发布日期:19年前 (2005-12-07) ]   [ 来自:本站原创 ] [分类:C\C++相关]
利用一个函数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());


引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/105
复制引用地址https://www.rickw.cn/trackback/105/GBK
[ 分类:C\C++相关  | 查看:1066 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5