日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程模块句柄

發布時間:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程模块句柄 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、注意區別進程模塊句柄進程內核句柄

?

二、每個可執行文件或者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; }


運行結果:


?


轉載于:https://www.cnblogs.com/jadeshu/p/10663718.html

總結

以上是生活随笔為你收集整理的进程模块句柄的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。