AloneMonkey

一、什么是SSDT? SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来。SSDT 并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。通过修改此表的函数地址可以对常用Windows 函数及 API […]

Windows定义了两种访问模式:用户模式和内核模式。应用程序代码运行在用户模式下,操作系统代码运行在内核模式下。 内核模式对应处理器的最高权限级别。在内核模式下执行的代码可以访问所有资源并可以执行所有特权指令。用户模式具有较低的优先级,用户模式只能访问用户空间,且不能执行特权指令。 如果用户代码不慎访问了系统空间的数据或执行了特权指令将会导致保护性异常的发生。但是用户代码可以通过调用系统服务来间 […]

1.I/O定时器 I/O定时器是DDK提供的一种定时器,使用这种定时器时,每间隔1S钟系统会调用一次I/O定时器例程。 I/O定时器可以为间隔N秒做定时,但是如果要实现毫秒级别间隔,微妙级别间隔,就需要用到DPC定时器。 初始化定时器:IoInitializeTimer 开启I/O定时器:IoStartTimer 停止I/O定时器:IoStopTimer 示例代码: 123456789101112 […]

1.DeviceIoControl的同步和异步操作:   IRP同步操作示意图 同步操作时,在DeviceIoControl的内部,会调用WaitForSingleObject函数去等待一个事件,这个事件知道IRP被结束时,才会被触发。DeviceIoControl会暂时进入睡眠状态,直到IRP被结束。而对于异步操作: IRP异步操作示意图 在异步操作的情况下,当DeviceIoCont […]

1.在支持多线程的操作系统下,有些函数会出现不可重入的现象。所谓“可重入”是指函数的执行结果不和执行顺序有关。反之如果执行结果和执行顺序有关,则称这个函数是“不可重入”的。   2.Windows将中断的概念进行了扩展,提出一个中断请求级(IRQL)的概念。其中规定了32个中断请求级别,分别是0~2级别为软件中断,3~31级为硬件中断,其中数字从0~31,优先级别逐次递增。 在内核模式下 […]

1.IRP的处理机制类似Windows应用程序中的 “消息处理”机制,驱动程序接受到不同的IRP后,会进入不同的派遣函数,在派遣函数中IRP得到处理。 IRP(输入输出请求包),它是输入输出相关的重要数据结构,上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求。操作系统将I/O请求转化为相应的IRP数据,不同类型的IRP会根据类型传递到不同的派遣函数内。可以使用IRPTrace来跟踪IRP […]

  1.PC上有三条总线,分别是数据总线、地址总线和控制总线。32位的CPU寻址能力为4GB(2^32)个字节。用户最多可以使用4GB的真实物理内存。PC中会拥有很多设备,其中很多设备提供了自己的设备内存。例如,显卡就会提供自己的显存。这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实会读写设备的内存地址,而不会读写物理内存地址。   2.在CPU中有一个重要的寄 […]

1.C语言调用约定,要求在声明函数时用__cdecl对函数进行修饰. void  __cdecl  Foo(int a,int b); C语言调用会在目标文件中产生一个符号来代表这个函数,此符号的形式为下划线+函数名,且函数体以ret形式返回。 push    11223344h push    12345678h c […]

1.Windows将内核模式运行在CPU的Ring0层,而将用户模式运行在CPU的Ring3层,Ring0层和Ring3层是CPU上的概念,而用户模式和内核模式是操作系统上的概念。 2.windows架构简图 Win32子系统将API函数转化为Native API函数。在Native API接口中,已经没有了子系统的概念,他将这种调用转化为系统服务函数的调用。其中,Native API穿过了用户模 […]