Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

HMODULE WINAPI GetModuleHandle(
_In_opt_ LPCTSTR lpModuleName
);

Parameters

lpModuleName [in, optional]

The name of the loaded module (either a .dll or .exe file). If the file name extension is omitted, the default library extension .dll is appended. The file name string can include a trailing point character (.) to indicate that the module name has no extension. The string does not have to specify a path. When specifying a path, be sure to use backslashes (\), not forward slashes (/). The name is compared (case independently) to the names of modules currently mapped into the address space of the calling process.

If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).

Return value

If the function succeeds, the return value is a handle to the specified module.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.

Remarks

The returned handle is not global or inheritable. It cannot be duplicated or used by another process.

The GetModuleHandle function returns a handle to a mapped module without incrementing its reference count. However, if this handle is passed to the FreeLibrary function, the reference count of the mapped module will be decremented. Therefore, do not pass a handle returned by GetModuleHandle to the FreeLibrary function. Doing so can cause a DLL module to be unmapped prematurely.

例如:

GetModuleHandle(NULL); //  这将返回自身应用程序句柄

GetModuleHandle("kernel32");//这将返回kernel32.dll的句柄

模块句柄实际上就是模块在当前进程空间的装入地址。即,进程地址空间中可执行文件的基址。例如:

#include <windows.h>
#include <iostream> using namespace std; int main()
{
HMODULE hModule = GetModuleHandle(NULL);
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
cout << (char*)pDosHeader << endl;
system("pause");
return ;
}

输出结果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAALUAAAAtCAIAAABnBL3QAAAGq0lEQVR4nO2caVcaSRSG+R/5kA85J7M6xkQCroiiiIj7hmtQURHZGmh2E+ePzBLjhuK+C7Tb/K750NApqrtvF0yig9Z73uOB6tu3lvsARSOofGwctZeNYfYECx2IegJRbzDmDcZ8bNzLxn2hBBNKMOFlf+SjP7IciH4MRD+xsRU29ikUWwnFV8Lx30OJr2bjK2IHY594B6IfUfsjy0wYcSjBhBK+UCI3WmRIbn/U5Y8sMeElJuxkQk5faNHHOrxBhye44AnMuwNzLmbOxdidjN3JzC56Zxe9Mwse27zbNueasi9N2p2TdufE7OL4jGNsesH6Yd46ZbdO2Ycn7EMTs4NjMwOjtn6rrdc61TM82T080TU4bhkcs/SPmvus5j6rqWekvXvY2DXUZhlstQwYOvtbzH3NHb36jl59e09Te3eTsUvX1qVrszS0WhoMnfUtnXUt5rpmc62+o0ZvqtGbtPp2TVO7RmfU6IzvdW3qxjZ1Y5u6oVXd0FrdYKiuz7uupbqu5V3eb2ub89YLrqop8Btt6VYBcOBk5Csh2B2IYgHeHDFxHxtj2DhfTtQYjnyNeWPJPYGo2x9xMWHBS0zIyYScPpa3wxt0eIMOT8DhCSy4A/Nu/9wSM7eUJ8Dpm1n0Tjs8tgWPbcHzYd41leNgaWJ2cXzaMT7tGLXxHMyNTNpHJu1D4zODY9MDo7Z+64c+61TvyGTP8CTPgbnfau63dvRZTT0jxu5hY9dQq2XQ0DnQYu7Xm3r1pl6dsVtn7G7ka2/orGvuqG3uqNWbtE3tWp1RozNqdG3qxlZ1g6G63vCuPlfaqlp9VY3+TU1TpbapUttUqdH9ptFVvNdVvNdVqBsr1I2/qht+qc77Xf3Pef/0tg5xLe8fqwr8w5ua/+LXldrXlVoVRsbx2SV3e8/d3nM3Cs4W+A61OPiazyn212x3uK/vMgW+zVzfZrjbDHeb5m7S3E06m/NV9uYqc32J+CLNXaS5i3T2/Cp7fpU5v8qcXfJOn12mTy/SpxdXJ+dXx2eXgo9OL45OLw5Pzg9Pzg+Oz/Z5H53uHZ7sHp7sHhynDo5T+8ep/aOdvaOdvcPt3cPk7kEydZBM7W+l9rd29jd39ja39za2dzeSuxvJ1Hoytb6VWttKrW3trG3ufNnc/rKR8+pGcnUjubqe/Cx4betvwV82ef+V8wbqP1eV/cfn9W9lFQYHG4m9ePmKmpq3Cn1B4W7vX7x8paKiElTAxw3lg6pQ6G6U8kGFC32rQvmgwoW+O+X54DiO4zghQLjLSemRRk31UJLjA2NChYCCtVM9ZaHXvjA+sOcJDI7HGzLVAwq9MArzIYjy8YyEXjXH9h/ilxXxXaonLvTzjiy4P1VROJ6h0A/biuWDsvL0JcChyAd9oXmOcufhIOQD2LdSPUEV8nFHr59SFUiAw+WPUD6ocPFk8KZ8UOES4HD5I9lrBT7gDYf4qOIGRTKAZFtTWmb4ULGDKXnw5aSvfDBhgY+iVhA+WtQpwM5XcncMxxc1TrSdI3sP/5z4YMIoHyrRpy0ll4SEDyCnYjag2EJC7IZkX3JMKMKEdUc+l/IQ+g/iknygIim2ihgp8mLLxQDxiuWHA9C5wAkVJ1XeQr49EJbbf8CVFreTP+bgAKB3mD/JzCTx6PjFfyXHqTip8pbbH3ETv3+BJy9eSngdCfkoQTCvWCOMlyJq4hZxwjKWR3R9TLxYhPMvqt4l8FHUMCRrDBdPccpFjZYkoAwkd32shLkJi6hYSMUwoPCS/QKN4lRwPHAb7lQ8O8kTy0wCHAAfhA8moJySt4EllhQ5RuJDnBSRcv0CbMHjfFJk8OK/5sob4AM7S0yPOAzOoJiWJJ4kuXhsijzJ/ZWMV8xf3hJ/fsu3wyuiWG+AFaBRkQ85AcmF+gEnikcrPqRIgFy28hYhH9hZJPWWfGzBSQhXliSsWFgJz5WLVwQXQBnO+Z3iSSX8/7okH8CDT3KIhI1yh2CSikIWGz9hLyQdYfFAv4rBgL5fvGQ1ZU8U4BDzIZxDWEi5MLjqimkl80jexhoBRLDk2AIpgii3oIRgPa6K48PLxjzBKG+S/ankcgON4tvis+ARA5gCAZJIKXYBRALxco2yi/6ogqeGS+75A8sI3BU3Svb3TZavuLk9lOTG8OgDk1Rxa+hl49j3Kx90sFT/c9Hfh6GChP5UHH3+oMLl438uMpTwsnH6/EGFC/1d0WvKBxUmJpzg7QvFKR9UuPzhZX94mUfk+u4fygdVgfyRZcE3lA8qTOiPnVM+qDD9Cwh0ZHaPKz6jAAAAAElFTkSuQmCC" alt="" />

