首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EPROCESS DirBase是如何生成"VAD树根“的?

EPROCESS DirBase是一个Windows操作系统中的数据结构,用于存储进程的虚拟地址空间(Virtual Address Space)的根目录。VAD(Virtual Address Descriptor)树是用来管理进程的虚拟地址空间的数据结构,它以树的形式组织,每个节点代表一个连续的虚拟地址范围。

生成"VAD树根"的过程如下:

  1. 当一个进程被创建时,操作系统会为该进程分配一个EPROCESS结构,其中包含了DirBase字段。DirBase是一个指向进程的页表(Page Table)的指针,用于将虚拟地址转换为物理地址。
  2. 在进程的初始化过程中,操作系统会为该进程创建一个根VAD节点,即VAD树的根节点。这个根节点表示整个进程的虚拟地址空间。
  3. 操作系统会根据进程的需要,动态地分配和释放VAD节点,以管理进程的虚拟地址空间。每个VAD节点都包含了一段连续的虚拟地址范围和相应的属性信息,如访问权限、保护属性等。
  4. 当进程需要访问某个虚拟地址时,操作系统会根据DirBase字段找到进程的页表,然后根据虚拟地址在VAD树中查找对应的VAD节点。
  5. 如果找到了对应的VAD节点,操作系统会根据VAD节点的属性信息进行权限检查,然后将虚拟地址转换为物理地址,从而实现对内存的访问。

需要注意的是,以上过程是操作系统内部的实现细节,对于开发工程师来说,了解这些细节可以帮助他们更好地理解和优化程序的内存管理,但在实际开发中并不需要直接操作EPROCESS DirBase或VAD树。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

驱动开发:内核遍历进程VAD结构体

在上一篇文章《驱动开发:内核中实现Dump进程转储》中我们实现了ARK工具转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构全程Virtual Address Descriptor即虚拟地址描述符...,VAD一个AVL自平衡二叉树,树每一个节点代表一段虚拟地址空间。...偏移+0x658紧跟其后还有vadCount计数等。...图片VAD结构如何被添加?通常情况下系统调用VirtualAllocate等申请一段堆内存时,则会在VAD树上增加一个结点_MMVAD结构体,需要说明栈并不受VAD管理。...图片如上在EPROCESS结构中可以找到VAD结构相对偏移+0x658以及进程VAD计数偏移+0x668,我们首先通过!process 0 0指令得到当前所有进程EPROCESS结构,并选中进程。

64710

4.6 Windows驱动开发:内核遍历进程VAD结构体

VAD一个AVL自平衡二叉树,树每一个节点代表一段虚拟地址空间。...VAD一个基于AVL自平衡二叉树数据结构,它用于维护一段连续虚拟地址空间。每个VAD节点都描述了一段连续虚拟地址空间,并包含了该空间属性信息,如该空间是否可读、可写、可执行等等。...EPROCESS 结构体用于表示操作系统中一个进程数据结构,其中包含了许多与该进程相关信息,包括了该进程虚拟地址空间描述符树(VAD 结构树)。...VAD结构如何被添加? 通常情况下系统调用VirtualAllocate等申请一段堆内存时,则会在VAD树上增加一个结点_MMVAD结构体,需要说明栈并不受VAD管理。...但需要注意,栈并不受 VAD管理,因为栈空间分配和管理由系统直接实现

44290

x86分页复习之10-10-12分页

,而我们学习保护模式本质也是学习windows如何保护内存....这个寄存器就是CR3寄存器.而每个进程都有一个物理地址.也称为DirBase 这个DirBase记录每个进程物理地址起始地址. 看下图: ?...我们CR3寄存器记录物理地址,但是这个物理地址不是我们要查看进程内.当然每个进程当使用时候,CR3都会切换为这个进程CR3(物理地址起始位置)这里我们先不说如何切换.直接使用进程中物理地址...这里说下思路: 1.内核中遍历进程,或者ring3传入进程到内核. 2.内核中通过进程Pid找出对应EPROCES结构 (PsLookupProcessByProcessId) 3.通过EPROCESS...结构找到其DirBase偏移.获取其偏移位置DirBase物理地址 4.通过10-10-12分页模式,拆分传入你想查看这个进程任一虚拟地址. 5.通过上述实际操作原理,进行自己读取内存.

99820

随机数如何生成

