首页
社区
课程
招聘
[分享]从NT5源码学习进程创建和PE加载过程
发表于: 2025-6-19 00:59 704

[分享]从NT5源码学习进程创建和PE加载过程

2025-6-19 00:59
704

涉及到的知识点:

  1. 文件的映射,section对象,或者叫filemap对象的组织形式

  2. VAD,原型PTE,PTE

  3. VAD和PE文件中节区属性的关系

  4. PEB->LDR,已加载模块链表的记录

  5. 构造内核栈空间和用户栈空间

  6. 线程切换

  7. 内核apc的执行

  8. 用户apc的执行

  9. 程序的入口点是怎么被执行的

  10. 等等等......

每个点都可以延展出无数点的知识,一开始我只想学习一下PE文件的组成,但是发现看完就忘了,逆向win10的

CreateProcessInternalW  函数又非常吃力,已经添加了不少新特性,可以学习的书籍还停留在wrk或者reactos中,并且书上这些内容被划分在不同的章节.有些只是一笔带过.,本质上这篇文章是个人的总结,希望可以给其他在学习的提供一点点帮助.

  • 默认调用NT开头的函数它会进入内核,它就是内核函数(因为我也不知道某个文件到底生成的是哪个DLL)

  • 并没有调试跟踪,可能会存在某些跳转错误.尤其是在内核空间栈的创建和填充 ,,以及用户空间栈的创建和填充.  

  • 系统是64位的

  • 缺少了很多函数调用,我只看了我觉得重要的部分,例如:

    • PE文件是使用readfile 读到物理内存的吗?如果1G的PE文件,我只有512M的物理内存怎么办?

    • 什么是映射?难道映射就不需要读到物理内存中吗?

    • 指令执行 总是要在物理内存中的,难道直接在磁盘中取指令?

    • 怎么按照节表的内容映射的?

    • 各种节在哪里解析的?

    • PE文件中的各种标志在哪里检查的?

    • 都说内核空间是所有程序共享的,到底怎么共享的?

    • 父进程怎么创建出来的新进程,新进程的线程怎么跑起来的?PE文件的入口点在哪里被执行的?

只是个人的总结,并没有很特别的东西.而且很多函数没有真正的弄明白,也就一个半成品


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-6-19 09:47 被mb_osgpzxge编辑 ,原因: 可能不方便看
收藏
免费 7
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回