• windows系统调用 遍历进程的虚拟地址


      1 #include "iostream"
      2 #include "windows.h"
      3 #include "shlwapi.h"
      4 #include  "iomanip"
      5 #pragma comment(lib,"shlwapi.lib")
      6 using namespace std;
      7 
      8 inline bool TestSet(DWORD dwTarget,DWORD dwMask){
      9     return ((dwTarget&dwMask)==dwMask);
     10 }
     11 
     12 #define SHOWMASK(dwTarget,type)
     13     if(TestSet(dwTarget,PAGE_##type))
     14 {cout<<","<<#type;}
     15 
     16 void ShowProtection(DWORD dwTarget)
     17 {
     18     SHOWMASK(dwTarget,READONLY);
     19     SHOWMASK(dwTarget,GUARD);
     20     SHOWMASK(dwTarget,NOCACHE);
     21     SHOWMASK(dwTarget,READWRITE);
     22     SHOWMASK(dwTarget,WRITECOPY);
     23     SHOWMASK(dwTarget,EXECUTE);
     24     SHOWMASK(dwTarget,EXECUTE_READ);
     25     SHOWMASK(dwTarget,EXECUTE_READWRITE);
     26     SHOWMASK(dwTarget,EXECUTE_WRITECOPY);
     27     SHOWMASK(dwTarget,NOACCESS);
     28 }
     29 
     30 void WalkVM(HANDLE hProcess){
     31     SYSTEM_INFO si;
     32     ZeroMemory(&si,sizeof(si));
     33     GetSystemInfo(&si);
     34 
     35     MEMORY_BASIC_INFORMATION mbi;
     36     ZeroMemory(&mbi,sizeof(mbi));
     37 
     38     LPCVOID pBlock=(LPVOID)si.lpMinimumApplicationAddress;
     39     while(pBlock<si.lpMaximumApplicationAddress){
     40         if(VirtualQueryEx(
     41             hProcess,
     42             pBlock,
     43             &mbi,
     44             sizeof(mbi)
     45             )==sizeof(mbi)){
     46                 LPCVOID pEnd=(PBYTE)pBlock+mbi.RegionSize;
     47                 TCHAR szSize[MAX_PATH];
     48                 StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);
     49 
     50                 cout.fill('0');
     51                 cout<<hex<<setw(8)<<(DWORD)pBlock
     52                     <<"-"
     53                     <<hex<<setw(8)<<(DWORD)pEnd
     54                     <<(strlen(szSize)==7?"(":"(")<<szSize
     55                     <<")";
     56 
     57                 switch(mbi.State){
     58                     case MEM_COMMIT:
     59                     printf("Committed");
     60                     break;
     61                     case MEM_FREE:
     62                     printf("Free");
     63                     break;
     64                     case MEM_RESERVE:
     65                     printf("Reserved");
     66                     break;
     67                 
     68                 }
     69 
     70                 if(mbi.Protect==0&&mbi.State!=MEM_FREE){
     71                     mbi.Protect=PAGE_READONLY;
     72                 }
     73                 ShowProtection(mbi.Protect);
     74 
     75                 switch(mbi.Type){
     76                     case MEM_IMAGE:
     77                         printf(",Image");
     78                         break;
     79                     case MEM_MAPPED:
     80                         printf(",Mapped");
     81                         break;
     82                     case MEM_PRIVATE:
     83                         printf(",Private");
     84                         break;
     85                 }
     86 
     87                 TCHAR szFilename[MAX_PATH];
     88                 if(GetModuleFileName((HMODULE)pBlock,
     89                     szFilename,
     90                     MAX_PATH
     91                     )>0){
     92                     PathStripPath(szFilename);
     93                     printf(",Module:%s",szFilename);
     94                 }
     95                 printf("
    ");
     96                 pBlock=pEnd;
     97         }
     98     }
     99 }
    100 
    101 void main(){
    102     
    103     WalkVM(GetCurrentProcess());
    104     getchar();
    105 }
  • 相关阅读:
    一步步打造QQ群发消息群发器
    正确理解IEnumerable和IQueryable两接口的区别
    分享破解公众号裂变涨粉工具、吸粉方案。
    快40岁了,我还要不要继续写代码呢?
    精准营销、批量提取QQ群成员号码
    分享一个公众号h5裂变吸粉源码工具
    C#(.NET) HMAC SHA256实现
    mybatis的<if>标签,<foreach>标签,<collection>标签,<association>标签以及useGeneratedKeys用法
    springBoot解决跨域问题
    springBoot实现文件上传与下载
  • 原文地址:https://www.cnblogs.com/593213556wuyubao/p/3801086.html
Copyright © 2020-2023  润新知