兩種方法枚舉進程加載的DLL

兩種方法枚舉進程加載的DLL
枚舉進程加載的模塊
(1)控制檯實現方法
  命令:tasklist -m >d:\\1.txt
  這樣就會把系統當前運行的程序所加載的DLL全部打印到1.txt中。
  也可以
#include <PROCESS.H>
void main()
{
 system("tasklist -m >d:12343.txt");
}
另外也可以通過 CreateProcess實現

#include <WINDOWS.H>

int main()
{
 static STARTUPINFOW SI={sizeof(STARTUPINFOW)};
 PROCESS_INFORMATION PI;
 static wchar_t cmdline[]=L"cmd.exe /c tasklist -m>>c:\\a.txt";
 CreateProcessW(0, cmdline,NULL, NULL,
            FALSE,NORMAL_PRIORITY_CLASS,NULL, NULL,&SI,&PI);
 return 0;
}


(2)使用winapi實現
HANDLE WINAPI CreateToolhelp32Snapshot(  //創建所有進程的快照
  __in          DWORD dwFlags,//標誌
  __in          DWORD th32ProcessID//進程的pid;
);

BOOL WINAPI Module32First(
  __in          HANDLE hSnapshot,//創建進程快照是返回的句柄;
  __in_out      LPMODULEENTRY32 lpme//指向一個MODULEENTRY32的結構體
);

BOOL WINAPI Module32Next(
  __in          HANDLE hSnapshot,
  __out         LPMODULEENTRY32 lpme
);
typedef struct tagMODULEENTRY32 { 
DWORD dwSize; 
DWORD th32ModuleID;
 DWORD th32ProcessID;
 DWORD GlblcntUsage;
 DWORD ProccntUsage; 
 BYTE* modBaseAddr; 
 DWORD modBaseSize;
 HMODULE hModule; 
 TCHAR szModule[MAX_MODULE_NAME32 + 1]; //模塊的名稱。
 TCHAR szExePath[MAX_PATH];
} MODULEENTRY32,  *PMODULEENTRY32;

實現過程
#include <WINDOWS.H>
#include <TLHELP32.H>//需要包含此文件
#include <iostream>
using namespace std;
int main()
{
    MODULEENTRY32 moudle;
 HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,3492);
 if (handle == INVALID_HANDLE_VALUE) return 0;
 if ( Module32First(handle,&moudle))
 { do
  {cout<<moudle.szModule<<endl;
  }while(Module32Next(handle,&moudle));
 }
 CloseHandle(handle);
 return 0;
}

發佈了33 篇原創文章 · 獲贊 11 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章