日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

枚举进程再来两弹

發(fā)布時(shí)間:2024/9/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 枚举进程再来两弹 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? 看了剛出幾個(gè)博友的博客,感覺(jué)人家的量大,詳細(xì),干貨量實(shí)足啊,

所以我就把另外兩種常見(jiàn)的枚舉進(jìn)程的方法簡(jiǎn)單說(shuō)下心得,

一個(gè)是EnumProcesses和CreateToolhelp32Snapshot系列的Tool help API的 Process32First和Process32Next函數(shù)完成列舉進(jìn)程。

 這兩種都是比較簡(jiǎn)單實(shí)用的?https://github.com/Arsense/WindowsCode

  蠻簡(jiǎn)單的 ?需要編譯好的源碼的 支持vs2015,低版本的VS想編譯 簡(jiǎn)單右鍵工程 屬性設(shè)置下低版本的編譯器就行,如下

?

0x01 基本思路

?有兩種方法? 第一種方法調(diào)用EnumProcesses遍歷進(jìn)程,

并調(diào)用ListProcessModules1函數(shù)和

ListProcessThreads函數(shù)列舉模塊和線程

?

調(diào)用Process32First和Process32Next遍歷進(jìn)程,

并調(diào)用ListProcessModules2函數(shù)列舉模塊,

調(diào)用ShowProcessMemoryInfo函數(shù)顯示內(nèi)存使用情況

?

細(xì)微的區(qū)別是 EnumProcesses 可以一次性列舉所有進(jìn)程(以PID的形式返回),但是沒(méi)有

Process32First 和 Process32Next獲取的信息豐富

?

?

0x02 代碼流程

??? 本實(shí)例是使用EnumProcesses函數(shù)獲取所有進(jìn)程的PID,然后使用OpenProcess、函數(shù)

各進(jìn)程的句柄,然后獲取相關(guān)信息

?

?

* 功能 調(diào)用EnumProcesses遍歷進(jìn)程, * 并調(diào)用ListProcessModules1函數(shù)和 * ListProcessThreads函數(shù)列舉模塊和線程 * * 無(wú)參數(shù),無(wú)返回值 **************************************/ VOID WINAPI EnumProcess1() {// 假設(shè)不超過(guò)1024個(gè)進(jìn)程DWORD aProcesses[1024], cbNeeded, cProcesses;unsigned int i;// 調(diào)用EnumProcessesif ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )return;// 進(jìn)程數(shù)cProcesses = cbNeeded / sizeof(DWORD);for ( i = 0; i < cProcesses; i++ ){// 顯示進(jìn)程信息printf( "\n\n**************************************************" );printf("\nPROCESS : %u\n\n",aProcesses[i]);printf( "\n****************************************************" );// 列舉模塊信息和線程信息 ListProcessModules1( aProcesses[i] );ListProcessThreads( aProcesses[i] );} }

?

      而CreateToolhelp32Snapshot函數(shù)通過(guò)獲取進(jìn)程信息為指定的進(jìn)程、進(jìn)程使用的堆[HEAP]、模塊[MODULE]、線程[THREAD]建立一個(gè)快照

0x03? 使用 PSAPI 庫(kù)枚舉進(jìn)程 ?這兩個(gè)都是這個(gè)庫(kù)里面的
在 Windows NT 中,創(chuàng)建進(jìn)程列表使用 PSAPI 函數(shù),這些函數(shù)在 PSAPI.DLL 中。這個(gè)文件是隨 Platform SDK 一起分發(fā)的:

使用這個(gè)庫(kù)所需的 PSAPI.h 和 PSAPI.lib 文件也在該 Platform SDK 中。
為了使用 PSAPI 庫(kù)中的函數(shù),需將 PSAPI.lib 添加到代碼項(xiàng)目中,同時(shí)在所有調(diào)用 PSAPI API 的模塊中包含 PSAPI.h 文件。記住一定要隨可執(zhí)行文件一起分發(fā) PSAPI.DLL,因?yàn)樗浑S Windows NT 一起分發(fā)。

主要的代碼實(shí)現(xiàn)如下

  

#include<stdio.h> #include<psapi.h> #pragma comment(lib,"psapi.lib")int main() {//進(jìn)程結(jié)構(gòu) PROCESSENTRY32 Pe32; //用之前要知道大小Pe32.dwSize = sizeof(Pe32);//創(chuàng)建進(jìn)程快照HANDLE ProcessSnapHandle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);HANDLE ModuleSnapHandle = NULL;if (ProcessSnapHandle == INVALID_HANDLE_VALUE){printf("[-]ProcessSnapHandle Error!\r\n");int Error = GetLastError();printf("Error is : %d\r\n", Error);return -1;}BOOL NextProcess = Process32First(ProcessSnapHandle,&Pe32);HANDLE ProcessHandle = 0;WCHAR ProcessPath[MAX_PATH] = { 0 };MODULEENTRY32 pModule; //模塊的結(jié)構(gòu) pModule.dwSize = sizeof(MODULEENTRY32);BOOL Return = FALSE;//準(zhǔn)備好了 開(kāi)始遍歷while (NextProcess){//先打開(kāi)進(jìn)程對(duì)象得到句柄ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pe32.th32ParentProcessID);//得到模塊的路徑 GetModuleFileNameEx(ProcessHandle, NULL, ProcessPath, _MAX_PATH);wprintf(_T("ProcessPath:%s\n ProcessName : %s\t\t ProcessID : %d\n\n"), ProcessPath, Pe32.szExeFile, Pe32.th32ProcessID);//創(chuàng)建模塊的快照ModuleSnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pe32.th32ProcessID);Return = Module32First(ModuleSnapHandle, &pModule);while (Return){//枚舉輸出wprintf(_T("\t\tModual:%s\tBase:%2x\n"), pModule.szExePath, pModule.modBaseAddr);Return = ::Module32Next(ModuleSnapHandle, &pModule);}CloseHandle(ModuleSnapHandle);NextProcess = Process32Next(ProcessSnapHandle, &Pe32);}CloseHandle(ProcessSnapHandle);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/arsense/p/6417966.html

總結(jié)

以上是生活随笔為你收集整理的枚举进程再来两弹的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。