windows基础
windows内核的学习之路
风是我的偶像
有代码就有真相。
展开
-
几种跳转指令和对应的机器码
0xE8 CALL 后面的四个字节是地址0xE9 JMP 后面的四个字节是偏移0xEB JMP 后面的二个字节是偏移0xFF15 CALL 后面的四个字节是存放地址的地址0xFF25 JMP 后面的四个字节是存放地址的地址0x68 PUSH 后面的四个字节入栈0x69 PUSH 后面的1个字节入栈...原创 2020-12-28 20:21:39 · 811 阅读 · 0 评论 -
堆简介
一、堆工作的原理 Windows的堆时内存中一块神秘的地方、一个耐人寻味的地方,也是一个“乱糟糟”的地方。 栈和堆的区别:经过对栈溢出利用的学习,我们应该明白栈空间是在程序设计时已经规定好怎么使用,使用多少内存空间的。典型的栈变量包括函数内部的普通变量、数组等。栈变量在使用时不需要额外申请空间,系统栈会根据函数中的变量声明自动在函数栈帧中给其预留空间。栈空间由系统...原创 2020-03-24 11:59:59 · 683 阅读 · 0 评论 -
内核理论基础 || 内核重要数据结构
一、内核对象 在Windows内核中有一种很重要的数据结构管理机制,那就是内核对象。应用层的进程、线程、文件、驱动模块、事件、信号量等对象或者打开的句柄在内核中都有与之对应的内核对象。 如图7.10所示,一个Windows内核对象可以分为对象头和对象体两部分。在对象头中至少由1个OBJECT_HEADER和对象额外信息。对象体紧接着对象头中的OBJECT_HEADER...原创 2020-03-13 16:30:18 · 496 阅读 · 0 评论 -
内核理论基础 || 内核驱动模块
Windows内核驱动模块是内核的重要组成部分,既有微软自己开发的内核驱动,也有第三方开发的内核驱动;既有硬件的驱动,也有软件的驱动。内核驱动在磁盘上是一个扩展名为.sys的文件,遵守PE格式规范,能被系统加载运行。 一个简单的驱动模块 “Hello world” 的代码如下。 #include<ntddk.h>/*驱动卸载函数,在驱动卸...原创 2020-03-12 17:01:47 · 422 阅读 · 0 评论 -
内核理论基础 || 内存空间布局
先来了解一下系统的内存内核层与应用层的布局。以x86为例,它支持32位寻址,因此支持最大GB的虚拟内存空间(也可以通过PAE技术增加到36位寻址,将寻址空间扩大到64GB)。如图7.3所示,在4GB的虚拟地址空间中,Windows系统的内存空间及非法区域。Windows内存的逻辑地址分为两部分,即段选择符和偏移地址。CPU在进行地址翻译的时候,先通过分段基质计算出一个线性地址,再通过...原创 2020-03-11 14:20:02 · 330 阅读 · 0 评论 -
内核理论基础 || Windows R3与R0通信
Windows 分为应用层与内核层。它们之间是如何进行通信的呢? 内核主要由各种驱动(在磁盘上是.sys文件)组成,这些驱动有的是windows系统自带的(例如ntfs.sys、tcpip.sys、win32k.sys),有的是由第三方软件厂商提供的。驱动加载之后,会生成对应的设备对象,并可以选择向R3提供一个可供访问和打开的符号链接。常见的盘符C、D、E等其实都是文件系统驱动创建的...原创 2020-03-10 17:49:16 · 2294 阅读 · 0 评论