但是在计算机中, 要想生成一个随机数, 就需要通过一个算法来实现, 那么生成随机数算法如何实现呢? 简单想一下这个事情, 通过确定输入, 确定步骤, 输出不确定值?...当然不是, 所以一直都在说函数生成伪随机数而不是真正随机数. 伪随机数是什么呢?...那么如何生成这个函数呢? 简单看了几种随机函数, 主要了解一下思想, 毕竟咱也不会真正去写一个这样函数. 计算机中伪随机数 平方取中 由伟大冯诺依曼前辈想出....随机序列生成同理, 将上一次输出作为下一次输入. 很明显, 其中 m 决定了序列生成随机数最大值, 「截断性线性同余法」, 「逆同余法」 等变种..... ---- 等等吧, 有很多生成随机数方法, 不过具体怎么生成并实现我并不关心, 我只是想了解一下它大概如何工作, 能够如何生成随机数.

1.5K20

页面如何生成(宏观角度)

首先,需要和厂商业务员(小西 Compositor)进行沟通交流,在小西确认了该批订单量和批次(是否滚动类事件等),决定到底通过主厂(主线程)还是该公司附属厂(GPU线程)进行该批次产品生成...重新计算样式 :对「新生成」或「被修改」元素进行样式信息计算。此过程可能触发整个DOM树整体计算也可以是局部小范围计算过程,取决于被改动元素位置。...将元素样式和DOM元素结合起来,就会生成Render Tree 布局(Layout): 计算每个「可视元素」位置信息(距离视口距离和元素本身大小)。并生成对应Layout Tree。...绘制 (Paint): 该过程包含两个过程,第一个过程绘制操作(painting),该过程用于生成任何被新生成或者改动元素绘制信息(包含图形信息和文本信息);第二个过程栅格化(Rasterization...),用于执行上一个过程生成绘制信息。

72920

用户画像标签如何生成

该统计类标签生成语句如下所示,其中通过SUM函数计算出了每一个user_id在线时长总和。SQL语句中日期范围写死,在实际生产环节,日期范围可以通过变量来替代。...规则标签 规则标签生成依赖现有标签内容,需要在已有标签数据基础上进行综合条件判断,最终生成标签数据,比如“是否男性高粉”依赖性别和粉丝数标签;"Android高端机”依赖手机操作系统和手机价格标签...男性高粉定义粉丝数超过10万男性用户,该标签生成语句如下所示。...UserId,然后借助工程代码自动生成上述SQL语句,通过提交SQL语句到大数据引擎,最终实现了通过用户上传文件生成标签功能。...如何选择算法模型该阶段重点,需要从决策树、SVM、随机森林、Logistic回归、神经网络等模型中选择最适合解决当前问题模型,也可以测试不同算法模型并最终交叉验证选出结果最好一个。

51200

windows驱动开发-进程结构体初探

目录 内核结构 进程结构体 字段 以及简单应用 一丶进程结构体 1.1 简介 1.2 KPROCESS 结构体 1.3 EPROCESS 内核结构 进程结构体 字段 以及简单应用 一丶进程结构体 1.1...而这些其实在操作系统内核中由记录。 这里我简单说下重要字段。...首先 EPROCESS第一个成员 KPROCESS 所以我们先说下 KPROCESS代表啥 1.2 KPROCESS 结构体 请注意这里只说下重要结构,且操作系统内核中结构随着系统改变。...设置之后我们则可以获取每个核心GDT表并且显示出来。 1.3 EPROCESS EPROCESS 记录信息很多。记录东西比KPROCESS 还多。...如果清0 可以让我们不被调试(注意线程一直清零来达到反调试目的) +0x448 ImageFilePointer : Ptr64 _FILE_OBJECT //记录的当前进程

84340

暴力搜索内存进程对象反隐藏进程

基于系统内存搜索进程监测技术利用EPROCESS结构体特征找到EPROCESS地址指针进而输出进程信息,可以有效地对进程进行全面的监测。 那我们应该搜索进程什么结构?...进程PEB(PEB(Process Environment Block)——进程环境块)。主要原因PEB地址高4位相同。.... // UNLOCK_ADDRESS_SPACE (TargetProcess); ExFreePool (Vad); return Status; } 下面这个过程内存示意图...), 高位2GB windows核心模式使用, 内核态地址空间, 即0×80000000 到0xFFFFFFFF, 这里存放着整个内核代码和所有的内核模块, 以及内核所维护数据,包括...非分页缓冲池里分配内存不能交换到虚拟内存上面的, 假如放到分页缓冲池并被交换到磁盘上时可能会发生灾难性后果, 进程EPROCESS结构体就在非分页缓冲 池 中.

