win64 驱动内存基本操作

1.基本函数及其原型

PVOID
  ExAllocatePool(
    IN POOL_TYPE  PoolType,
    IN SIZE_T  NumberOfBytes
    );
VOID
  RtlMoveMemory(
    IN VOID UNALIGNED  *Destination,
    IN CONST VOID UNALIGNED  *Source,
    IN SIZE_T  Length
    );
VOID
  RtlFillMemory(
    IN VOID UNALIGNED  *Destination,
    IN SIZE_T  Length,
    IN UCHAR  Fill
    );
VOID
  ExFreePool(
    IN PVOID  P
    );

2.内存类型

PagedPool 和NonPagedPool
前者可以被置换到硬盘中,一般存储数据, 如打开一个大文件, 数据结构.

后者不能被置换到硬盘中,驻留在内存中,一般用来存储代码.

如果执行代码到PagedPool的内存中去了,很有可能导致蓝屏

此外,在内核空间中所有内存都是可读可写可执行,故没有类似用户态下的VirtualProtect改变内存属性的函数

但是并不意味着可以随意执行和改写内存中的代码.要满足2个条件: 一个是关闭内存写保护, 二个是提升IRQL级别.(防止执行出错)

对于关闭内存写保护通过操作cr0寄存器,后者使用KeRaiseIrqlToDpcLevel 和KeLowerIrql 实现

//关闭内存写保护和提升IRQL

KIRQL irql=KeRaiseIrqlToDpcLevel();
UINT64 cr0=__readcr0();
cr0 &= 0xfffffffffffeffff;
__writecr0(cr0);
_disable();

还原:

UINT64 cr0=__readcr0();
cr0 |= 0x10000;
_enable();
__writecr0(cr0);
KeLowerIrql(irql);

未完待续.......

时间: 2024-10-19 04:26:38

win64 驱动内存基本操作的相关文章

Linux设备驱动--内存管理

MMU具有物理地址和虚拟地址转换,内存访问权限保护等功能.这使得Linux操作系统能单独为每个用户进程分配独立的内存空间并且保证用户空间不能访问内核空间的地址,为操作系统虚拟内存管理模块提供硬件基础. Linux内存管理 在Linux操作系统中,进程的4G空间被分成两个部分----用户空间和内核空间.用户空间一般为0~3GB(即PAGE_OFFSET,在X86系统中等于0xC0000000),而剩余的3GB~4GB为内核空间.用户进程在通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟

(翻译)什么是Java的永久代(PermGen)内存泄漏

http://www.codelast.com/?p=7248 转载请注明出处:http://www.codelast.com/ 本文是我对这篇文章的翻译:What is a PermGen leak? 为了便于阅读,我将原文附于此处,翻译穿插在其中.此外,为了防止原链接在未来某一天失效后,文中的图片再也看不到的问题,我将原文中的图片也保存到了本站的服务器上,我不知道原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者表示深深的感谢:感谢你们的分享. WHAT IS A PERM

Windows 64位驱动编程基础

新的开始: 目标是win64驱动编程与rootkit, 外挂技术从32bit到64bit的. Windows漏洞分析与挖掘, php代码审计 Win64编程 32位系统逐渐淘汰,转到64位编程相当重要. 但苦于64位驱动编程网上的资料比较杂乱 这里打算写写关于64位驱动编程的内容,当然大部分内容都是从网上搜集过来的,然后汇集到一起好用来学习. 准备 双机调试, 加载驱动工具,debgview工具, win10重启后禁用驱动签名. 重启后加载驱动 双机调试: 在win7虚拟机关机状态添加一个基于命

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

windbg命令详解

DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll 注释 如果不提供参数,调试器会列出所有进程,以及时间和优先级统计.这和使用!process @#Process 0 作为CommandString值一样. To terminate execution at any point, press CTRL+BREAK (in WinDbg) or CTRL

基于netty轻量的高性能分布式RPC服务框架forest<下篇>

基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等. 架构概述 Forest中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色. Server提供服务,向Registry注册

现代操作系统的组成

1. 适用于实现协调各部件之间速度不协调而有意设定的.ROM(read only memory)RAM(random access memory)RAM和ROM一起组成当前主机上的物理内存地址空间.CPU能够寻址多少内存取决于字长,32位就能够寻址2的32次方个存储单元.操作系统的寻址能力取决于CPU的寻址能力,在64位硬件上装32位的操作系统,程序也是32位的. 2. 计算机.其硬件部分由五大功能部件组成:输入设备,输出设备,运算器,控制器,存储器. 计算机启动,CPU就会跳到ROM中去执行一

iOS的系统层级结构和相关的框架

一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch layer).理解iOS的系统构架,对我们日常开发有很大帮助.其实iOS是基于UNIX的,所以我们完全可以相信这个操作系统,要知道从系统的稳定性上来说它要比其他操作系统的产品好很多. 二, IOS操作系统的层次结构及相关框架 1.Core OS 核心层:包含Accelerate Framew

【iOS开发之旅】iOS系统架构

iOS的系统架构分为四个层次:核心操作系统层(Core OS ).核心服务层(Core Services ).媒体层(Media )和可触摸层(Cocoa Touch ).下面是IOS系统结构图. 一.Core OS(核心操作系统层) 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能,比如:硬件驱动, 内存管理,程序管理,线程管理(POSIX),文件系统,网络(BSD Socket),以