兩種方法枚舉進程加載的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;
}