使用 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.mzph.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 …