线程与进程关系
进程是资源集合,提供cr3的值,cr3是页目录表的基址,cr3确定了,线程才能访问.
一个进程有多个线程,但至少有一个线程。
1
1,进程提供了空间上概念,进程提供了线程哪些空间地址可以访问的逻辑。
创建进程:
通过线程如何找到进程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28* thread -> cr3页面 -> _Kprocess 的指针
假如线程执行:
mov eax,dword ptr ds:[0x12345678]
cpu的解析路径:
1,线程拿到当前进程的 cr3 值 Kprocess_directoryTableBase(+0x018)
2,通过cr3的寄存器页表目录定位物理页
3,EThread结构体:
{
0x000 KThread 结构体
{
0x034 _KAPC_STAT
{
0x10 ptr32 EPROCESS;
0x044 , cmp [esi, prt* process]
#SWapContext时会比较 44 和 220 的值是否一样,不一样会造成进程空间切换,cr3切换,详情见进程挂靠
#44位置上提供是cr3的值,资源提供方的值
}
}
0x220 ptr32 EPROCESS #当前线程所属进程,当前线程是谁创建的
}