
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0 );
PROCESSENTRY32 procentry=sizeof(PROCESSENTRY32);
BOOL bFlag=Process32First( hSnapShot, &procentry ) ;
while( bFlag )
{
if(stricmp(procentryszExeFile, "你的程序名 ")==0)
processid=procentryth32ProcessID; //找到
bFlag=Process32Next(hSnapShot,&procentry);
}
注意一个程序可能有几个实例同时运行,所以可能同时找到几个ID。
首先储存dim shuzhi as long
读出数值ReadProcessMemory pHandle, ByVal lpAddress, ByVal VarPtr(SaveData(0)), shuzhi(读出的数值),dtLen(数值类型),0
直接调用shuzhi
例如要取vsftpd对应的进程号:
ps -ef|grep vsftpd|grep -v grep|awk '{print $2}'需要注意会不会有多个匹配这个名字的进程返回
1理解
uid:uid 对于 应用来说其实就是指我们当前应用是在那个 group 组内
就是指这个shareuserid,一个组内的uid相同,,并且具有相同的uid的应用才能共享用户内存
pid:是指每个进程在liunx下的 进程的id 是唯一的。
2获取
获取uid:
PackageManager pm = getPackageManager();
ApplicationInfo ai = pmgetApplicationInfo("comspeedsoftwarerootexplorer", PackageManagerGET_ACTIVITIES);
Logd("!!", "!!" + aiuid);
获取pid:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManagerRunningAppProcessInfo> list = activityManagergetRunningAppProcesses();
for(ActivityManagerRunningAppProcessInfo runningAppProcessInfo : list){
if(runningAppProcessInfopid == pid){
processName = runningAppProcessInfoprocessName;
}
}
函数:
ReadProcessMemory()
读取指定进程的内存数据,成功返回0。
参数:
hProcess:进程句柄,必须是可访问进程。
lpBaseAddress:指向进程欲读取的基地址,在数据读取时系统将以此确定读取的数据范围是否可访问。不可访问时 *** 作失败。
lpBuffer:用于接收数据的缓冲地址
nSize:读取的数据字节大小
lpNumberOfBytesRead:返回的实际读取大小,如果为NULL则不返回。
函数:
WriteProcessMemory
写入数据到指定进程的内存,成功返回0。
参数:
hProcess:进程句柄,必须是可访问进程。
lpBaseAddress:指向进程欲写入的基地址。
lpBuffer:写入数据的缓冲地址
nSize:写入的数据字节大小
lpNumberOfBytesRead:返回的实际写入大小,如果为NULL则不返回。
函数:
GetWindowThreadProcessId
得到窗口进程ID
参数:
hWnd:窗口进程
lpdwProcessId:返回进程句柄
返回:
进程ID
函数:
CloseHandle
关闭句柄
参数:
hObject:句柄
函数:
FindWindow
查找窗口
参数:
lpClassName:窗体类名
lpWindowName:窗体名
整个程序定时查找指定窗口是否存在,以判断是否启动该程序,然后启动定时修改指定位置的内存数据
下面的命令就是显示进程名称为cmdexe的pid,不过这里有一个问题就是获得的pid是包括双引号的,这个你要自己再处理一下。
for
/f
"delims=,
tokens=1,2
skip=3"
%%a
in
('tasklist
/fo
csv
/fi
^"imagename
eq
cmdexe^"')
do
echo
%%b
如果是要监听的服务端口,我觉得用 l 参数比较好。
然后如下三种方式请参考。
netstat -nlp | grep -w 端口号 | sed -r 's# ()/#\1#'
netstat -nlp | sed -nr '/端口号/s# ()/#\1#p'
netstat -nlp | awk -F'[ /]' '/端口号/{print $(NF-2)}'
我曾经想用VB做一个注入,但到OpenProcess处总是返回零,无法得到正确结果,尤其是包含写权限时,我估计你的程序问题也出在OpenProcess处,你可以检测一下执行完OpenProcess后,pHandle是否为零
我曾读到一篇文章说,似乎VB下OpenProcess执行就是有问题
以上就是关于c++中怎样根据进程名得到进程pid全部的内容,包括:c++中怎样根据进程名得到进程pid、Vb读取内存的问题(如何调用function里的值)、linux下,有没有方法可以用脚本实现通过进程名获取PID号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)