windows系统调用 遍历进程的虚拟地址
#include "iostream"
#include "windows.h"
#include "shlwapi.h"
#include "iomanip"
#pragma comment(lib,"shlwapi.lib")
using namespace std; inline bool TestSet(DWORD dwTarget,DWORD dwMask){
return ((dwTarget&dwMask)==dwMask);
} #define SHOWMASK(dwTarget,type)\
if(TestSet(dwTarget,PAGE_##type))\
{cout<<","<<#type;} void ShowProtection(DWORD dwTarget)
{
SHOWMASK(dwTarget,READONLY);
SHOWMASK(dwTarget,GUARD);
SHOWMASK(dwTarget,NOCACHE);
SHOWMASK(dwTarget,READWRITE);
SHOWMASK(dwTarget,WRITECOPY);
SHOWMASK(dwTarget,EXECUTE);
SHOWMASK(dwTarget,EXECUTE_READ);
SHOWMASK(dwTarget,EXECUTE_READWRITE);
SHOWMASK(dwTarget,EXECUTE_WRITECOPY);
SHOWMASK(dwTarget,NOACCESS);
} void WalkVM(HANDLE hProcess){
SYSTEM_INFO si;
ZeroMemory(&si,sizeof(si));
GetSystemInfo(&si); MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi,sizeof(mbi)); LPCVOID pBlock=(LPVOID)si.lpMinimumApplicationAddress;
while(pBlock<si.lpMaximumApplicationAddress){
if(VirtualQueryEx(
hProcess,
pBlock,
&mbi,
sizeof(mbi)
)==sizeof(mbi)){
LPCVOID pEnd=(PBYTE)pBlock+mbi.RegionSize;
TCHAR szSize[MAX_PATH];
StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH); cout.fill('');
cout<<hex<<setw()<<(DWORD)pBlock
<<"-"
<<hex<<setw()<<(DWORD)pEnd
<<(strlen(szSize)==?"(":"(")<<szSize
<<")"; switch(mbi.State){
case MEM_COMMIT:
printf("Committed");
break;
case MEM_FREE:
printf("Free");
break;
case MEM_RESERVE:
printf("Reserved");
break; } if(mbi.Protect==&&mbi.State!=MEM_FREE){
mbi.Protect=PAGE_READONLY;
}
ShowProtection(mbi.Protect); switch(mbi.Type){
case MEM_IMAGE:
printf(",Image");
break;
case MEM_MAPPED:
printf(",Mapped");
break;
case MEM_PRIVATE:
printf(",Private");
break;
} TCHAR szFilename[MAX_PATH];
if(GetModuleFileName((HMODULE)pBlock,
szFilename,
MAX_PATH
)>){
PathStripPath(szFilename);
printf(",Module:%s",szFilename);
}
printf("\n");
pBlock=pEnd;
}
}
} void main(){ WalkVM(GetCurrentProcess());
getchar();
}
windows系统调用 遍历进程的虚拟地址的更多相关文章
- Windows编程之进程遍历(C++实现)
Windows编程之进程遍历 PS: 主要扣代码使用,直接滑动到最下面使用. 遍历进程需要几个API,和一个结构体 1.创建进程快照 2.遍历首次进程 3.继续下次遍历 4.进程信息结构体 API 分 ...
- Windows提高_1.2遍历进程、遍历模块
进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程. 进程 ...
- windows:跨进程读数据
外挂.木马.病毒等可能需要读取其他进程的数据,windows提供了OpenProcess.ReadProcessMemory等函数.但越是大型的软件,防护做的越好,大概率会做驱动保护,比如hook S ...
- [转]Windows 下的进程间通讯及数据共享
http://blog.codingnow.com/2005/10/interprocess_communications.html Windows 下有很多方法实现进程间通讯,比如用 socket, ...
- windows 多任务与进程
多任务,进程与线程的简单说明 多任务的本质就是并行计算,它能够利用至少2处理器相互协调,同时计算同一个任务的不同部分,从而提高求解速度,或者求解单机无法求解的大规模问题.以前的分布式计算正是利用这点, ...
- powershell脚本之windows服务与进程
powershell脚本之windows服务与进程 服务与进程的区别: Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序 进程是程序运行的实例,系统会给运行中 ...
- Windows系统调用中API从3环到0环(下)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(下) 如果对API在 ...
- 未公开函数 NtQuerySystemInfoMation 遍历进程信息,获得进程的用户名(如: system,Admin..)
目录 遍历进程用户名 代码例子 遍历进程用户名 代码例子 #include <windows.h> #include <iostream> #include <COMDE ...
- 【windows 操作系统】进程控制块(PCB)
转载地址:https://blog.csdn.net/qq_38499859/article/details/80057427一.目录文章目录 操作系统3 ----进程控制块(PCB)详解 ...
随机推荐
- hdu1232 并查集
1. hdu1232 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 3.总结:简单并查集 #include<iostream> # ...
- Eclipse IDE for C/C++ Developers安装配置详解
Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...
- 抄书 Copying Books UVa 714
Copying Books 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/B 题目: Descri ...
- 一个资深iOS开发者对于React Native的看法
一个资深iOS开发者对于React Native的看法 当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道. 我认为一个js开发者可以使用javasc ...
- Qt 按钮事件不响应
在Qt中,我们设置好按钮的相应事件,连好信号槽,声明什么的也没什问题,但为什么点击按钮就是没有反应,检查了半天终于发现原来是子面板上也有一个相同名称的按钮,一般来说两个面板不为父子关系的时候,分别在不 ...
- html5响应式设置<meta>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> < ...
- .net 新闻点击量修改,避免恶意刷新
DataTable dt = bll.GetNewsByID(id);//根据ID获取的新闻详细内容 if (dt != null && dt.Rows.Count > 0) { ...
- CSS3初学篇章_5(背景样式/列表样式/过渡动画)
背景样式 1.背景颜色语法:background-color : transparent | color body { background-color:#CCCCCC;} 2.渐变色彩语法:back ...
- Lua迭代器和泛型for
1.迭代器与closure 在lua中,迭代器通常为函数,每调用一次函数,会返回集合中的下一个元素.每个迭代器在成功调用的时候,都需要保存一些状态,closure(闭包)完美为迭代器运用而生. fun ...
- 第一课JAVA开发环境配置
进行JAVA环境安装首先得进行jdk1.7部署,注意应放在没有中文和空格的目录下,然后进行配置环境变量,配置环境变量分为三步: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_ ...