Bochs源码分析 - 24:bochs对Non-PAE-4K页的实现代码

前言

        我们现在在构建好分页模式的基础上,来通过对mov指令的分析来实现对bochs的Non-PAE-4K分页机制的分析,在分析过程中,我们会看到关于对页属性的各种检查,之后再来总结。

        注意,其中可能涉及缓存部分(TLB),这个我们决定放在后面分析,因此如果遇到TLB信息,我们暂且跳过,不做过多解读。

反汇编定位代码

        我们现在先将ex11-2/protected.asm中测试二的代码注释掉,为分析直观,将mov[xx],0 改为 mov[xx],4. 然后按照我们上篇文章补充的Shell脚本来进行编译,内容如下:

; 测试二:在 CR0.WP=0时,在0级代码里写0x400000地址
       mov DWORD [0x400000], 4   

        使用IDA来逆向这部分,定位其汇编地址,内容如下:

        现在通过bochs来运行到bochs反汇编代码,内容如下:

堆栈分析-1

        其核心代码在 BX_CPU_C::access_write_linear(...) 中,从cpu->execute1(...)到access_write_linear(...) 经过一系列函数,这些函数并没有什么核心代码,只是基本单纯地封装调用,我们直接展示其函数堆栈。

>	bochs.exe!BX_CPU_C::access_write_linear(unsigned __int64 laddr, unsigned int len, unsigned int curr_pl, unsigned int xlate_rw, unsigned int ac_mask, void * data) Line 2402	C++
 	bochs.exe!BX_CPU_C::write_linear_dword(unsigned int s, unsigned __int64 laddr, unsigned int data) Line 102	C++
 	bochs.exe!BX_CPU_C::write_virtual_dword(unsigned int s, unsigned __int64 offset, unsigned int data) Line 200	C++
 	bochs.exe!BX_CPU_C::MOV_EdIdM(bxInstruction_c * i) Line 30	C++
 	bochs.exe!BX_CPU_C::cpu_loop() Line 109	C++

access_write_linear(...)函数分析

        我们现在来分析access_write_linear(..)的代码,其函数定义如下:

int BX_CPU_C::access_write_linear(
    bx_address laddr, // 线性地址 0x400000
    unsigned len,     // 数据长度 4
    unsigned curr_pl, // 当前的CPL 0
    unsigned xlate_rw, // 读写  BX_WRITE
    Bit32u ac_mask,     // 0x3
    void *data // 写入数据的指针
){
    ....
}

        在这部分函数中,有两个非常重要的代码,下面我们会重点分析这两部分代码。

        translate_linear(...)函数是将线性地址转化为物理地址,其中有一个tlbEntry,这个是TLB页缓的,如果该地址在tlb中存在缓存,则优先从缓存中获取。

    bx_bool user = (curr_pl == 3);
    BX_CPU_THIS_PTR address_xlation.paddress1 = 
        translate_linear(tlbEntry, ladd
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Chapter 1 x86 体系结构与PC 系统概要.....................................1 1.1 x86 CPU 结构...............................................................................................................1 1.1.1 冯诺依曼架构和CISC 指令集......................................................................1 1.1.2 CPU 结构........................................................................................................1 1.1.3 CPU 工作模式................................................................................................2 1.2 x86 体系结构概览........................................................................................................3 1.3 PC 系统.........................................................................................................................5 1.3.1 PC 系统概述...................................................................................................5 2.3.2 总线拓扑.........................................................................................................6 2.3.3 存储器与I/O 编址.........................................................................................6 2.3.4 关于系统的启动与引导.................................................................................8 Chapter 2 Bochs 工程概述....................................................... 11 2.1 开源项目Bochs 介绍.................................................................................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程类结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要类................................................................................13 (1) VM 控制台界面类.............................................................................................13 (2) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 类的源码分析...................................................20 3.1 CPU 类概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 类BX_CPU_C 成员归纳.............................................................................20 3.2 类BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 类bxInstruction_c 成员分析........................................................................22 3.2.3 类BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35
Bochs项目源码分析注释 Table of Content Chapter 1 x86 体系结构与 PC 系统概要1 1.1 x86 CPU 结构1 1.1.1 冯诺依曼架构和CISC 指令集 1.1.2 CPU 结构 1.1.3 CPU 工作模式 1.2 x86 体系结构概览 1.3 PC 系统 1.3.1 PC 系统概述 2.3.2 总线拓扑 2.3.3 存储器与I/O 编址 2.3.4 关于系统的启动与引导 Chapter 2 Bochs 工程概述 2.1 开源项目Bochs 介绍........................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程类结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要类................................................................................13 (1) VM 控制台界面类.............................................................................................13 (2 ) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4 ).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 类的源码分析...................................................20 3.1 CPU 类概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 类BX_CPU_C 成员归纳.............................................................................20 3.2 类BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 类bxInstruction_c 成员分析........................................................................22 3.2.3 类BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35 Understanding the source code of bochs

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值