API函数的调用过程(保存现场)
现在我们知道如何进入0环了,有两种方式,通过中断门或者快速调用。上一篇中最后留下了几个问题,其中一个就是关于如何保存那些3环寄存器原先的值(俗称保存现场),从而能够在执行完0环实现的功能后,顺利的返回到3环,今天我们就来探究一下这个问题,首先我们来认识几个结构:Trap_Frame,ETHREAD/ ...
API函数的调用过程(3环进0环)
上一篇中分析了ReadProcessMemory函数的3环部分,它实际上没有做太多工作,只是提供了一个调用0环函数的接口,今天我们接着向下分析,看看函数是如何进入0环的。
_KUSER_SHARED_DATA_KUSER_SHARED_DATA结构
上一篇讲到了NtReadVirtualMemor ...
API函数的调用过程(3环部分)
保护模式暂时告一段落了,接下来开始API函数调用的学习,来一步步分析Windows在调用API的过程中到底做了些什么事,函数到底是如何实现的。
Windows API
Application Programming Interface,简称API函数
Windows有多少个API? 上万个,主 ...
TLB,控制寄存器
保护模式的内容接近尾声,这一篇文章补充一下琐碎的知识点,下面先从TLB开始
TLB设计原因
假设我们通过一个线性地址访问一个物理页,想要去读取物理页上某个字节。但是实际过程中,并非只读了1个字节,我们需要先读取PDE,再读取PTE,最后再读取存放1个字节的物理页,读取的内容远远超过1个字节了。
在2 ...
中断与异常
段和页的主要知识,差不多就告一段落了,这篇文章简单介绍一下中断与异常的相关概念,结合之前学习的IDT表,形成一个整体的框架,在后续文章中,会再详细解析中断和异常的处理过程。
中断什么是中断
中断通常是由CPU外部的输入输出设别(硬件)所触发的,供外部设备通知CPU“有事情需要处理”,因此又叫做中断请 ...
2-9-9-12分页
在前面的文章中主要介绍了10-10-12分页方式,在这种分页方式下,物理地址最多可达4GB。随着硬件发展,4GB的物理地址范围已经无法满足要求,于是Intel设计了一种新的分页方式:2-9-9-12分页(又称PAE)分页。下面就来了解一下这种分页方式是如何运作的吧。
PAE分页为什么是2-9-9-1 ...
逆向分析MmIsAddressValid(10-10-12)
在对页表基址,页目录表基址熟练掌握后,今天来看逆向分析一个函数:MmIsAddressValid。这是一个系统函数,可以在ntoskrnl.exe的导出函数中找到它,也可以在Windbg中输入指令
Code1kd> u MmIsAddressValid
查看。
为什么要分析这个函数呢?因为即使是系 ...
基址小实验(10-10-12)
在学习完页目录表基址,页表基址后,我们知道通过C0300000和C0000000这两个地址,可以访问相应的PDE和PTE,今天就来实践一下。
之前在介绍PDE/PTE属性R/W位时有过一个实验,是对位于常量区的内容进行修改,当时通过Windbg修改了所在PDE/PTE的R/W位。这次实验,我们利用页 ...
页目录表、页表基址
考虑这样一个问题,我们现在可以通过在Windbg里找到线性地址所在的物理页,通过修改物理页的属性,就可以实现一些原本受限的功能。例如将常量区对应的物理页R/W属性修改为1,便可以修改位于常量区的元素。
但是,以上操作都是基于Windbg在双击调试的环境中实现的,那么一旦脱离了调试器,该如何通过代码来 ...
PDE_PTE属性(部分)
上一篇文章中了解了PDE和PTE,这一篇就来了解一下PDE和PTE的属性。
物理页的属性
一上来看这张图,肯定是一脸懵逼的。先从行开始看,第一行是关于CR3寄存器的,这部分留到控制寄存器的章节再分析。接下来三行是不同类型PDE的,最后两行是PTE的。其中PDE和PTE有很多属性是重合的。而物理页的 ...