获取运行程序的基地址(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; }