WIKI
+ -

火哥教程大全目录中级上

2022-01-18 803 0
原文转自:http://quick.ntoskr.com/up.html

1.保护模式

  • 1.实模式到保护模式的意义?
  • 2.一句汇编代码执行的本质
  • 3.究竟什么是段寄存器
  • 4.段描述符与段选择子的关系
  • 5.段描述符属性_P位_G位
  • 6.段描述符属性_S位_TYPE域
  • 7.段描述符属性_DB位
  • 8.段权限检查
  • 9.代码跨段跳转流程
  • 10.长调用与短调用
  • 11.调用门
  • 12.中断门
  • 13.陷阱门
  • 14.任务段
  • 15.任务门完成以后,测试阶段1,请把代码运行在R1下
  • 16.保护模式就只有段吗?走进分页的大门
  • 17 . PDE_PTE
  • 18.PDE_PTE属性(P_RW)
  • 19.PDE_PTE属性(US_PS_A_D)
  • 20.window又是如何设计页的?页目录表基址
  • 21.页表基址
  • 22.PAE下的2-9-9-12分页
  • 23.从缓存到TLB
  • 24 PWT/PCD的作用
  • 25.控制寄存器
  • 26.CPU的中断与异常
  • 27.测试阶段2,通过分页知识重写读写内存函数

2.驱动

1.我的第一个驱动hello world
2.如何调试驱动程序
3.内核编程的规范
4.遍历模块与隐藏模块
5.0环与3环通信
6.写COPY原理?

  1. Inline Hook
    8.测试阶段3,利用段分知识和驱动基础做全局API监控程序

3.系统调用

1.R3调用API是如何进入内核的
2.系统如何查找SSDT表来调用指定的API
3.调用完成后如何返回到R3
4.SSDTHOOK

4.进程和线程

1.进程的本质是什么?
2.遍历进程的方式
3.CPU控制块结构 KPCR
4.线程的本质是什么?
5.等待链表调度链表
6.模拟线程切换
7.Windows线程切换
主动切换

  1. Windows线程切换时钟中断切换
    9.Windows线程切换
    时间片管理
    10.Windows线程切换TSS
    11.Windows线程切换_FS
    12.Windows线程切换
    线程优先级
    13.进程挂靠的本质
    14.测试阶段,跨进程读写内存练习

5.句柄的原理

1.句柄的意义
2.私有句柄表
3.全局句柄表
4.阶段练习,通过句柄表反调试

.内核同步

1.锁的本质
2.临界区
3.自旋锁
4.线程等待与唤醒
5.WaitForSingleObject函数分析
6.事件
7.信号量
8.互斥体
9.应该怎么高并发HOOK

7.APC

1.APC的本质
2.备用Apc队列
3.APC挂入过程
4.内核APC执行过程
5.用户APC执行过程
6.APC的实战

8.回调机制

1.进程的句柄的回调
2.线程句柄的回调
3.操作系统提供的回调API
4.保护最爱HOOK回调函数
5.(新)绕过句柄回调

9.消息传递

1.消息队列在哪
2.窗口与线程
3.消息的接收

  1. 消息的分发
    5.消息回调
    6.(新)如何保护窗口,防止被扫描窗口句柄

毕业作业

无痕注入器

0 篇笔记 写笔记

