进程的创建过程
1、映射EXE文件。
2、创建内核对象EPROCESS。
3、映射系统DLL(ntdll.dll)。
4、创建线程对象ETHREAD
5、系统启动线程
进入LdrInitializeThunk
LdrpInitialize
_LdrpInitialize
LdrpInitializeProcess
LdrLoadDll 加载DLL
Debugbreak() 如果是调试器启动,那么会触发int 3断点,断到调试器中。
ZwContinue 进入内核中
6、再次进入内核中,内核将用户态eip设置为ntdll!RtlUserThreadStart函数中,还会跳转到_RtlUserThreadStart等函数
传入两个参数,一个参数为EXE的入口函数OEP地址,再去调用main函数。
另一个参数为进程的PEB地址。
如果再次启动其它线程时,传入的参数包括函数的入口地址,以及函数的参数,如CreateThread启动线程时,需要传入入口函数以及参数地址。
RtlUserThreadStart函数代码如下:
跳转到ntdll!_RtlUserThreadStart,跳转之前将参数放到栈上。
标签:函数,RtlUserThreadStart,步骤,跳转,参数,内核,创建,进程,线程 From: https://www.cnblogs.com/ps12345678/p/17127348.html