模块信息,如图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) .数据库中未存

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

  1. LINUX检测服务并自动运行,一种Linux下的开机自动检测硬件信息的方法与流程

    技术领域本发明涉及服务器开机检测技术,具体的说是一种Linux下的开机自动检测硬件信息的方法. 背景技术: 服务器产品研发初期,产品多为工程样本,问题很多,这些问题中硬件问题占较大部分.在工程验证测试 ...

  2. Linux拉取代码启动镜像,基于Linux源代码及Busybox源代码制作精简可启动内核镜像技术实验方法...

    基于Linux源代码及Busybox源代码制作精简可启动内核镜像技术实验方法总结 熊海泉 内核源代码 下载地址 这里下载的是linux-2.6.38.tar.bz源代码 下载地址 这里下载的是busy ...

  3. Linux系统中搜索文件的方法有哪些?(最全总结,建议收藏)

    搜索文件专栏全部文章: Linux系统中搜索文件的方法有哪些 如何使用find命令搜索到自己想要的文件 ack 命令的基本用法详解 ag命令的使用详解 在Linux系统中,常用的搜索文件的方法有以下几 ...

  4. android-x86 镜像iso下载_2019年微软MSDN原版镜像系统下载地址 Win10/7原版系统iso镜像文件...

    如今,不少用户开始讨厌以GHOST形式来安装操作系统,虽然步骤十分简单,但是从网上下载的GHOST系统,已经形成了一个黑色产业链,为了盈利,捆绑了软件全家桶.恶意强制主页,甚至捆绑木马,此外,GHOS ...

  5. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

  6. matlab波特一致性,一种基于MATLAB的数据一致性的分析方法与流程

    本发明属于电机性能数据的处理和分析技术领域,尤其涉及一种基于 MATLAB的数据一致性的分析方法. 背景技术: MATLAB是一种基于算法开发.数据可视化.数据分析以及数值计算的计算机高级编程语言和交 ...

  7. 误码率与信噪比的关系matlab,一种误码率和信噪比关系的分析方法与流程

    本发明涉及数字通信技术领域,特别涉及一种误码率和信噪比关系的分析方法. 背景技术: 误码率(BER,Bit Error Rate)是衡量数据在规定时间内数据传输精确性的指标.误码率=传输中的误码/所传 ...

  8. android字符串块,一种Android系统字符串提取及合并方法与流程

    本发明涉及字符串提取及合并方法,尤其涉及一种Android系统字符串提取及合并方法. 背景技术: 随着智能通讯终端的日益普及,采用Android系统的智能通讯终端设备越来越走向世界各地,而对于多国语言 ...

  9. 一种基于SPC的软件过程质量分析方法

    一种基于SPC的软件过程质量分析方法 [1] 摘 要 一个项目的开发活动是很多软件过程的集合,不同软件过程之间关联性很强,成功分析特定软件过程质量的关键是确保软件过程分析的独立性,剔除来自于其他过程的 ...

最新文章

  1. Oracle使用技巧----sqlplus Set常用设置
  2. 从C++中的const到MMU(存储器管理单元)(MMU部分为网页整理)
  3. 直播报名 | 超低延时直播架构解析
  4. QT的QEasingCurve类的使用
  5. Visual Studio内存泄漏检测
  6. 放大器的传递函数_保证放大器的稳定性什么最重要?反馈电阻一定要选对!
  7. 【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门
  8. python 组合优化 回撤最小_【策略回测】多因子搭配组合优化(内附bonus)
  9. PTA 7-6 2048游戏模拟(1)--单行向左移动叠加
  10. AxureUX 复制Iconfont图标到Axure
  11. ElasticJob汇总
  12. 12306 终于随随便便撑起洪峰流量了,全面拥抱Redis 6.x!
  13. 静态代理和动态代理的区别,什么场景使用?
  14. 分析器错误信息 未能加载类型 命名空间 类 ---小结
  15. 古墓丽影暗影显卡测试软件,游戏新消息:战地5古墓丽影暗影8K测试单显卡根本带不动...
  16. 基于BP神经网络算法的实现静态图片和视频人脸识别、性别识别
  17. 电磁场与仿真软件(25)
  18. tinyproxy代理简单使用
  19. 乔姆斯基生成语法_《乔姆斯基的生成语法解读》.pdf
  20. 判断一个整型数据有几位

热门文章

  1. 动态后台获取_后台管理系统的权限以及vue处理权限的思路
  2. python中iteritems,Python2中的dict.items()和dict.iteritems()有什么区别?
  3. docker 远程连接 文件看不到_pycharm连接远程linux服务器的docker
  4. mysql 加载数据校验_mysql 导入数据后的校验程序
  5. jmeter+mysql+set_jmeter学习指南之操作 mysql 数据库
  6. SpringBoot2 整合 XFIRE 服务端和客户端
  7. 企业实战_08_MyCat 搭建Mysql 一主二从复制环境
  8. SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号
  9. VS Code 批量操作
  10. springboot项目后台启动jar 和开机启动