linux物理内存地址与iomem,一种Linux系统物理内存镜像文件分析方法_4

模块信息,如图7所示,给出了本发明的实施例中 模块结构关系图,modules变量指向某一个已加载模块结构体module地址,所有已加载模 块其module形成一个双向链表,如图7所示,据此可以获取到所有已加载模块。

[0099] 5-3) ·获取网络信息及系统信息;根据 rt_hash_mask、rt_hash_table、net_ namespace_l i st变量值获取网络配置及链接信息。

[0100] 根据boot_cpu_data变量可获取目标计算机CPU信息;根据log_buf变量可以获 取目标计算机系统日志和调试信息;根据iomemjesource变量可以获取系统物理内存分 段信息;根据file_systems变量可以获取系统文件系统信息。

[0101] 6) ·获取模块导出符号表;在module结构体中含有Elf_Sym*symtab、unsigned int num_symtab、char*strtab等变量(如图13所不),num_symtab指向模块导出符号个 数,symtab指向所有符号地址,strtab指向所有符号名字。根据这三个变量获取模块导出 符号,这些符号在进行内存分析时起着重要作用,如利用kvm模块导出vm_list可以获取当 前物理机中运行的虚拟机信息。

[0102] 虚拟地址转化为物理地址的方法叙述如下:

[0103] swapper_pg_dir所对应的页目录的物理地址记为CR3,待转化的虚拟地址的21至 29 位记为 Directory、30 至 31 位记为 Directory Pointer、30 至 38 位记为 Directory Ptr、 39至47位记为PML4、48至63位记为Sing Extended,小页模式下0至11位记为Offset、 12至20位记为Table,大页模式下0至20位记为Offset ;

[0104] 如图8所示,给出了本发明中64位小页模式下地址转换示意图,如果操作系统位 数是64位操作系统小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51 位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的 内容记为Al ;取Al的12位至51位、低12位均取为0,将其与Directory Ptr乘以8之后 的数值相加,获取此地址在物理内存镜像对应的内容记为A2 ;取A2的12位至51位、低12 位均取为〇,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的 内容记为A3 ;取A3的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相 加,获取此地址在物理内存镜像对应的内容记为A4 ;取A4的12位至51位、低12位均取为 〇,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;

[0105] 如图9所示,给出了本发明中64位大页模式下地址转换示意图,如果操作系统位 数是64位操作系统大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51 位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的 内容记为Bl ;取Bl的12位至51位、低12位均取为0,将其与Directory Ptr乘以8之后 的数值相加,获取此地址在物理内存镜像对应的内容记为B2 ;取B2的12位至51位、低12 位均取为〇,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的 内容记为B3 ;取B3的21位至51位、低21位均取为0,将其与Offset相加,得到的数据即 为的虚拟地址转化为物理地址之后的数值;

[0106] 如图10所示,给出了本发明中32位开启PAE小页模式地址转换示意图,如果操作 系统位数是32位操作系统开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存 器的12位至44位、低5位均取为0,将其与Directory Pointer乘以8后的数值相加,获取 此地址在物理内存镜像对应的内容记为Cl ;取Cl的12位至51位、低12位均取为0,将其 与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C2 ;取 C2的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在 物理内存镜像对应的内容记为C3 ;取C3的12位至35位、低12位均取为0,将其与Offset 相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;

[0107] 如图11所示,给出了本发明中32位开启PAE下大页模式地址转换示意图,如果操 作系统位数是32位操作系统开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄 存器的12位至44位、低5位均取为0,将其与Directory Pointer乘以8后的数值相加,获 取此地址在物理内存镜像对应的内容记为Dl ;取Dl的12位至51位、低12位均取为0,将 其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为D2 ; 取D2的21位至35位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址 转化为物理地址之后的数值;

[0108] 在32位操作系统不开启PAE模式下:待转化的虚拟地址小页模式下的0至11位 记为Offset、12至21位记为Table、22至31位记为Directory ;大页模式下:0至21位记 为 0ffset、22 至 31 位记为 Directory ;

