GetModuleHandle 函数示例

来源:互联网 发布:mysql order by 原理 编辑:程序博客网 时间:2024/04/30 16:40

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

     DLL中 DumpModule 函数的实现:

#define DLLWITHGETMODULE  extern "C" __declspec(dllexport)
#include "DllwithGetModule.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>

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;

     }

 

    运行结果为:

  

 

原创粉丝点击