1.6K20

全球如何保证区块生成匀速

《1分钟了解挖矿本质》,介绍了什么挖矿,挖矿在最新区块链数据上,生成一个符合条件区块,链入区块链过程。 区块链有个特点:虽然大家都在采矿,但挖到矿速度均匀。...技术上,区块链如何动态调节,以保证匀速生成区块,今天这一分钟要聊内容。 画外音:之前不少朋友说文章太长,1分钟读不完,好吧,我错了,这次真的1分钟。 回顾,区块怎么生成?...可以认为哈希结果完全随机,要得出前48bit必须0x00000000FFFF哈希结果,就如同连续抛了48次硬币,每次都得到我们想要结果,其概率(1/2)^48,所以概率非常小,生成区块难度很高...画外音:区块生成原理详见《1分钟了解挖矿本质》。 区块如何保证生成速度匀速?...20分钟才生成了一个区块,说明生成太慢了,需要加速一倍 如何控制加速和变慢呢?

1.1K90

5.9 Windows驱动开发:内核InlineHook挂钩技术

在上一章《内核LDE64引擎计算汇编长度》中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中InlineHook函数挂钩其实与应用层一致,...都是使用劫持执行流并跳转到我们自己函数上来做处理,唯一不同内核Hook只针对内核API函数,但由于其身处在最底层所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩效果应用层无法比拟...内核挂钩原理一种劫持系统函数调用技术,用于在运行时对系统函数进行修改或者监控。...3.保存原始函数前15个字节指令,因为这些指令通常被认为函数前导码或是修饰码。...而如果需要恢复挂钩状态,则只需要还原提前保存机器码即可,恢复内核挂钩原理将先前保存原始函数前15个字节指令写回到原始函数地址上,从而还原原始函数调用。

37410

windows10内核态提权方法汇总

// eprocess 偏移为 0x360 位置存储token ,这个偏移与其他版本windows有区别 0: kd> dq ffffa98848069080 + 0x360 L1 ffffa988...写shellcode 按照上面的思路,首先需要获取到进程EPROCESS结构体地址,在内核中可以获取到EPROCESS结构函数PsGetCurrentProcess 我们反汇编这个函数代码:...在这里其实有一个疑问,我们获取其实是_KPROCESS地址,但需要_EPROCESS地址,这怎么处理呢?...其实_KPROCESS 和_EPROCESS 指向同一个结构,这个从_EPROCESS定义中就可以看出来,_EPROCESS包含了_KPROCESS结构体,他们起始地址一样。...现在我们可以获取到cmd.exe进程id,接下里需要获取到cmd.exe进程 _EPROCESS,这里需要另外一个知识,windows系统中所有进程_KPROCESS使用一个双向链表进行管理

92730

单细胞计数矩阵如何生成?(二)

导读 本文将接上期【保姆教程:什么单细胞?(一)】后,介绍scRNA-seq表达矩阵如何生成。后续实战分析内容,请关注下方公众号: 1....2. 3’-end 对于 scRNA-seq 数据分析,了解每个读数中存在哪些信息以及如何在分析中使用它是有帮助。...一般工作流程如下所示: 单细胞工作流程 工作流程步骤: 计数矩阵生成:formating reads, demultiplexing samples, mapping and quantification...测序后,要么将原始测序数据输出为 BCL 或 FASTQ 格式,要么生成计数矩阵。如果读取 BCL 格式,那么需要转换为 FASTQ 格式。bcl2fastq 工具可以轻松执行此转换。...对于许多 scRNA-seq 方法,从原始测序数据生成计数矩阵经历步骤类似。 alevin[1] 一个命令行工具,用于估计 scRNA-seq 数据表达,其中转录物 3' 末端被测序。

81920

迷雾退散:揭秘创建进程时ebx为什么指向peb答案

一、背景 这篇文章起因,笔者之前在做样本分析时候,经常会遇到需要调试傀儡进程情况,而其中有一种情景将启动白进程PE文件整个掏空并用黑进程进行替换。...二、具体分析 先抛出结论,这里eax与ebx属于线程上下文信息,在一个PE文件开始被运行过程中,主线程上下文初始化过程在进程已经创建完成,而主线程还没创建阶段发生,下面具体更详细分析: 首先我们需要对进程创建有一个大概认识...判断参数 JobMemberLevel是否为0, 如果不为0,接着判断父进程EPROCESS->Job是否为0,如果JobMemberLevel不为为0且EPROCESS->Job为0,则返回无效参数错误后退出该函数...在MiCreatePebOrTeb函数中首先会通过ExAllocatePoolWithTag来申请0x34大小空间,接着通过MiFindEmptyAddressRangeDownTree函数在VAD树中查找一块未被使用地址空间范围...,并返回该范围起始地址,最后通过MiInsertVad函数将申请地址空间插入到VAD树中。