[0109] 如图12所示,给出了本发明中32位未开启PAE下小页模式地址转换示意图,如 果操作系统位数是32位操作系统不开启PAE小页模式,则通过以下方法进行地址转换:取 CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取 此地址在物理内存镜像对应的内容记为El ;取El的12位至51位、低12位均取为0,将其 与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为E2 ;取E2的 12位至31位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物 理地址之后的数值;

[0110] 如图13所示,给出了图13为本发明中32位未开启PAE下大页模式地址转换示意 图,如果操作系统位数是32位操作系统不开启PAE大页模式,则通过以下方法进行地址转 换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相 加,获取此地址在物理内存镜像对应的内容记为Fl ;取Fl的21位至30位、低22位均取为 〇,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值。

[0111] 本发明针对目前Linux系统物理内存分析技术存在的只能分析已知操作系统版 本的物理内存镜像文件、需要附加内核符号表文件、使用起来操作步骤较为复杂等问题,给 出了一种新的针对Linux系统物理内存分析方法,与现有技术相比,本发明所提出的方法 有以下优点:

[0112] 1、本发明所提出的方法能够自动判断物理内存镜像文件对应的操作系统版本,无 需预知目标计算机的操作系统版本;同时获取页目录地址,实现虚拟地址到物理地址的转 换。

[0113] 2、本发明提出了一种从物理内存镜像文件中进行符号表提取的新方法,根据 kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_token_table 以及 kallsyms_token_index这几个内核变量从物理内存中提取/proc/kallsyms中的符号表, 同一内核版本,这几个变量值是相同的,根据分析出的版本从内核变量数据库中获取上述 内核变量的值。对于内核变量数据库中不存在的值,对内核函数update」ter在内存中的 二进制码进行反编译获取上述内核变量的值。

[0114] 3、本发明除了获取内核符号表外,获取各个模块导出的符号表,根据这些符号表 中的某些变量或者函数将获取目标计算机的重要信息。

[0115] 4、据此开发的系统操作简单,无需指定物理内存镜像文件对应的操作系统版本及 进行相关系统配置即可进行。

【主权项】

1. 一种Linux系统物理内存镜像文件分析方法,其特征在于,通过以下步骤来实现: a) .操作系统版本判断以及页目录地址的获取,在对Linux系统初始化时,通过调用初 始化函数crash_save_vmcoreinfo_int函数,将vmcoreinfo_data的内容进行初始化;从获 取的vmcoreinfo_data数据中提取操作系统版本信息以及内核符号_stext、swapper_pg_ dir的值; 如果操作系统版本信息中含有i686字符或者获取到的swapper_pg_dir的值为八位16 进制表示的地址,则判断出该Linux系统为32位操作系统;如果操作系统版本信息中含有 x86_64字符或者获取到的swapper_pg_dir的值为十六位16进制表示的地址,则此系统为 64位操作系统; 获取到的swapper_pg_dir的值为页目录虚拟地址,如果操作系统为32位,则 将其减去OxcOOOOOOO即为页目录的物理地址;如果操作系统为64位,则将其减去 0xffffffff8000000,即可获取页目录的物理地址; b) .地址转换,32位操作系统地址分为开启PAE模式和未开启PAE模式,这两种模式下 又分为大页模式和小页模式,利用页目录的物理地址,便可实现虚拟地址向物理地址的地 址转换;64位操作系统地址分为小页模式和大页模式,利用步骤a)中获取的页目录的物理 地址,亦可实现虚拟地址向物理地址的转换; c) .数据库中已存系统内核符号表的恢复,判断在物理内存镜像文件的内核变量 数据库中是否能查询到操作系统版本信息,如果能查询到操作系统的版本信息,则获 取 kallsyms_addresses、 kallsyms_num_syms、 kallsyms_names、 kallsyms_markers、 kallsyms_token_table 以及 kallsyms_token_index 内核变量的值,再通过步骤 c_l)至 c-3)恢复系统的内核符号表;如果不能查询到操作系统的版本信息,则执行步骤d); c-1).获取内核符号的数目,将获取的kallsyms_num_syms变量虚拟地址利用步骤b) 中的地址转换方法,转换为对应的物理地址,并获取此物理地址对应的物理内存信息为/ proc/kalIsyms中系统内核符号的个数; c-2).获取内核符号的类型和名称,kallsyms_names对应经过排序的内核符号的类型 和名称组成的字符串,首先将kallsyms_names变量虚拟地址按照步骤b)中的方法转化为 物理地址,利用此物理地址在内存镜像文件中获取字符串,每个字符串的格式为字符串长 度和压缩串;然后再利用内核变量kallsyms_token_table和kallsyms_token_index将字 符串解析出来,以获取内核符号的类型、名称; c-3).获取内核符号的虚拟地址,kallsyms_addresses变量对应经过排序的所有内核 符号的虚拟地址,对于经步骤c-2)获取的内核符号,按照其在kallsyms_names变量中的 次序,从kallsyms_addresses变量所对应的物理地址中获取内核符号表的虚拟地址;通过 步骤c-2)和步骤c-3)即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信 息; d) .数据库中未存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux设备分层优点,Linux设备驱动的分层设计思想

