首页 > 其他分享 >3.1.1 内核对用户空间的管理2,搜索目标地址所在的节点

3.1.1 内核对用户空间的管理2,搜索目标地址所在的节点

时间:2024-10-19 19:45:43浏览次数:9  
标签:Node 3.1 地址 MmLocateMemoryAreaByAddress 内核 Address 节点 AddressSpace

3.1.1 内核对用户空间的管理2,搜索目标地址所在的节点

3.1.1 内核对用户空间的管理2,搜索目标地址所在的节点

文章目录


MmLocateMemoryAreaByAddress()函数的实现

内核函数 MmLocateMemoryAreaByAddress()所实现的就是 AVL树的搜索算法。对于大小为N的 AVL树,在O(ogN)的时间中,如果代表着目标进程用户空间的 AVL,树中存在着包含目标地址的节点,就可以找到并返回这个节点,如果不存在就返回NULL。
源码截图
在这里插入图片描述

源代码
//搜索目标地址所在的节点

PMEMORY_AREA STDCALL
MmLocateMemoryAreaByAddress(
   PMADDRESS_SPACE AddressSpace,
   PVOID Address)
{
   PMEMORY_AREA Node = AddressSpace->MemoryAreaRoot;

   DPRINT("MmLocateMemoryAreaByAddress(AddressSpace %p, Address %p)\n",
           AddressSpace, Address);

   MmVerifyMemoryAreas(AddressSpace);//宏定义,定义为空
//循环检索   while (Node != NULL)
   {
      if (Address < Node->StartingAddress)
         Node = Node->LeftChild;
      else if (Address >= Node->EndingAddress)
         Node = Node->RightChild;
      else
      {
         DPRINT("MmLocateMemoryAreaByAddress(%p): %p [%p - %p]\n",
                Address, Node, Node->StartingAddress, Node->EndingAddress);
         return Node;
      }
   }

   DPRINT("MmLocateMemoryAreaByAddress(%p): 0\n", Address);
   return NULL;
}

//判断这棵AVL树的每个结点的地址是否合法

MmVerifyMemoryAreas(AddressSpace);//宏定义,定义为空 

学过数据结构这门课程的读者都能理解这段程序,这里就不作解释了

标签:Node,3.1,地址,MmLocateMemoryAreaByAddress,内核,Address,节点,AddressSpace
From: https://blog.csdn.net/zhyjhacker/article/details/143083035

相关文章

  • webAPI中的排他思想、自定义属性操作、节点操作(配大量案例练习)
    一、排他操作1.排他思想如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环的排他思想算法:1.所有的元素全部清除样式2.给当前的元素设置样式注意顺序能不能颠倒,首先清除全部样式,再设置自己当前的样式<!DOCTYPEhtml><htmllang="en"><head><meta......
  • webAPI中的节点操作、高级事件
    一、节点操作1.删除节点node.removeChild();方法从node节点中删除一个子节点,返回删除的节点<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-s......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    1.leetcode24两两交换链表中的节点题目链接:24.两两交换链表中的节点-力扣(LeetCode)文章链接:代码随想录(programmercarl.com)视频链接:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili1.1代码这个代码是用循环的思路来进行判断的,写的过程挺......
  • 力扣608.树节点练习
    力扣608.树节点一、题目总结如果你代码出错,可能是以下问题1、notin使用出现问题:notin后面接select子查询的结果中不能出现空值,需要像我这样whereidnotin(selectifnull(p_id,‘ad’)asidfromTreetr2),使用ifnull将空值转化为其他值,才能正常进行判断,但是如......
  • Linux内核调优参数配置
    在Linux中,内核调优涉及到对系统内核的各种参数进行优化,以适应不同的工作负载和场景。这些参数主要存储在两个地方:一个是运行时动态可调的/proc/sys目录下的文件,另一个是持久化的配置文件/etc/sysctl.conf。1.内核调优配置文件/etc/sysctl.conf:这是最常用的内核参数配置文件,用......
  • 代码随想录算法训练营day19| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插
    学习资料:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html****学习记录:235.二叉搜索树的最近公共祖先(加一个函数traversal)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(self,x):#self.val=x......
  • ComfyUI 节点、插件的基本指南(附整合包)
    ComfyUI是一个多功能的StableDiffusion图像/视频生成工具,能够让开发者设计并实现自定义节点,扩展功能。如果你有特定的任务想实现并需要创建一个自定义节点,本指南会带你一步步完成ComfyUI自定义节点的创建过程。开始前的准备在开始创建自定义节点之前,确保你有必要的工......
  • 【Kernel】基于 QEMU 的 Linux 内核编译和安装
    目录安装虚拟机系统共享目录编译内核卸载内核参考资料本文主要记录个人做存储系统研究时,在QEMU环境下编译和安装Linux内核的过程安装虚拟机系统之前在利用RocksDB+ZenFS测试ZNS的环境搭建和使用给出过借助VNC进行图形化安装的步骤,这里再给出仅通过终端进行安装的......
  • Linux内核中__iomem的解析
    内核代码中充斥着大量的__iomem修饰的void类型的指针,像下面这样:void__iomem*devm_ioremap_resource(structdevice*dev, conststructresource*res){ resource_size_tsize; void__iomem*dest_ptr; char*pretty_name; BUG_ON(!dev); if(!res||resourc......
  • 【哈工大_操作系统实验】Lab5 基于内核栈切换的进程切换
    本节将更新哈工大《操作系统》课程第五个Lab实验基于内核栈切换的进程切换。按照实验书要求,介绍了非常详细的实验操作流程,并提供了超级无敌详细的代码注释。Linux0.11采用TSS和一条指令完成任务切换,虽然简单但执行时间长。堆栈实现任务切换更快,且可以使用指令流水......