本文主要是介绍win32 API获取当前进程的基质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的另一个博客的地址:http://blog.sina.com.cn/s/blog_149e9d2ec0102wzhz.html
加载到进程地址空间的每一个可执行文件或者DLL文件都被赋予了一个独一无二的实例句柄。可执行文件的实例被作为(w)WinMain函数的第一个参数hInstanceExe传入。在需要加载资源的函数调用中,一般都要提供此句柄的值。
(w)WinMain的hInstance参数的实际值是一个内存基地址。系统将可执行文件的映像加载到进程地址空间中的这个位置。可执行文件的映像具体加载到哪一个基地址,是由连接器决定的。不同的连接器使用不同的默认基地址。由于历史的原因,VisualStudio连接器使用的默认基地址是0x00400000,当然还可以在VS中修改基地址的值。
下面是我们说的重点,如何通过程序获取应用程序或者DLL的基地址。
有三种方法:
1. 伪变量 __ImageBase;
2. GetModuleHandle函数
3. GetModuleHandleEx函数。
下面是使用的代码:
#include <windows.h>
#include <tchar.h>
extern "C" const IMAGE_DOS_HEADER __ImageBase;
void DumModule()
{
HMODULEhModule = GetModuleHandle(NULL);
_tprintf(TEXT("with GEtModuleHandle(NULL) = 0x%x\r\n"),hModule);
_tprintf(TEXT("with __ImageBase = 0x%x\r\n"),(HINSTANCE)&__ImageBase);
hModule =NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(PCTSTR)DumModule,
&hModule);
_tprintf(TEXT("with GetModuleHandleEx = 0x%x\r\n"), hModule);
}
int _tmain()
{
DumModule();
return0;
}
加载到进程地址空间的每一个可执行文件或者DLL文件都被赋予了一个独一无二的实例句柄。可执行文件的实例被作为(w)WinMain函数的第一个参数hInstanceExe传入。在需要加载资源的函数调用中,一般都要提供此句柄的值。
下面是我们说的重点,如何通过程序获取应用程序或者DLL的基地址。
有三种方法:
1. 伪变量 __ImageBase;
2. GetModuleHandle函数
3. GetModuleHandleEx函数。
下面是使用的代码:
#include <windows.h>
#include <tchar.h>
extern "C" const IMAGE_DOS_HEADER __ImageBase;
void DumModule()
{
}
int _tmain()
{
}
这篇关于win32 API获取当前进程的基质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!