代码清单8第2行获取platform_data,而platform_data实际上是定义GPIO按键硬件信息的数组,第31行的for循环工具这些信息申请GPIO并初始化中断,对于LDD6140电路板而言,这些信息如代码清单10。代码清单10 LDD6410开发板GPIO按键的plat…

linux 关闭桌面环境,Ubuntu 14.04上的Cinnamon桌面环境PPA被关闭

今天Cinnamon桌面环境的开发者宣布关闭Cinnamon桌面环境的PPA,这意味着以后在Ubuntu上安装Cinnamon桌面环境将变得很难。关于为什么要关闭PPA,Cinnamon PPA的维护者Gwendal Le Bihan做出了以下解释:“稳定的Cinnamon PPA将不再提供&#xff0…

linux sd卡读写出错,linux系统SD卡读写问题

请教有过linux系统SD卡读写经验的前辈。我的项目是对FPGA上的SD卡部分做测试,在测试过程中发现在对SD卡所有领域进行读写操作时1、bus width 选择1-bit的速度4-bit是差不多的,这与我预想的不同,想知道问题出在哪里?(理论上4bit 速度应该是1-…

genymotion linux 32,Ubuntu Linux 32bit - 不是Genymotion虚拟设备

因为4天我没有找到解决方案我的genymotion有问题 我正在使用Ubuntu 12.04 32位(architecure:i686)并安装android studio并将genymotion的插件放入其中succefully ......现在我的问题,当点击genymotion设备管理器,列表是空的,当我试…

grub linux rootfs,rootfs文件系统(笔记)(草稿)

文件系统简介文件系统就是个软件,帮用户来管理一些二进制的信息,管理外存上存储的这些二进制各种文件在内存中都是以二进制的形式来存在的,如果没有文件系统,用户就需要自己去决定这些二进制的东西是什么,需要自己去和…

linux 如何查看属性,linux 下查看系统属性

linux 下查看系统属性(2009-06-28 19:01:34)标签:linux杂谈分类:OSlinux下查看系统属性1、查看cpu信息查看所有cpu信息:cat /proc/cpuinfo查看cpu类型: grep "model name" /proc/cpuinfo2、查看内存信息:查看…

幼儿学数数的c语言程序,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼编写程序,登录幼儿园200个小朋友的数据:姓名、性别、年龄、身高、体重、出生日期,分别按年龄排序后输出。要求:(1)登录数据用函数input()(2)按身高排序用函数sort()(3)输出排序结果用…

c语言传入参数不正确,请高手看看一下程序怎么回事啊?老是提示传参数错误...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includevoid main(){ void average(float, int);void search(float,int);static float score[][4]{{65,67,70,60},{80,87,90,81},{99,90,100,98}};average(score,12);search(score,2);}void average(float *p,int n){float *p_end…

vs用c语言写贪吃蛇,熬书几个月,终于编出简易的贪吃蛇了,VS2013

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#include#include#define X 30#define Y 15void guozi(int *x, int *y);int main(void){char map[X][Y];int x;int y;//横纵坐标int i;int j;//标记蛇头int p, q;//标记蛇尾int t, d;//寻找蛇尾int n 4;//蛇的长度…

中国电信学院c语言题库,电脑题库试题精编版.doc

1【单选题】以下关于图灵机的说法,正确的是( ?)。A、图灵机是一种计算机理论模型B、图灵机是用于图灵测试的计算机C、图灵机是第一台机械式计算机D、图灵机是冯诺依曼体系结构计算机正确答案: A?2【单选题】关于中文信息编码,以下正确的叙述…

统计c语言中英文字幕,C语言日记——递归

C语言日记——递归首先,允许我从《c primer plus》中摘一句话:C允许函数调用它自己,这种调用称为递归。有一段时间一直搞不清楚递归的实质,直到看到如下代码:#includeint up_and_down(int n);int main() {up_and_down(…

gnu linux中 使用,在Linux上使用GNU sed的方法

grep 命令grep 在文件(或命令输出)中搜索指定正则表达式,并且在标准输出中输出匹配的行。样例显示文件 /etc/passwd 中用户 gacanepa 的信息,忽略大小写。#grep-i gacanepa /etc/passwd显示 /etc 文件夹下所有 rc 开头并跟随任意数字的内容。#ls-l /etc …

android开机自动开启zram,低内存配置  |  Android 开源项目  |  Android Open Source Project...

Android 支持内存为 512 MB 的设备。本文档旨在帮助 OEM 优化和配置 Android 内核 4.4,使其能够在低内存设备上运行。在下文所述的优化措施中,有几项非常通用,甚至也可应用于以前的版本。Android 内核 4.4 平台优化改善了内存管理采用了经验证…

android 自动 键盘,关于Android中的软键盘

InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间&#xff0c…

Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir

fir分三个主要步骤1.获取fir上传凭证2.上传APKAPP logo图标3.获取最新的下载地址供别人下载注:python使用的是requests网络请求库1.获取fir上传凭证image.png代码如下:# 第一步:获取fir上传凭证print("get fir upload certificate"…

android studio vfs,Android Studio:尝试呈现XML布局的InvalidVirtualFileAccessException

我正在尝试在我的应用中预览xml布局(任何xml布局).我正在使用Android Studio 1.5 Preview 2.我一遍又一遍地收到此错误:InvalidVirtualFileAccessException:访问无效的虚拟文件:file:// D:/Scott/Android/Studio/MyApp/app/build/intermediates/classes/debug/com/scott/myapp/…

android 基类fragment,Android DialogFragment 基类的定制

鸿洋博客介绍:DialogFragment的基本使用好处:1:使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的生命周期2.DialogFragment也允许开发者把Dialog作为内嵌…

升级鸿蒙系统无法选择应用,申请鸿蒙系统有一个应用选择怎么选择呢

[分享交流]申请鸿蒙系统有一个应用选择怎么选择呢34364电梯直达huafen774590890新学乍练发表于 2020-12-18 22:19:17来自:HUAWEI Mate 30 Pro 5G最新回复 2020-12-19 09:31:55要怎么选择大家知道吗?想着你的狼自成一派发表于 2020-12-18 22:22:29来自&am…

html5 网页游戏论文,JavaScript编写的网页小游戏,很给力

以下为游戏代码:var timerID null;var INT 40;var loadFLG 0;var gameFLG 0;var missFLG 0;var tim 0;var blcol new Array(5); // block colorvar blsta new Array(40); // block statusvar blNO new Array(40); // block Novar blclr 0; // clear block…

c 插件读取有属性的html6,廖雪峰的JS教程6-jQuery

jQueryjQuery是JavaScript世界中使用最广泛的一个库。jQuery这么流行,肯定是因为它解决了一些很重要的问题。实际上,jQuery能帮我们干这些事情:消除浏览器差异:你不需要自己写冗长的代码来针对不同的浏览器来绑定事件,…