Windows应用与内核内存共享
我们知道,进程之间如果要进行数据,是可以通过共享内存来实现的。其原理就是将同一片物理内存,分别进行不同的线性映射,这样就可以得到2个线性地址,而这两个线地址址对应的空间就是物理内存的空间。这样,如果我们在各自的进程分别读写内存,另一个进程中对应的线性地址空间的数据同时也会变化。原理如下图:相同的......
内核事件等待KeWaitForSingleObject超时处理和IPR的完成例程
Windows内核中通过KeWaitForSingleObject等待事件完成,并且设置IPR的完成例程NTSTATUSIrpCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, ......
Windows内核线程睡眠
许多读者一定使用过Sleep函数。这能使程序停下一段时间。许多需要连续、长期执行,但是又不希望占太多CPU使用率的任务,可以在中间加入睡眠。这样能使CPU使用率大大降低。即使睡眠的时间非常短(几十个毫秒)。在驱动中也可以睡眠。使用到的内核函数的原型如下: NTSTATUS Ke......
Windows内核中获得当前时间
接下来的一个需求是得到当前的可以供人类理解的时间。包括年、月、日、时、分、秒这些要素。在驱动中不能使用诸如CTime之类的MFC类。不过与之对应的有TIME_FIELDS,这个结构中含有对应的时间要素。KeQuerySystemTime()得到当前时间。但是得到的并不是当地时间,而是一个格林威治时......
Windows内核驱动创建线程
有时候需要使用线程来完成一个或者一组任务。这些任务可能耗时过长,而开发者又不想让当前系统停止下来等待。在驱动中停止等待很容易使整个系统陷入“停顿”,最后可能只能重启电脑。但一个单独的线程长期等待,还不至于对系统造成致命的影响。另一些任务是希望长期、不断的执行,比如不断写入日志。为此启动一个特殊的线程......
Windows内核驱动中使用new和delete
在Windows驱动中如果要分配内存,我们使用的ExAllocatePoolWithTag,ExAllocatePool,而释放内存时使用的是ExAllocatePoolWithTag和ExFreePool函数。我们知道,在内核中其实不是不能用C++,而是使用时有很大的限制。如果稍不留神,就会掉进......
Windows内核内存申请和释放
内存泄漏是C语言中一个臭名昭著的问题。但是作为内核开发者,读者将有必要自己来面对它。在传统的C语言中,分配内存常常使用的函数是malloc。这个函数的使用非常简单,传入长度参数就得到内存空间。在驱动中使用内存分配,这个函数不再有效。驱动中分配内存,最常用的是调用ExAllocatePoolWithT......
dbgview内核打印
使用Windbg调试或使用DbgView进行内核打印时,经常会遇到内核的打印函数DbgPrint(KdPrint)打印的输出日志不能被显示,这是因为win7及以上的操作系统DbgPrint(KdPrint)默认是不输出的,所以需要修改注册表项,并重启方可。Windows Registry Edi......
Windows NT内核函数大全
函数名称说明NtLoadDriver服务控制管理器加载设备驱动NtUnloadDriver服务控制管理器支持卸载指定的驱动程序NtRegisterNewDevice加载新驱动文件NtQueryIntervalProfile返回数据NtSetInter......
Windows内核中获得当前TickCount
在编程中,获得当前的系统日期和时间,或者是获得一个从启动开始的毫秒数,是很常见的需求。获得系统日期和时间往往是为了写日志。获得启动毫秒数很适合用来做一个随机数的种子。有时也使用时间相关的函数来寻找程序的性能瓶颈。熟悉Win32应用程序开发的读者会知道有一个函数GetTickCount(),这个函数......
Windows内核打开和关闭文件
文件的打开下面的函数用于打开一个文件: NTSTATUS ZwCreateFile( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, ......
Windows内核回调函数
CmRegisterCallbackCmRegisterCallbackEx 注册表回调ExRegisterCallbackObRegisterCallbacksPsSetCreateProcessNotifyRoutinePsSetCreateProcessNotifyRoutineEx......
Windows内核事件Event
一些读者可能熟悉“事件驱动”编程技术。但是这里的“事件”与之不同。内核中的事件是一个数据结构。这个结构的指针可以当作一个参数传入一个等待函数中。如果这个事件不被“设置”,则这个等待函数不会返回,这个线程被阻塞。如果这个事件被“设置”,则等待结束,可以继续下去。这常常用于多个线程之间的同步。如果一个......
Windows内核驱动定时器
使用过Windows应用程序编程的读者的读者一定对SetTimer()映像尤深。当需要定时执行任务的时候,SetTimer()变得非常重要。这个功能在驱动开发中可以通过一些不同的替代方法来实现。比较经典的对应是KeSetTimer(),这个函数的原型如下:BOOLEAN KeSetTimer......
Windows内核中GetTickCount64
在应用层可以通过GetTickCount和GetTickCount64获取当前系统的滴答数,在Windows内核中没有直接可以使用的函数。所我以我们需要自行封装。Windows内核是100纳秒为单位的,所以可以自行封装以毫秒为单位的函数。//1msLONGLONG pnponGetTickCo......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!