使用 C++ 在當前進程中獲取指定模塊的基址

C++ 實現 , 獲取指定模塊在該進程中的基址

1、流程:

獲取進程的所有模塊信息–>遍歷模塊列表

2、實現

// 我自己定義的
typedef struct moudle_date_ {HANDLE mhandle;   // 句柄char mname[64];   // 名稱char* date;       // 數據DWORD mdword;     // 基址 
}moudle_date;// 傳入該進程的 pid 、需要查找模塊的名稱
moudle_date* getMoudle(DWORD pid, const char* name) {moudle_date* date = nullptr;/*CreateToolhelp32Snapshot()->獲取指定進程以及這些進程使用的堆、模塊和線程的快照。TH32CS_SNAPALL -> 包括系統中的所有進程和線程,以及 pid 中指定的進程的堆和模塊。return value : 如果函數成功,它將返回指定快照的打開句柄。如果函數失敗,它將返回 INVALID_HANDLE_VALUE*/HANDLE handle = CreateToolhelp32Snapshot( TH32CS_SNAPALL,  pid );std::cout << "getMoudle::handle :" << std::hex<<handle << std::endl;if ( handle == INVALID_HANDLE_VALUE) {std::cout << "Error CreateToolhelp32Snapshot" << std::endl;return nullptr;}/*MODULEENTRY32:Windows API 中定義的一個結構體,用于存儲模塊的信息。*/MODULEENTRY32 info;memset(&info, 0, sizeof(info));// dwSize 結構體的大小,一定要設置,為 Module32First、Module32Next做準備info.dwSize = sizeof(MODULEENTRY32);char sname[256];strcpy_s(sname, sizeof(sname) , name);/*循環遍歷模塊 ,找到基址Module32First() : 檢索與進程關聯的第一個模塊的相關信息。傳入參數: CreateToolhelp32Snapshot返回的進程句柄、info(MODULEENTRY32)返回值 : bool類型,成功返回true. 失敗返回false.*/bool ret = Module32First( handle, &info);if (!ret) {/*GetLastError(): 獲取錯誤代碼.返回類型 DWORD.*/DWORD err = GetLastError();std::cout << "getMoudle::GetLastError : "<<err << std::endl;return nullptr;}while ( ret ) {// szModule -> 模塊的名稱// 注意: szModule的類型是 wchar_t 寬字節// 我們傳入的模塊名稱 類型是 char ,所以需要進行類型轉換,才能夠比較if ( strcmp( UnicodeToUtf8(info.szModule) , sname)== 0 ) {date = new moudle_date;// modBaseAddr ->MODULEENTRY32結構體中的成員,模塊的基址date->mdword = (DWORD)info.modBaseAddr;CloseHandle(handle);  // 清理資源return date;}/*Module32Next(): 獲取下一個模塊的信息*/ret = Module32Next( handle, &info);}return nullptr;
}

補充:UnicodeToUtf8 -> 如何將寬字符字符串轉換為 UTF-8 編碼的字符串UnicodeToUtf8

這些你可以不需要知道怎么實現的,直接拿來用就好了,沒有人會去記這些東西。

char* UnicodeToUtf8(const wchar_t* lpszStr)
{char* lpUtf8;int nLen;if (NULL == lpszStr)return NULL;nLen = ::WideCharToMultiByte(CP_UTF8, 0, lpszStr, -1, NULL, 0, NULL, NULL);if (0 == nLen)return NULL;lpUtf8 = new char[nLen + 1];if (NULL == lpUtf8)return NULL;memset(lpUtf8, 0, nLen + 1);nLen = ::WideCharToMultiByte(CP_UTF8, 0, lpszStr, -1, lpUtf8, nLen, NULL, NULL);if (0 == nLen){delete[]lpUtf8;return NULL;}return lpUtf8;
}

希望對你有所幫助

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19473.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習】Adaboost: 強化弱學習器的自適應提升方法

