-
-
[分享]从NT5源码学习进程创建和PE加载过程
-
发表于: 2025-6-19 00:59 816
-
涉及到的知识点:
文件的映射,section对象,或者叫filemap对象的组织形式
VAD,原型PTE,PTE
VAD和PE文件中节区属性的关系
PEB->LDR,已加载模块链表的记录
构造内核栈空间和用户栈空间
线程切换
内核apc的执行
用户apc的执行
程序的入口点是怎么被执行的
等等等......
每个点都可以延展出无数点的知识,一开始我只想学习一下PE文件的组成,但是发现看完就忘了,逆向win10的
CreateProcessInternalW 函数又非常吃力,已经添加了不少新特性,可以学习的书籍还停留在wrk或者reactos中,并且书上这些内容被划分在不同的章节.有些只是一笔带过.,本质上这篇文章是个人的总结,希望可以给其他在学习的提供一点点帮助.
默认调用NT开头的函数它会进入内核,它就是内核函数(因为我也不知道某个文件到底生成的是哪个DLL)
并没有调试跟踪,可能会存在某些跳转错误.尤其是在内核空间栈的创建和填充 ,,以及用户空间栈的创建和填充.
系统是64位的
缺少了很多函数调用,我只看了我觉得重要的部分,例如:
PE文件是使用readfile 读到物理内存的吗?如果1G的PE文件,我只有512M的物理内存怎么办?
什么是映射?难道映射就不需要读到物理内存中吗?
指令执行 总是要在物理内存中的,难道直接在磁盘中取指令?
怎么按照节表的内容映射的?
各种节在哪里解析的?
PE文件中的各种标志在哪里检查的?
都说内核空间是所有程序共享的,到底怎么共享的?
父进程怎么创建出来的新进程,新进程的线程怎么跑起来的?PE文件的入口点在哪里被执行的?
只是个人的总结,并没有很特别的东西.而且很多函数没有真正的弄明白,也就一个半成品







[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。