这个程序没什么特殊的,就是用了Toolhelp库里的函数,主要是用CreateToolhelp32Snapshot建立句柄
然后分Process32First和Process32Next列举进程,然后在有参数的情况下用Module32First和Module32Next
列举对应进程所加载的模块,使用方法,直接运行pl列举进程,在查看到进程的对应pID时运行pl pID
此时则列举pID进程加载的模块,另,本程序没有加列举线程及终止进程、线程卸载模块的功能,等
有时间的时候再加上吧,应该会用到TerminateProcess/TerminateThread此类的函数,应该还会涉及到提
权的问题,有兴趣的朋友可以交流下呀。
已编译版本下载地址:https://files.cnblogs.com/tobylee/pl.rar
然后分Process32First和Process32Next列举进程,然后在有参数的情况下用Module32First和Module32Next
列举对应进程所加载的模块,使用方法,直接运行pl列举进程,在查看到进程的对应pID时运行pl pID
此时则列举pID进程加载的模块,另,本程序没有加列举线程及终止进程、线程卸载模块的功能,等
有时间的时候再加上吧,应该会用到TerminateProcess/TerminateThread此类的函数,应该还会涉及到提
权的问题,有兴趣的朋友可以交流下呀。
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if(argc==1) {
HANDLE handle = (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
PROCESSENTRY32 Info;
Info.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(handle, &Info)) {
printf("Process List:\n\n");
printf("%-6s\t%s", "PID", "Process Name");
do {
printf("\n%-6d\t%-10s", (int)Info.th32ProcessID, Info.szExeFile);
}while (Process32Next(handle, &Info));
}
CloseHandle(handle);
return 0;
}else {
HANDLE handle = (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, atoi(argv[1]));
MODULEENTRY32 lInfo;
lInfo.dwSize = sizeof(MODULEENTRY32);
if(Module32First(handle, &lInfo)) {
printf("Module List of %s:\n\n", lInfo.szModule);
printf("%-16s\t%s", "Module Name", "Module Path");
do{
printf("\n%-16s\t%s", lInfo.szModule, lInfo.szExePath);
}while(Module32Next(handle, &lInfo));
}
CloseHandle(handle);
return 0;
}
}
#include <tlhelp32.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if(argc==1) {
HANDLE handle = (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
PROCESSENTRY32 Info;
Info.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(handle, &Info)) {
printf("Process List:\n\n");
printf("%-6s\t%s", "PID", "Process Name");
do {
printf("\n%-6d\t%-10s", (int)Info.th32ProcessID, Info.szExeFile);
}while (Process32Next(handle, &Info));
}
CloseHandle(handle);
return 0;
}else {
HANDLE handle = (HANDLE)CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, atoi(argv[1]));
MODULEENTRY32 lInfo;
lInfo.dwSize = sizeof(MODULEENTRY32);
if(Module32First(handle, &lInfo)) {
printf("Module List of %s:\n\n", lInfo.szModule);
printf("%-16s\t%s", "Module Name", "Module Path");
do{
printf("\n%-16s\t%s", lInfo.szModule, lInfo.szExePath);
}while(Module32Next(handle, &lInfo));
}
CloseHandle(handle);
return 0;
}
}
已编译版本下载地址:https://files.cnblogs.com/tobylee/pl.rar