&#x1f308;個人主頁: 鑫寶Code &#x1f525;熱門專欄: 閑話雜談&#xff5c; 炫酷HTML | JavaScript基礎 ?&#x1f4ab;個人格言: "如無必要&#xff0c;勿增實體" 文章目錄 Adaboost: 強化弱學習器的自適應提升方法引言Adaboost基礎概念弱學習器與強學習…

存儲器容量小才使用SRAM芯片,容量較大時使用DRAM芯片。為什么?

在計算機系統中&#xff0c;存儲器容量的選擇涉及到多種因素&#xff0c;包括成本、速度和復雜性。SRAM&#xff08;靜態隨機存取存儲器&#xff09;和DRAM&#xff08;動態隨機存取存儲器&#xff09;是兩種常見的內存類型&#xff0c;它們在設計和應用上有顯著的不同。以下是…

【藍橋杯嵌入式】 第六屆國賽

目錄 題目 配置 注意事項 代碼 - 默寫大師 EEPROM讀寫函數 LED驅動函數 ADC采集 上電初始化 LCD 按鍵 PWM互補輸出 全部代碼 hardware.c hardware.h control.c control.h main.c 題目 配置 注意事項 復制LCD的工程&#xff0c;先配置資源 --- 勾選完選項一…

CCIG 2024:合合信息文檔解析技術突破與應用前景

目錄 背景當前大模型訓練和應用面臨的問題訓練Token耗盡訓練語料質量要求高LLM文檔問答應用中文檔解析不精準 合合信息的文檔解析技術1. 具備多文檔元素識別能力2. 具備版面分析能力3. 高性能的文檔解析4. 高精準、高效率的文檔解析文檔多板式部分示例 文檔解析典型技術難點元素…

【代碼隨想錄Day23】|669.修建二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.把二叉搜索樹轉換為累加樹

669. 修剪二叉搜索樹 這題最開始的想法是復用刪除節點的那題的思路做&#xff0c;需要修改的部分就是要讓程序刪除完一個點后繼續遍歷&#xff0c;因為后續可能還有不符合條件的節點。但這樣想也做復雜了。 這類題其實不用想用什么序遍歷&#xff0c;用哪種方式只是為了更好的…

案例|開發一個美業小程序,都有什么功能

隨著移動互聯網的迅猛發展&#xff0c;美業連鎖機構紛紛尋求數字化轉型&#xff0c;以小程序為載體&#xff0c;提升服務效率&#xff0c;增強客戶體驗。 線下店現在面臨的困境&#xff1a; 客戶到店排隊時間過長&#xff0c;體驗感受差 新客引流難&#xff0c;老用戶回頭客…

基于EV54Y39A PIC-IOT WA的手指數量檢測功能開發(MPLAB+ADC)

目錄 項目介紹硬件介紹項目設計開發環境及工程參考總體流程圖硬件基本配置光照傳感器讀取定時器檢測邏輯 功能展示項目總結 &#x1f449; 【Funpack3-2】基于EV54Y39A PIC-IOT WA的手指數量檢測功能開發 &#x1f449; Github: EmbeddedCamerata/PIC-IOT_finger_recognition 項…

Flutter基礎 -- Dart 語言 -- 注釋函數表達式

目錄 1. 注釋 1.1 單行注釋 1.2 多行注釋 1.3 文檔注釋 2. 函數 2.1 定義 2.2 可選參數 2.3 可選參數 默認值 2.4 命名參數 默認值 2.5 函數內定義 2.6 Funcation 返回函數對象 2.7 匿名函數 2.8 作用域 3. 操作符 3.1 操作符表 3.2 算術操作符 3.3 相等相關的…

上海亞商投顧:滬指沖高回落 兩市成交金額僅剩7000億

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一.市場情緒 三大指數昨日沖高回落&#xff0c;午后一度集體翻綠&#xff0c;臨近尾盤小幅回升。光伏產業鏈再度走強&#…

aws 在ecs外部實例上運行gpu負載

