WIKI
+ -

火哥教程大全目录中级下

2022-01-18 89 0

1.内存管理

1.内核内存管理宏观角度
2.进程内存管理VAD
3.virtualAlloc详解
4.mapped内存
5.物理内存的管理
6.缺页异常

2.异常

1.CPU异常记录
2.软件模拟异常记录
3.内核异常处理流程
4.用户层派发
5.VEH异常/SEH异常
6.SEH_try1
7.expcet_handler3_1
8.异常展开
9.未调试异常

3.调试

1.简单调试器与调试原理
2.调试器与被调试进程如何建立桥梁
3.调试事件的采集
4.软件断点
5.内存断点
6.硬件断点
7.单步步入
8.单步步过
9.实现R3调试器

4.自建调试体系

1.自建概要
2.内存搜索设计
3.DebugActiveProcess重写
4.HOOKKiFastCall/与另外一种思路
5.NtDebugActiveProcess完美运行
6.重写NtCreateObject
7.实现NtWaitForDebugEvent
8.实现NtDebugContinue
9.重写事件采集
10.HOOK替换工具
11.替换调试采集1
12.KiDispatchExceptionHook异常
13.重写读写内存API
14.重写句柄函数
15.重写SET_GET_CONTEXT函数
16.INT3HOOK
17.INT3异常接管调试
18.debugPort替换
19.OD插件编写

5.x64基础

1.x64第一天,寄存器与调用约定
2.x64下段选择子
3.x644级分页
4.x64调用门/如何突破GDT长度的限制
5.x64
系统调用1
6.x64系统调用2
7.x64系统调用3

6.VT

1.VT简介
2.VT多核亲染
3.VT申请内存
4.VTVMCS填充
5.VThandler处理
6.VT框架退出
7.VT无痕SSDTHOOK
8.VT_IDT拦截
9.SIDT
拦截2
10.异常拦截事件注入,转发
11.EPT的概述
结构
12.EPT初始化
13.EPT无痕HOOKR3_R0
14.VT如何做调试—具体内容细节待定

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驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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