krl*_*mlr 2 windows dll winapi
此问题询问如何检索包含当前执行代码的DLL的句柄.其中一个答案中的链接建议将地址作为模块句柄.这适合我.__ImageBase
我的问题是:鉴于检索当前模块的句柄非常简单,为什么像MFC(甚至我继承的代码库)这样的框架通常会存储传递给DllMain()某个全局变量的实例句柄?有理由不依赖__ImageBase吗?
编辑:根据Raymond Chen的说法,__ImageBase仅适用于微软链接器.还有另一个问题有更精确的答案,包括使用链接器无关的方式GetModuleHandleEx().还有一个Win2000和早期使用的解决方案VirtualQuery().问题仍然有效:为什么在可以轻松检索基地址时保存它?
__ImageBase是Microsoft链接器提供的技巧,可能无法与其他编译器/链接器一起使用.即使框架不支持其他工具集,他们也可能不知道这个神奇的符号,这可能就是为什么它没有被大量使用.
同样的事情可以用纯的WinAPI用VirtualQuery或用GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,...)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |