进程模块句柄
来源:互联网 发布:程序员项目经历怎么写 编辑:程序博客网 时间:2024/06/16 17:57
一、注意区别进程模块句柄和进程内核句柄
二、每个可执行文件或者DLL文件被装入到某个进程地址空间后,都会有一个唯一的实例句柄,来表示装入后的可执行文件或者DLL,此时我们把这个可执行文件或者DLL叫做进程地址空间中的一个模块。
进程模块句柄的本质就是当前模块的起始地址。
三、如何获取进程模块句柄
a.HMODULE GetModuleHandle( LPCTSTR lpModuleName)
1. 如果这个函数的参数是NULL的话,那么这个函数只返回当前进程的模块地址!!
2. 在DLL中,调用GetModuleHandle,返回的不是DLL模块的地址,而是当前进程的模块地址!
3. 这个函数只检查本进程地址空间,不检查别的进程的地址空间。
获得进程中模块对应的文件名
DWORD GetModuleFileName( HMODULE hInstance,//进程句柄 PTSTR pszPath,//文件名 DWORD cchPath);//pszPath指向的内存的大小
b.WinMain函数中的第一个参数hInstance
四、如果代码位于DLL文件中,那么想知道这个DLL文件被装入进程空间后的模块地址怎么办?
1.
extern “C” HANDLE __ImageBase;int main(){printf(“%x\n”,&__ImaggeBase);return 0;}
2.
void fun(HMODULE* hModule){GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(PCTSTR)fun,&hModule);}
五、实例
#include <stdio.h>#include <tchar.h>#include <windows.h>#include <locale.h>extern "C" HANDLE __ImageBase;int _tmain(int argc, _TCHAR* argv[]){_tsetlocale(LC_ALL,_T("chs")); //支持中文_tprintf(L"__ImageBase:%4x \n",&__ImageBase);HMODULE hMoudle = GetModuleHandle(nullptr);_tprintf(L"当前进程模块句柄为:%4x \n",hMoudle);TCHAR fileName[MAX_PATH] = {0};GetModuleFileName(hMoudle,fileName,MAX_PATH);_tprintf(L"当前进程模块文件名:%s \n",fileName);_gettchar();return 0;}
运行结果:
阅读全文
0 0
- 进程模块句柄
- 模块句柄和进程句柄的区别?
- 根据进程结合GetModuleHandle获取当前主模块句柄
- 根据进程结合GetModuleHandle获取当前主模块的句柄
- 进程句柄
- 获取当前进程的模块句柄(获取当前模块的基址)
- 进程 进程句柄 进程ID
- WIN32中的模块句柄
- 获得模块句柄
- 获取模块句柄/基址
- 窗口句柄,进程ID,进程句柄,线程ID,线程句柄
- 窗口句柄,进程ID,进程句柄,线程ID,线程句柄
- 进程句柄的应用
- 小心,进程句柄!
- 获得进程句柄
- -进程的句柄
- 进程的实例句柄
- 关闭进程句柄、对象
- 机器学习研究与开发平台的选择
- JQuery中attr()和prop()方法的区别
- ms 15 034 security
- 代码实现XML布局
- java 使用Apache的 commmon-i0 库 操作IO与 文件
- 进程模块句柄
- RocAlphaGo的研究
- WPF笔记(2.4 Grid)
- Android框架
- 【JAVAWEB学习笔记】09
- (一)c++ 和javascript 实现选择排序
- MySQL导入.sql文件及常用命令
- 【JAVAWEB学习笔记】08
- PHP学习路线图