可以看出hModule实际上就是装入内存的PE结构的首地址(指向字符“MZ”)。

参考:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms683199%28v=vs.85%29.aspx

http://blog.csdn.net/guzhou_diaoke/article/details/8826558

Windows API 之 GetModuleHandle的更多相关文章

  1. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  2. 逆向实用干货分享,Hook技术第一讲,之Hook Windows API

    逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...

  3. Windows API Finishing

    input { font-size: 14px; height: 26px } td { border-style: none; border-color: inherit; border-width ...

  4. Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)

    事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...

  5. Windows API函数大全(完整)

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一 ...

  6. [windows菜鸟]Windows API函数大全(完整)

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一 ...

  7. WINDOWS API 大全(二)

    9. API之设备场景函数 CombineRgn 将两个区域组合为一个新区域CombineTransform 驱动世界转换.它相当于依顺序进行两次转换CreateCompatibleDC 创建一个与特 ...

  8. Windows API 学习

    Windows API学习 以下都是我个人一些理解,笔者不太了解windows开发,如有错误请告知,非常感谢,一切以microsoft官方文档为准. https://docs.microsoft.co ...

  9. C# Windows API

    API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...

随机推荐

  1. C#操作WORD换行

    appWord.ActiveDocument.Bookmarks[bookMark].Select(); Word.Selection wordSelection = appWord.ActiveDo ...

  2. centos7 crontab笔记

    1.crontab相关命令 语法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 参数: -e 编辑该用户的计时器设 ...

  3. CVE-2014-1767 利用分析(2015.2)

    CVE-2014-1767利用分析 参考这篇文章利用思路,重现利用,主要说明自己在实现的时候遇到的坑. 利用思路 1. 第一次 IoControl,释放 MDL,我们通过 VirtualAddress ...

  4. CSS实现三角形图标的原理《转载》

    网页中经常有一种三角形的图标,鼠标点一下会弹出一个下拉菜单之类的(之前淘宝也有,不过现在改版好像没有了) 之前以为是个png图标背景,后来在bootstrap中看到有一个图标样式叫做caret的用来实 ...

  5. C 小问题集锦

    摘要:在学习 C 语言编程中遇到的一些容易混淆出错的问题,记录下来备忘. C语言学习 小问题集锦 作者:乌龙哈里 时间:2015-11-24 平台:Window7 64bit,C# :Visual S ...

  6. mac版VMware fusion

    百度网盘链接:链接: https://pan.baidu.com/s/1o8BAsrg 安装教程网上很多的,首先要下载一个window 10或其他版本的iso镜像文件,然后很好安装的.

  7. Deploy Django in Windows

      配置 安装目录 D:\PythonWebSW\(免安装) d:\Program Files\ (安装版) 工作目录 E:/PythonWeb/code 项目名称 voith_sales Insta ...

  8. 【第一篇】Volley的使用之json请求

    最近项目写完,有开始新的学习了,volley很久以前就接触了,也看了源码,然而却没有通过文章去记录自己的学习成果. 首先讲下volley的特点: 1,扩展性强.Volley 中大多是基于接口的设计,可 ...

  9. 第八十九节,html5+css3pc端固定布局,热门旅游取,标题介绍区,旅游项目区

    html5+css3pc端固定布局,热门旅游取,标题介绍区,旅游项目区 样式: html代码: <!--主体--> <section class="zhu-ti" ...

  10. Sass入门:第四章

    1.加法 加法运算是Sass中运算的一种,在变量或属性中都可以做加法运算.如: .box { width: 20px + 8in; } 编译出来的CSS: .box { width: 788px; } ...