The current solution to this problem is that the Bochs configure script must be run on a different platform Download the Bochs sources on a machine that can run shell scripts. Choose Project:Set Active Project and be sure that "bochs" is selected. Then choose Build:Build bochs.exe. #endif around every optional file and including nearly every Bochs source file in the workspace.
https://cloud.tencent.com/developer/article/1434859 简要介绍:Bochs主要是一个免费且开源的基于x86架构PC机模拟器。 环境搭建步骤: 1、下载Linux0.11系统包,本链接的下载包已包含Bochs软件。 2、解压linux-0.11-devel-040329.zip,目录结构如下图所示: 这里真正使用到的文件为:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.11 、bootimage-0.11-hd、hdc-0.11.img 3、点击Bochs-2.1.1.exe进行安装。 4、安装完毕后,将所有linux-0.11-devel-040329下的文件,拷贝到刚才安装bochs下的根目录。
0 本机环境 macOS Big Sur 11.1 Bochs 2.6.2 1 Bochs下载解压 去「Bochs官网下载地址」下载bochs-2.6.2.tar.gz 手动解压bochs-2.6.2 .tar.gz压缩包 或 终端解压tar zxvf bochs-2.6.2.tar.gz 下面进入到Bochs的安装目录: $ cd bochs-2.6.2 即将进行 configure(配置 && 检测当前平台是否拥有所需依赖软件包 /configure \ > --prefix=/<自定义目录>/bochs \ # 指定bochs的安装目录 > --enable-debugger \ # 打开bochs调试器 > 5 配置Bochs硬盘启动文件 Bochs编译安装成功之后,需要配置Bochs启动信息,比如是从软盘还是从硬盘启动? /share/bochs/BIOS-bochs-latest vgaromimage: file=/Users/sparks_fly/Documents/操作系统实战/bochs/share/bochs
最近有同学问我:为什么你的《从0写x86 Linux操作系统课程》选择了bochs,而不是qemu?他认为bochs更加好用,很多资料上都写了用该软件。 软件特点 图片 Bochs是一个用C++编写的开源模拟器,仅可模拟x86计算机硬件环境,包括CPU、内存、硬盘、显示器、网卡等。 Bochs和QEMU都提供了各种调试手段,以帮助用户诊断和调试操作系统。不过,从我的使用经验来说,使用qemu进行操作系统开发时,可以提供相比bochs更为丰富的调试手段。 当然,Bochs也支持GDB调试,但是需要重新编译源码生成带GDB支持的bochs,非常麻烦。而且在GDB模式下,内置的调试命令将无法使用。 如下图所示,在进入该窗口后,可以直接输入各种命令,实现bochs同样的命令的功能。这些命令,可以有效的帮助同学分析开发过程中的各种问题。
bochs是一个很好的调试环境首先在liunx系统下下载bochs和bochs-x,前提你的liunx下已经安装好了gdb等调试工具,接下来在写好的asm汇编文件下输入bochs,选择4,输入bochsrc 生成相应文件: 进入bochsrc文件下,修改display_library行添加gui选项: 接下来输入bochs -q当然要用root用户的权限即可出来调试界面:
Ubuntu - 汇编编译器NASM - C编译器GCC - 软盘绝对扇区读写工具dd - qemu虚拟机 - Bochs模拟器 - 磁盘映像工具bximage $ sudo apt-get 模拟器 Bochs很强大,可以用来调试操作系统。 虚拟机 $ bochs -f bochsrc 之后会出来一个交互界面,按c继续执行。 ,trace-reg on让Bochs每走一步都显示主要寄存器的值,n让代码向下走一步。 使用Bochs调试Linux kernel,在赵炯的《linux内核完全剖析》中也有介绍。 ?
目录下新建并编辑bosh.src保存,然后执行bochs.exe -f bosh.src模拟执行MBR代码. megs:32 romimage:file=$BXSHARE/BIOS-bochs-latest 调试命令基础 Bochs调试命令常用的有以下几种. <bochs:1> vbreak 0x0000:0x7c000 7c000设置断点 <bochs:1> pb 0x7c000 设置物理断点 <bochs:1> num 删除一个断点 <bochs:1> c 运行遇到断点停下 <bochs:1> n 执行下一指令 <bochs :1> r 显示寄存器 <bochs:1> u/10 向下反汇编10条 <bochs:1> print-stack 打印堆栈 x /nuf addr
设置CentOS的网卡,使之能上网 用yum安装开发工具和GNOME 安装bochs 进入GNOME,在GNOME中运行bochs 虚拟机 CentOS配置 虚拟机设置中连接方式为NAT 因为安装的CentOS 我是下载了bochs-2.6.7.tar.gz的包通过虚拟机的共享目录转到CentOS下,然后在linux下操作 . /configure --prefix=/data/bochs/ --enable-debugger --enable-disasm . /share/doc/bochs/bochsrc-sample.txt:187: cpu directive malformed. 解决的办法: 配置里面的CPU cpu: model=core2_penryn_t9600目前bochs不支持,需要找支持的CPU .
而 Bochs 本身具有很高的移植性,可以运行在多种软硬件平台之上,这也是我们选择它做为本书的指定模拟器的主要原因。 如果您想拥抱自由的 Linux,那么 Bochs 几乎是您的不二选择。 而且,Bochs 有虚拟机无可比拟的调试操作系统的能力,所以我们更建议您选用 Bochs。hit-oslab 已经内置了 bochs,本实验后文假定的缺省环境也是 Bochs。 关于 Bochs 的更详细的介绍请访问它的 主页 及 Bochs 使用手册。 GCC 是和 Linux 一起成长起来的编译器。Linux 最初的版本就是由 GCC 编译的。 bochs 目录 bochs 目录下是与 bochs 相关的执行文件、数据文件和配置文件。 run 脚本 run 是运行 bochs 的脚本命令。 注意 2:在关闭 Bochs 之前,需要先在 0.11 的命令行运行 “sync”,确保所有缓存数据都存盘后,再关闭 Bochs。
开源的虚拟机 bochs 就具备这些强大的调试功能: http://bochs.sourceforge.net/ 3.1. bochs 的安装 你可以通过源码编译安装,也可以通过包管理工具进行安装,如果你通过包管理工具安装 ,需要安装 bochs、bochs-x。 3.2. bochs 配置 安装好后,bochs 启动需要至少进行以下配置: BIOS 映像文件,例如安装包中已经提供的 BIOS-bochs-latest VGA BIOS 映像文件,例如安装包中已经提供的 启动 bochs 3.3.1. unix 环境 在 linux 或 mac 环境下,执行下面的命令就可以启动 bochs 了: bochs -f bochsrc bochsrc 是我们上面编写的配置文件 4. bochs 调试指令 bochs 和我们熟悉的 gdb 界面非常像,可以通过命令进行系统的调试工作。 输入 help 可以看到支持的调试命令。 4.1.
目录下新建并编辑bosh.src保存,然后执行bochs.exe -f bosh.src模拟执行MBR代码. megs:32 romimage:file=$BXSHARE/BIOS-bochs-latest 调试命令基础 Bochs调试命令常用的有以下几种. <bochs:1> vbreak 0x0000:0x7c000 7c000设置断点 <bochs:1> pb 0x7c000 设置物理断点 <bochs:1> num 删除一个断点 <bochs:1> c 运行遇到断点停下 <bochs:1> n 执行下一指令 <bochs :1> r 显示寄存器 <bochs:1> u/10 向下反汇编10条 <bochs:1> print-stack 打印堆栈 x /nuf addr
关于bochs插桩技术参考《Bochspwn漏洞挖掘技术深究(1):Double Fetches 检测》,此处不再赘述。 直接先看下instrument.h中实现插桩函数有哪些: // Bochs初始化CPU对象时的回调函数 void bx_instr_initialize(unsigned cpu); // Bochs析构 CPU对象时的回调函数 void bx_instr_exit(unsigned cpu); //Bochs每次执行中断操作(软件中断、硬件中断或异常)时的回调函数 void bx_instr_interrupt (unsigned cpu, unsigned vector); // Bochs执行指令前的回调函数 void bx_instr_before_execution(unsigned cpu, bxInstruction_c *i); // Bochs执行指令后的回调函数 void bx_instr_after_execution(unsigned cpu, bxInstruction_c *i); // Bochs访问线性内存时的回调函数
上面都是针对应用层的,内核层的,上面的Pin和DynamoRIO就派不上用场了,对于这种系统内核级的指令插桩,有时就会采用虚拟化技术为实现,比如通过Qemu或Bochs虚拟机。 Bochs Instrument API 文档参考:http://bochs.sourceforge.net/cgi-bin/lxr/source/instrument/instrumentation.txt ,在编译bochs时指定插桩代码目录: . (unsigned cpu); // Bochs析构CPU对象时的回调函数 void bx_instr_exit(unsigned cpu); // Bochs访问线性内存时的回调函数 void actually there is the smm_mode(), which // might be a little interesting, even if it's just the bochs
资源下载 首先,我们需要linux-0.11源码、bochs等。我把资源放在百度云盘里了。 /run,就会看到bochs加载Linux0.11成功,界面如下: ? Ubuntu与Linux-0.11之间的文件交换 在oslab目录下,运行mount-hdc脚本,挂载linux0.11。 同理,也不要在已经mount的时候运行0.11内核; 在关闭Bochs之前,需要先在Linux-0.11的命令行运行“sync”,确保所有缓存数据都存盘后,再关闭Bochs。
/hd30M.img bs=512 count=1 conv=notrunc 调试 MBR 代码 在 bochs的配置文件中配好 MBR扇区对应的磁盘,启动bochs ata0-master: type =disk, mode=flat, path="/root/data/bochs/bin/hd30M.img" . /bochs -f bochsrc-sample.txt 在虚拟机中调试 ?
代码库快速浏览 Bochs/BochsCPU 众所周知,Bochs模拟器具有极其强大的检测功能,并且被认为非常适用于x86 ABI实现(包括最新的扩展)。 另一方面,yrp的BochsCPU是一个Rust库,它封装了BochsCPU代码,并通过Rust API(以及通过FFI的C++)公开Bochs的所有指令点(包括上下文切换、中断、异常等)。 这些所有的特点注定了Bochs会是一个非常有用的工具,适用于开发任何X86模式的代码、处理非常旧的任务关键型软件以及协助逆向和漏洞研究等任务。 在BochsCPU上模拟用户模式代码比内核模式稍微复杂一些:内核转储包括一个几乎完整的操作系统快照,包括MMU正常工作所需的所有内核部分,然而我们需要的只在需要时将这些页面映射到Bochs。 https://github.com/bochs-emu/Bochs https://github.com/yrp604/bochscpu https://github.com/0vercl0k/wtf
1、软件准备 l 虚拟机软件 首先得有虚拟机的软件,先如今流行的虚拟机有:VMware、Virtual PC、VirtualBox、Bochs等,其中VirtualBox和Bochs是开源的,VMware 和Virtual PC是商业软件,由于Bochs实在是太慢了(大概是因为Bochs真正在“模拟”PC机的硬件,而不是“虚拟”),所以我们准备使用VirtualBox作为本文的虚拟机软件。 如果想试试Bochs,可以到下面网址得到相关信息。 http://bochs.sourceforge.net 目前Bochs的最新版本是2.3.7 l Windows下的两个有用的工具软件 WinISO —- 用于制作光盘镜像 由于VirtualBox支持虚拟光驱
用到的软件是bochs,这是一款AMD64模拟器,并且支持非常强大的调试指令,非常适合我们当前的诉求。接下来就为大家介绍如何在macOS和Windows系统上配置bochs。 在macOS上配置bochs bochs是一个AMD64模拟器,我们可以在它上面运行AMD64架构、IA-32架构、80286架构甚至是8086架构的程序。 但bochs本身是跨平台的软件,因此,无论你用的是Intel芯片的Mac还是苹果自研芯片的Mac,都可以安装bochs。 : brew install bochs 安装完毕之后,我们执行: bochs --help 如果能顺利打印出帮助信息,那么恭喜,bochs已经安装成功! 下面介绍在Windows上安装bochs的方法。 首先在SourceForge网站上下载bochs的安装包。 下载完毕后双击进行安装。 安装过程中的选项保持默认即可。
Bochs是纯粹的软件模拟器,另外加上对硬件的模拟,所以其指令执行速度是非常慢的。Unicorn-engine基于动态翻译技术,速度相对于纯粹的指令模拟快的多. 所以如果关心系统仿真度当然选择virtualbox,bochs,但是virtualbox会耗费更多的系统资源。 Unicorn-engine可以虚拟执行x86,x64,arm等指令集。 因为其基于动态翻译和部分模拟来执行目标指令,效率比bochs快的多。 很显然,unicorn-engine只是一个”CPU”,所以要想运行样本还缺的是一个windows的运行应用程序的环境。
里了,不容易出错) root@VM-0-15-debian:~# hostnamectl Static hostname: VM-0-15-debian Virtualization: bochs x86-64 子节点 root@VM-0-17-debian:~# hostnamectl Static hostname: VM-0-17-debian Virtualization: bochs