资源描述
Slide Title,Body Text,Second Level,Third Level,Fourth Level,Fifth Level,*,*,熊海泉,熊海泉,Slide Title,Body Text,Second Level,Third Level,Fourth Level,Fifth Level,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,BochsXPC模拟器原理与启动流程分析熊海泉,典型,PC,系统构成,PC,系统与,X86,模拟器,2,2024/9/29,常见,X86,模拟器,比较典型的X86模拟器,Bochs,PTLsim,COTson,Qemu,PC,系统与,X86,模拟器,3,2024/9/29,Bochs,模拟器,Bochs,是一个,X86 PC,的模拟器,它可以模拟几乎所有类型的,X86 CPU,,包括,16,位,,32,位和,64,位,(X86_64),,内存以与,I/O,设备,在其上可以运行,Linux,,,Windows,等操作系统。,其中模拟的,X86_64,的工作方式包括以下两类:,IA-32,模式,:,包括实模式,保护模式和虚拟,8086,模式三个子模式,IA-32e,模式,:,包括长模式和兼容模式,4,PC,系统与,X86,模拟器,4,Bochs模拟器根本构成,5,PC,系统与,X86,模拟器,5,模拟主控模块,为用户提供交互的系统配置信息更改以与控制,Bochs,模拟器的运行,根据用户的配置信息在模拟主控对象中建立配置信息参数树并初始化,为,Bochs,系统硬件的初始化提供输入,启动,Bochs,模拟器并进入客户操作系统的引导,将宿主机的外部事件如,键盘键击,鼠标移动等通过信号量机制从而触发Bochs模拟器相应设备进展响应(理解不一定正确),6,模拟主控模块,6,2024/9/29,7,系统板主要功能,为系统外设,系统板等,模块提供工作时钟,从,而驱动各功能模块的正,常工作,负责为外设向,CPU,模块,触发中断控制信号,总,线请求信号等功能,负责提供,CPU,系统复,位,外设复位以与,A20,地址线开启与关闭,,I/O,端口读写的相关功,能,系统板的模拟,7,系统板的实现模型,64,个定时器资源,定时器实现的控制字段,其中,currCountdown,为,0,时将触发,CountdownEvent,时间,从而执行某一个定时器函数,这个函数通常是,I/O,设备注册的回调函数,系统板定时器实现的鼓励来源,I/O,设备初始化时注册的定时器回调函数,实现一些系统控制功能的字段,如,HRQ,代表示否向,CPU,发出总线请求等,系统板的模拟,8,2024/9/29,系统板与,CPU,与,I/O,模块的相互关系,set_HRQ (用于DMA向系统发出总线请求),set_INTR (调用CPU的set_INTR ),MemoryMappingChangedTLB刷新,invlpg去除页表,ResetCPU复位),在,CPU,每次指令执行循环,cpu_loop,中通过调用调用,系统板的,tick,来实现系统板上各个定时器,系统复位,Reset,或,CPU,的中断响应,IAC,向系统板注册工作驱动的定时器与中断,9,系统板的模拟,9,系统板初始化,此时可以建立的概念就是,系统板的定时器资源已经生成,可以供,I/O,设备注册使用,同时,I/O,设备通过系统板向,CPU,发送系统控制信号的功能已经准备就绪,系统板的模拟,10,2024/9/29,内存模块的根本功能,根据系统配置,一次性的向宿主机分配一片存储空间,(,应该不是物理内存,),,建立一套与实际机器类似的内存空间映像,在X86中,有些I/O设备可能以内存映射的方式存取而不是通过传统的in或out指令实现,如果有这需求,相应的I/O设备必须向内存模块注册I/O读写程序,这样当使用readPhysicalPage等接口时会判断是否是I/O设备空间而进展不同的存取操作,内存的一个主要功能就是向,CPU,提供存取指令和数据,以便,CPU,能够不停的取指,执行与回写,实现各种指令的功能,在,Bochs,硬件初始化时向,Bochs,模拟的内存空间的,ROM,地址空间加载可运行的,BIOS,二进制程序,以为后序,Bochs,复位运行作准备,11,内存模块的模拟,11,内存模块的实现模型,2024/9/29,12,2,,记载目前系统内存使用情况的一些字段,用于实现内存的分配管理,3,实现I/O内存映射的注册管理效劳,其中包含了地址信息,当系统通过readPhyicalPage,writePhysicalPage,等存取函数时会判断是否是一个I/O内存映射,如果是那么执行I/O内存映射处理函数,1,,初始化时,根据,.bochsrc,配置文件中的,(memory guest=512 host=256 ),从宿主机中预先分配好,Bochs,模拟器所需的内存,并用,vector,rom,等保存相应的起始地址,4,内存模块为CPU提供了存取指令数据以与为I/O提供了内存映射效劳,内存模块的模拟,12,内存模块与,CPU,与,I/O,交互关系,为CPU模块提供的效劳,数据和指令的存取,MMU地址变换,为I/O提供的效劳,I/O内存映射读写处理注册管理,实现I/O内存映射的存取,13,内存模块的模拟,13,内存模块的初始化,2024/9/29,14,为Bochs模拟器准备好了内存空间,可以为CPU提供存取指令数据效劳,同时也为需要实现I/O内存映射的设备准备好了注册使用功能,内存模块的模拟,14,CPU,模块的主要功能,根据X86指令的逻辑功能分别实现各类X86指令,大局部指令按其功能分别用不同的源代码文件实现,通过,prefetch,,,fetchDecode,以与具体指令处理函数与异常处理等实现,Bochs,指令执行循环逻辑,为CPU指令的执行提供数据和指令地址的变换,平安保护等功能,最终实现对内存模块的存取,具体主要通过translate_linear,access_linear,dtranslate_linear,itranslate_linear,主要包括系统复位,系统初始化等功能,实现X86系统的各类系统存放器和通用存放器以与其状态的变换逻辑,在系统中设置一个全局标志信息表示异步中断异常是否有发生,相应的异常请发生只要将其进展相应设置即可,15,CPU,的模拟,15,X86架构CPU的模拟-实现逻辑构造,CPU,的核心逻辑就是指令执行循环,16,CPU,的模拟,16,CPU,指令循环,检测系统是否有异常、中断等事件发生,这种事件的来源有,APIC,,,INIT,,,SMI,,,INTR,,,reset,,,bx_stop_simulation,,系统板,DMA,总线请求以与某些产生异常的指令,根据逻辑地址获取线性地址,再由线性地址变换到物理地址,这样就准备好了,CPU,存取一条指令,IP,地址指针,可以由,CPU,通过内存模块获取指令了,根据上一步获取的地址开场从内存模块中获取指令并译码填充在待处理的指令变量i中,供下一步调用,对译码好的指令进展调研执行,完成指令的逻辑功能,驱动系统板中的定时器,从而为驱动,Bochs,其余设备等模块工作。,17,CPU,的模拟,17,CPU,模块的初始化,CPU会在bx_init_hardware中由系统板复位触发CPU的复位,从而使得CPU中各存放器回到Intel手册上关于处理器初始化的初值,之后系统将会从0XFFFFFFF0处开场执行,18,2024/9/29,I/O,模块的主要功能,负责Bochs模拟设备实例的创立与初始化,到底要创立哪些设备是根据模拟主控对象初始化时收集的系统配置信息决定,在X86架构中有专门的I/O指令,负责对各类设备存放器的操作,此功能就是提供I/O地址空间管理的,为不同的端口根据设备需要提供不同的读写函数,负责外部设备资源的分配管理,供各外设使用,为,CPU I/O,指令提供的具体实现,各类具体外设的功能的逻辑模拟,一般包括初始化,复位,以与设备专用功能的模拟,19,Bochs I/O,模块的实现模型,作为与其它,Bochs,模块如,CPU,,系统板的接口,通过它可以找到所有,Bochs,的设备,此外也在其中集中实现了,I/O,地址空间的管理,具体设备的模拟实现,根据各设备功能,为每一个设备单独构建一个,C+,类来实现,20,I/O,模块的模拟,20,Bochs模拟器设备根本构造,向设备集注册,I/O,地址空间、中断以与向系统板注册定时器资源,将设备复位至到其初始化的状态,为,CPU,执行,I/O,指令时提供的具体的设备读写函数,设备的具体功,能函数效劳接,口,21,I/O,模块的模拟,21,Bochs I/O,设备集,2024/9/29,22,I/O,模块的模拟,I/O,地址空间资源,共,65536,,分读写各一个向量数组,每个元素指向相应端口号的读写处理函数,各种外设在初始化时会在其中注册它们的端口资源,I/O端口资源的处理数据构造,每个外设对应的读写处理不一样,各自具体实现,中断资源注册,各外设如有需求也会在其中申请注册相应的中断资源,根据系统配置创立的设备实例,在设备集中存储有这些实例的指针,以便Bochs其它模块可以存取,某些典型设备在没有初始化时,缺省的设备实例,提供集中管理各具体设备的功能,此外还管理,I/O,地址空间的功能,22,Bochs I/O,设备、设备集与系统板的逻辑关系,23,I/O,模块的模拟,23,Bochs I/O,设备、设备集与系统板的逻辑关系,1,通过调用设备集init初始化方法创立系统配置时的设备并保存各设备的指针,以使得Bochs可以通过设备集访问到所有I/O设备,init,init,init,24,I/O,模块的模拟,24,Bochs I/O,设备、设备集与系统板的逻辑关系,2,设备集init初始化方法在创立各具体设备之后,再依次调用各具体设备的init方法来向设备集注册I/O端口,中断请求以使得将来CPU存取到对应的端口时能够找到具体设备读写的处理函数,此外还可能系统板注册定时器资源,作为设备工作的触发机制,为设备正常工作做好准备,25,I/O,模块的模拟,25,Bochs I/O,设备初始化后状态,各类在系统启动时配置的设备都已经创立好了,并由各类具体设备的init初始化函数根据其各自的功能需求注册好了I/O地址空间与定时器,中断等资源,从而各个设备都具有驱动其工作的时钟。,26,I/O,模块的模拟,26,Bochs,模拟器初始化启动过程,-,整体概括,Bochs的整体流程逻辑上可以分为以下几个阶段,主控模拟对象SIM的创立,根据系统配置信息生成Bochs模拟器系统运行时的硬件配置参数树形构造并初始化,Bochs X86 PC模拟器PC系统的生成初始化(等效于实现一台可以工作的PC机),Bochs X86 PC模拟器系统的开机与操作系统的启动,27,Bochs,模拟器初始化启动过程,27,Bochs X86 PC,模拟器系统启动总体流程,注册,Bochs,模拟主控,对象的配置接口回调,函数,ci_callback,至此为止,已经完成了系统配置信息的提取并将其存储在模拟主控对象,SIM,中,供,Bochs,模拟器,PC,系统的构建,28,Bochs,模拟器初始化启动过程,28,Bochs,模拟主控对象的初始化,创立模拟主控对象,为构建系统配置参数树做好准备,Bochs,模拟器初始化启动过程,29,2024/9/29,Bochs,系统配置初始化,建立bochsrc系统配置,文件相对应的参数树形,数据构造,命令行参数选项处理,作,根据情况作不同的,处理,如显示帮助等或,读取系统配置文件,根据实际配置重新设置,模拟主控对象在上面建,立的参数树,作为后,续硬件的初始化的输入,Bochs,模拟器初始化启动过程,30,2024/9/29,由,bx_init_options,建立的系,统配置参数树,31,Bochs,模拟器初始化启动过程,31,Bochs,系统的运行准备,32,Bochs,模拟器初始化启动过程,32,Bochs,系统的运行准备,Bochs,模拟器初始化启动过程,33,2024/9/29,Bochs,系统硬件初始化,34,Bochs,模拟器初始化启动过程,34,Bochs,系统硬件初始化,系统板初始化,完成之后可以为设备等需要的定时器注册做好了准备,根据系统配置文件信息初始化内存模块,之后就准备好了Bochs所需的内存资源与读写效劳接口,根据系统配置信息将将BIOS与其它可选的ROM二进制程序预先烧写进入Bochs的内存系统中,整个烧写构造比照实际机器进展,CPU初始化完成指令系统译码表,各类内部存放器等的初始化,此时CPU相当于处于没有时钟脉冲的等待状态,根据系统配置信息完成各类I/O设备的创立并根据各设备的具体要求注册I/O地址空间地址、中断以与定时器资源,注册模拟主控对象的信号处理函数,以便相应来自用户界面的操作事件,如用户可以中途关闭,Bochs,模拟器等操作,系统板复位(CPU与外设复位)(类似于按实际机器的复位按钮,),Bochs系统开场进入真正的指令解释执行模拟过程,从0xFFFFFFF开场执行,Bochs,模拟器初始化启动过程,35,2024/9/29,Bochs,系统,CPU,指令运行循环,2024/9/29,36,Bochs,模拟器初始化启动过程,36,基于,Bochs,的实验环境,环境搭建与实验方法,Bochs,模拟器的编译,基于,Bochs,模拟器系统运行环境的搭建,添加新指令集的方法,(,今后有时间或需要时分析研究,),增加新设备的方法步骤,(,今后有时间或需要时分析研究,),基于,Bochs,的实验环境,37,2024/9/29,Bochs,模拟器的编译,从下载Bochs源代码如并解压,进入Bochs源代码目录执行如下命令显示可以配置的所有选项,./configure -help,如果要支持64位架构,那么可以使用如下配置命令,./configure enable-x86-64,编译,make,安装,make install,基于,Bochs,的实验环境,38,2024/9/29,Bochs模拟器运行环境-根本构成,根据实际需要进展,配置,确定系统的,硬件配置情况,有多种方式来制作,其中用于实,验的方法:,利用,Linux,开发主机由,Linux,源代码编译内核、,Busybox,以与,unetbootin,工具生成,系统自带,基于,Bochs,的实验环境,39,2024/9/29,Bochs,模拟器运行环境,-,配置信息,根本功能类似于自己去电脑市场配一台计算机,例如配几个CPU,几个硬盘,几个光驱,软盘,串口,并口,声卡,网卡等,具体可以参考bochs源代码目录下的.bochsrc模板文件,重要的几个配置,内存信息的配置,软硬盘,光盘配置与启动顺序,基于,Bochs,的实验环境,40,2024/9/29,Bochs,模拟器运行环境,-,操作系统启动镜像获取与制作,网络下载预先制作好的操作系统镜像(简单验证Bochs系统已正确安装,可使用),利用光盘或其ISO镜像在Bochs下安装,可以生成一个由Bochs启动的磁盘操作系统镜像(速度太慢,在使用Fedora时好似存在问题,具体可能还是因为Bochs模拟本身的问题),通过Linux内核源代码来实现精简可启动的操作系统镜像(拟寻求可以通过Linux内核源代码生成可以由Bochs模拟器运行的精简内核供实验之用),基于,Bochs,的实验环境,41,2024/9/29,Bochs,模拟器下精简,Linux,内核可启动的软盘或硬盘镜像制作,基于,Bochs,的实验环境,42,2024/9/29,下一步工作根本思路,根本思想,Bochs代表一个可调整修改的X86处理器系统(或开发的处理器),64位可启动的Linux内核(用于验证X86处理器的操作系统),分析Intel X86 64位Linux系统中与操作模式相关代码并结合Bochs模拟器来调研64位模式与操作系统底层的相互关系,尝试得出一些有参考价值的结论。,启动初始化代码局部(特别关注其模式切换相关的局部),进一步熟悉Bochs的实验环境并能根据实际需要修改Bochs源代码,完成相关的调研实验,熟悉Linux内核调试技巧,下一步工作根本思路,43,2024/9/29,实验方案示意图,基于预先的目标以,与Bochs的理解,,确定相应的验证方,案并进展修改,分析研究64位Linux版本中与操作模式相关的局部,结合Bochs模拟器的实现,调研分析相应的实验方案,下一步工作根本思路,44,2024/9/29,谢谢!,45,谢谢观赏,
展开阅读全文