获取运行程序的基地址(base address)
本文地址: http://blog.csdn.net/caroline_wendy/article/details/19162821
加载到进程地址空间的每一个可执行文件(exe)或动态链接库(dll), 都包含一个实例句柄(HINSTANCE);
(w)WinMain的hInstanceExe参数的实际值是一个内存基地址(base address);
系统将可执行文件的映像加载到进程地址空间中的这个位置;
入口点函数:
Int WINAPI _tWinMain (
HINSTANCE hInstanceExe,
HINSTANCE,
PTSTR pszCmdLine,
int nCmdShow);
可以使用三种方法:
GetModuleHandle (NULL);
__ImageBase;
GetModuleHandleEx (...);
代码:
#include "stdafx.h"
#include <Windows.h>
extern "C" const IMAGE_DOS_HEADER __ImageBase;
void DumppModule () {
HMODULE hModule = 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) DumppModule,
&hModule);
_tprintf (TEXT("with GetModuleHandleEx = 0x%x\r\n"), hModule);
}
int _tmain(int argc, _TCHAR* argv[])
{
DumppModule();
return 0;
}