GetModuleHandle 函数示例

      本例通过在一个DLL中实现一个辅助函数  DumpModule ,在辅助函数内调用  GetModuleHandle  函数,GetModuleHandleEx  函数及使用伪变量 __ImageBase,展示了三种方法得到可执行文件或 DLL 在进程虚拟地址空间的实例句柄。

     DLL中 DumpModule 函数的实现:

#define DLLWITHGETMODULE  extern "C" __declspec(dllexport)
#include "DllwithGetModule.h"
#include
#include
#include

extern "C" const IMAGE_DOS_HEADER  __ImageBase;  //伪变量,指向当前正在运行的模块的基地址

void DumpModule()
{
 //得到当前正在运行的应用程序的基地址
 HMODULE hModule = GetModuleHandle(NULL);
 _tprintf(TEXT("with GetModuleHandle(NULL) = 0x%x\r\n"),hModule);
 
 //使用伪变量得到当前正在运行模块的基地址
 _tprintf(TEXT("with __ImageBase = 0x%x\r\n"),(HINSTANCE)&__ImageBase);
 
 //传入DumpModule函数的地址给GetModuleHandleEx函数,得到DumpModule函数所在模块的基地址
 hModule = NULL;
 ::GetModuleHandleEx(
  GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
  (PCTSTR)DumpModule,
  &hModule);
 _tprintf(TEXT("with GetModuleHandleEx = 0x%x\r\n"),hModule);
}

 

    另外新建一个Win32 控制台项目,主函数的实现为:

     int  _tmain()

    {

           DumpModule();

            return 0;

     }

 

    运行结果为:

  

 

你可能感兴趣的:(读书笔记)