71220

驱动开发:内核层InlineHook挂钩函数

在上一章《驱动开发:内核LDE64引擎计算汇编长度》中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中InlineHook函数挂钩其实与应用层一致...,都是使用劫持执行流并跳转到我们自己函数上来做处理,唯一不同内核Hook只针对内核API函数,但由于其身处在最底层所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩效果应用层无法比拟...原理很简单,基本上InlineHook类代码都是一个样子,如下一段完整挂钩PsLookupProcessByProcessId驱动程序,当程序被加载时则默认会保护lyshark.exe进程,使其无法被用户使用任务管理器结束掉...;st = ((PSLOOKUPPROCESSBYPROCESSID)original_address)(ProcessId, Process);if (NT_SUCCESS(st)){// 判断是否需要保护进程...process 0 0 lyshark.exePROCESS ffff9a0a44ec4080SessionId: 1 Cid: 05b8 Peb: 0034d000 ParentCid: 13f0DirBase

63230

Win32之内存管理之虚拟内存跟物理内存

假设A进程 地址123 存储了10  那么B进程123地址 存储了20 那么它们两个互不影响. 但是值真实存在. 而值存储在物理内存.如下图所示. ? 根据上图所示....所以说虚拟内存.当用时候才会存储在物理内存 二丶物理内存管理.   物理内存使用4K方式来管理.也就是4096个字节.也成为一页.所以以后我们使用API时候....Process 遍历出我们程序Exe地址. 2.使用   dt EPROCESS  遍历出地址  得到这个应用程序EPROCESS结构. 3....得到EPROCESS + 11c (也就是成员)VadRoot偏移. 使用!VAD 地址. (EPROCESS + 地址)  可以得出这个EXE使用内存物理页. 如果不会使用也无所谓....这个图说明了 我们线性地址10开始 - 10结束. 因为物理页4K 存储.所以10 代表就是1000  后面大小1000 所以下一个位置20开始也就是 2000线性地址.

1.3K40

一文读懂 | coredump文件如何生成

有些 BUG 业务逻辑上错误导致,一般不会导致程序崩溃,例如:原本要将两个数相加,但不小心把这两个数相减,而导致结果出错。...如果没有生成 coredump 文件的话,一般受到资源限制,先使用命令 ulimit -c unlimited 设置资源不受限制。 coredump 文件点后面的数字进程 PID。...我们可以通过下图来展示内核怎么生成 coredump 文件: ? 进程从内核态返回到用户态地方有很多,如 从系统调用返回、从硬中断处理程序返回 和 从进程调度程序返回 等。...上图主要通过 从进程调度程序返回 作为示例,来展示内核怎么生成 coredump 文件。 下面我们来分析一下 coredump 文件生成过程步骤: 1....get_signal_to_deliver 内核函数主要工作从进程信号队列中获取一个信号,然后根据信号类型来进行不同操作。

7.8K41

网站页面的相关产品链接如何生成

无论单一入口还是所入口结构,对最终产品页面来说都可能有一个缺陷,那就是太过规则,有时候会造成某个部分产品页面都不能被收录。单一入口结构更明显。...在产品页面生成相关产品链接,可以在一定程度上解决这个问题。这里所说相关产品链接,不是写文章或发布产品信息时人工在正文中加进去链接,而是通过某种机制自动生成、连向其他产品页面的链接。...常见相关产品链接生成方法包括: 1、购买这个产品用户还购买了哪些其他产品 这种链接通常不会是同时上架、产品序号相连页面,用户购买过产品之间不一定有什么联系,往往会横跨不同分类、品牌。...2、同一个品牌或生产商其他产品 同一个生产商或品牌,常婵有不同分类下产品,最终产品页面列出同一个生产商提供不同分类产品链接,也为更多产品提供了较为随机入口。...3、由标签生成相似产品 TAG标签由站长人工填写,或程度自动提取关键词,得到标签与分类名称并不同。通过标签聚合相关产品页具有比较大随机性。

84230
领券