參考資料 https://docs.amazonaws.cn/zh_cn/AmazonECS/latest/developerguide/ecs-gpu.htmlhttps://docs.amazonaws.cn/AWSEC2/latest/UserGuide/accelerated-computing-instances.html#gpu-instanceshttps://docs.amazonaws.cn/AWSEC2/latest/UserGuide/install-nvidia-drive…

LeetCode 63.不同路徑Ⅱ

思路&#xff1a; 在有障礙物的地方增加一個判斷即可 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int dp[105][105];int mobstacleGrid.size();int nobstacleGrid[0].size();for(int i0;i<m;i){for(int j0…

K8s集群之 存儲卷 PV PVC

目錄 默寫 1 如何將pod創建在指定的Node節點上 2 污點的種類(在node上設置) 一 掛載存儲??????? 1 emptyDir存儲卷 2 hostPath存儲卷 ①在 node01 節點上創建掛載目錄 ② 在 node02 節點上創建掛載目錄 ③ 創建 Pod 資源 ④ 在master上檢測一下&#xff1a;…

C++ vector 模擬實現

vector的底層也是一個動態數組&#xff0c;他與 string 的區別就是&#xff0c;string 是專門用來存儲字符類數據的&#xff0c;為了兼容C語言&#xff0c;使用C語言的接口&#xff0c;在string的動態數組內都會都開一塊空間用來存 \0 &#xff0c;而vector則不會。 首先我們要…

【Linux多線程】認識多線程創建線程

文章目錄 什么是多線程為什么稱linux下的線程是輕量級進程呢&#xff1f; 線程的優點線程的缺點線程異常線程和進程創建線程1.pthread_create2.pthread_self 什么是多線程 進程是正在運行的程序的實例&#xff0c;而線程&#xff08;thread&#xff09;是進程中的一個執行路線…

python 刪除pdf 空白頁

環境 python 3.10 PyPDF2 3.0.1 安裝 pip install PyPDF2流程 將空白頁和內容頁讀取出來&#xff0c;看看內部結構有什么不同以此為依據&#xff0c;遍歷整個PDF 文件&#xff0c;標記處有內容的頁面&#xff0c;寫入到另外一個PDF文件。 python 代碼 # 每一個頁都是一個…

Springboot郵件發送配置

Springboot郵件發送配置 pom.xml依賴&#xff1a; <dependency><groupId>org.eclipse.angus</groupId><artifactId>jakarta.mail</artifactId><version>2.0.3</version> </dependency> <dependency><groupId>or…

跨域的解決方案

1. 計算機更改跨域 1.C盤->Windows->System32->drivers->etc 2.修改hosts 文件2. Chrome瀏覽器的跨域設置 操作步驟&#xff1a;1.打開我的電腦——C盤 新建一個文件夾&#xff0c;命名為MyChromeDevUserData2.右鍵——Chrome——快捷方式——目標&#xff0c;在…

ChatGPT成知名度最高生成式AI產品,使用頻率卻不高

5月29日&#xff0c;牛津大學、路透社新聞研究所聯合發布了一份生成式AI&#xff08;AIGC&#xff09;調查報告。 在今年3月28日—4月30日對美國、英國、法國、日本、丹麥和阿根廷的大約12,217人進行了調查&#xff0c;深度調研他們對生成式AI產品的應用情況。 結果顯示&…

ElementUI之el-table標題列中顯示el-tooltip

ElementUI之el-table標題列中顯示el-tooltip 文章目錄 ElementUI之el-table標題列中顯示el-tooltip1. el-table標題列中顯示el-tooltip2. 實現代碼3. 展示效果 1. el-table標題列中顯示el-tooltip 在el-table-column標簽內添加具名插槽v-slot:header 在el-tooltip標簽中使用具…

【幾何】輸入0-360度任意的角度,求上面直線與橢圓相切點的坐標計算公式

?輸入0-360度任意的角度,求上面直線與橢圓相切點的坐標計算公式 使用積分計算 使用到的公式有橢圓公式: x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2} = 1 a2x2?+b2y2?=1 平面旋轉公式 X r = cos ? θ ? ( X s ? X O ) ? sin ? θ ? ( Y s ? Y O ) + X …