内核之线程与进程的关系

线程与进程关系

  • 进程是资源集合,提供cr3的值,cr3是页目录表的基址,cr3确定了,线程才能访问.

  • 一个进程有多个线程,但至少有一个线程。

    1
    1,进程提供了空间上概念,进程提供了线程哪些空间地址可以访问的逻辑。

    image-20211110200416873

  • 创建进程:

    image-20211110201154629

  • 通过线程如何找到进程:

    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 #当前线程所属进程,当前线程是谁创建的
    }