首页
社区
课程
招聘
[讨论]为什么打开三个进程,得到的进程句柄相同?
发表于: 2017-7-9 15:20 3686

[讨论]为什么打开三个进程,得到的进程句柄相同?

2017-7-9 15:20
3686
int main()
{
DWORD dwpid = GetCurrentProcessId();
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwpid);
printf("===pid=%d handle=%d\n", dwpid, hProcess);
system("pause");
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 263
活跃值: (97)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
每个进程有个句柄表,保存打开的句柄,句柄与进程有关,不能夸进程
2017-7-9 15:29
0
雪    币: 263
活跃值: (97)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
使用
2017-7-9 15:29
0
雪    币: 111
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Zn风扇 每个进程有个句柄表,保存打开的句柄,句柄与进程有关,不能夸进程
比如打开calc.exe

自己写R3程序通过openprocess打开calc.exe,  返回值转DWORD比如是68
然后再WriteProcessMemory(68,  .......................)写数据
sysenter切内核后
在内核    NtWriteVirtualMemory下,获得第一个参数是进程句柄68

而你指的68是当前进程句柄,那内核NtWriteVirtualMemory如何知道是向句柄为68的calc.exe进程写数据呢。。。
2017-7-9 15:46
0
雪    币: 759
活跃值: (2364)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
内核  NtWriteVirtualMemory第一个参数为68是错误的。。。在进入内核前进程通过查找句柄表找到68号句柄对应的内核OBJECT,在进入内核时传入这个内核OBJECT,内核OBJECT有很多种类型,进程的内核OBJECY对应的对象体是EPROCESS,关于内核OBJECT的类型可以上网搜搜。
2017-7-9 17:03
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
你每重开一次程序  句柄表都是重建的
所以每次句柄都是相同不是很正常么
2017-7-9 22:20
0
雪    币: 263
活跃值: (97)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
貌似是把句柄转换为内核对象,内核中操作的是内核对象而不是句柄,句柄是r3层使用的
2017-7-10 09:12
0
游客
登录 | 注册 方可回帖
返回
//