模块遍历

整体思路

1.创建进程快照
2.遍历首次模块
3.继续下次遍历
4.模块信息结构体

相关API的调用

  • 创建进程快照API
HANDLE WINAPI CreateToolhelp32Snapshot(      进程快照API
DWORD dwFlags,                 遍历的标志,表示你要遍历什么(进程,模块,堆...)
DWORD th32ProcessID                遍历的进程ID,如果为0,则是当前进程,如果不为0,则是创建指定进程的快照进行遍历
);

成功返回快照地址,失败返回(INVALID_HANDLE_VALUE)-1

  • 遍历第一个模块
点开查看 LPMODULEENTRY32 结构体

typedef struct tagMODULEENTRY32 {

DWORD dwSize;                 大小,第一次使用必须初始化

DWORD th32ModuleID;              进程模块标识符

DWORD th32ProcessID;             进程ID

DWORD GlblcntUsage;              全局模块使用次数

DWORD ProccntUsage;              模块的引用计数

BYTE * modBaseAddr;              模块的基址

DWORD modBaseSize;              模块的大小

HMODULE hModule;                 模块的句柄

TCHAR szModule[MAX_MODULE_NAME32 + 1]; 模块名称的字符串

TCHAR szExePath[MAX_PATH];          模块路径字符串

} MODULEENTRY32;

typedef MODULEENTRY32 *PMODULEENTRY32;

BOOL WINAPI Module32First(
HANDLE hSnapshot,       快照句柄
LPMODULEENTRY32 lpme      模块信息结构体
);
  • 获取下一个模块
BOOL WINAPI Process32Next(
HANDLE hSnapshot,   进程句柄
LPPROCESSENTRY32 lppe 进程信息结构体
);

实现

#include <stdio.h>
#include <windows.h>
#include <Tlhelp32.h>
int main(int argc, char* argv[])
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
if (INVALID_HANDLE_VALUE == hSnapshot)
{
return 0;
}
MODULEENTRY32 mi;
mi.dwSize = sizeof(MODULEENTRY32); //第一次使用必须初始化成员
BOOL bRet = Module32First(hSnapshot,&mi);
while (bRet)
{
printf("%s",mi->szExePath); //模块名
bRet = Module32Next(hSnapshot,&mi);
}
return 0;
}

[Windows编程]模块遍历的更多相关文章

  1. Windows编程之模块遍历(C++实现)

    Windows编程之模块遍历 PS: 主要扣代码使用,直接滑动到最下面使用. 遍历模块需要几个API,和一个结构体 1.创建进程快照 2.遍历首次模块 3.继续下次遍历 4.模块信息结构体 API 分 ...

  2. Windows编程之进程遍历(C++实现)

    Windows编程之进程遍历 PS: 主要扣代码使用,直接滑动到最下面使用. 遍历进程需要几个API,和一个结构体 1.创建进程快照 2.遍历首次进程 3.继续下次遍历 4.进程信息结构体 API 分 ...

  3. MFC-01-Chapter01:Hello,MFC---1.1 Windows 编程模型

    1.1 Windows编程模型 为传统的操作系统编写的程序使用的是过程化模型,即程序从头到尾按顺序执行.例如C程序,从main函数入口开始执行,中间调用不同的函数一直到程序结束返回,这种过程是程序本身 ...

  4. 《Windows编程零基础学》第零节

    首先很开心申请到了这一个专栏<Windows编程零基础学> 这是第一篇文章,在这里,我将讲述一些基础的知识. 什么是Windows编程 所谓Windows编程就是在Windows平台上开发 ...

  5. windows编程 进程的创建销毁和分析

    Windows程序设计:进程 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,在Windows编程环境下,主要由两大元素组成: • 一个是操作系统用来管理进程的内核对象.操作系统使用内 ...

  6. 《C++ Primer Plus》读书笔记之五—函数-C++的编程模块

    函数-C++的编程模块   1.C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型——整数.浮点数.指针,甚至可以是结构和对象(有趣的是,虽然C++函数不能直接返回数组,但可以将数组 ...

  7. Windows编程

    本文整理自百科.知乎与 科学家的世界 问题一:为什么开发windows应用程序不用c 而用.net,java,c++? 用 c+windows API  开发windows 应用程序  比用.net, ...

  8. Windows编程 Windows程序的生与死(上)

    引子 “Windows 程序分为‘程序代码’和‘UI(User Interface)资源’两大部份,两部份最后以RC编译器(资源编译器)整合为一个完整的EXE 文件.所谓UI 资源是指功能菜单.对话框 ...

  9. 资源在windows编程中的应用----菜单

    资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...

随机推荐

  1. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  2. xiaoxiaole

    common.cpp #include "common.h" common.h #ifndef COMMON_H_INCLUDED #define COMMON_H_INCLUDE ...

  3. Android WebView 实现文件选择、拍照、录制视频、录音

    原文地址:Android WebView 实现文件选择.拍照.录制视频.录音 | Stars-One的杂货小窝 Android中的WebView如果不进行相应的设置,H5页面的上传按钮是无法触发And ...

  4. Markdown使用方式

    区块 区块引用在段落开头使用>,后面紧跟一个空格符号 > 区块引用 > XXX > XXX 高级技巧 HTML元素 居中  <center>XXX</cent ...

  5. 使用Magisk+riru实现全局改机

    前言 提到全局改机,我们想到修改的不是修改Android源码就是利用Xposed改机,前者成本太高,后者只能修改Java层的数据不够彻底.magisk是Android平台上功能强大的工具,利用它可以随 ...

  6. ES6-正则新增(复习+学习)

    ES6-正则 昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上: 1.RegExp构造函数的区别 2.新增的修饰符 ...

  7. Python基础(@property)

    class Point(object): # def get_score(self): # return self.score # def set_score(self,value): # if no ...

  8. 使用Token进行CSRF漏洞防御

    1.登录验证成功之后,在会话SESSION["user_token"]中保存Token. 2.在后台操作中,增删改表单中添加隐藏域hidden,设置value为Token. 3.提 ...

  9. [hdu7022]Jsljgame

    先考虑$x=y$的情况,此时即是一个平等博弈,因此考虑$sg$函数 具体的,有$sg(n)=\begin{cases}0&(n=0)\\mex(\{sg(n-i)\mid 1\le i\le ...

  10. 前端jsdebug调试

    前端如何像java一样的debug呢? 1.在js页面加入debugger next: function(){ debugger var type=this.quiz[this.progress].s ...