1. 实验环境VMware station 15 + Ubuntu 14.04.6 32位。2. 实验步骤2.1 安装虚拟机,并在虚拟机根目录下编译并安装bochs环境。 2.2 使用bochs自带工具bximage创建虚拟软驱。 2.3 编写引导程序boot.asm并用nasm编译得到引导文件boot.bin和boot.com。 2.4 修改bochsrc文件,运行并调试。 ![]() |
|---|
实验过程分析(实验分工,详细记录实验过程中发生的故障和问题,进行故障分析,说明故障排除的过程及方法。根据具体实验,记录、整理相应的数据表格等) 3. 实验练习 3.1 删除0xAA55,观察程序效果,找出原因。 删除0xAA55后boot.asm程序无法正常编译。 尝试将0xAA55改成0xBB66,编译后无法正常引导软盘启动。 原因在于一个符合要求的引导程序的第一个扇区必须有512个字节,而且该扇区的最后两个字节的内容应该是0xAA55。删除之后程序无法编译,而更改后程序无法引导。 3.2 修改程序中输出为,一个包含自己名字的字符串,调试程序。 把生成的可执行文件反汇编,看看输出的内容是怎样的,并在虚拟机启动过程,设置断点进行调试,在实验报告中截图。 使用指令ndisasm -o 0x7c00 boot.bin >> disboot.asm反汇编,得到如下图结果,其内容与我们编写的boot.asm一致。 对写入了原始boot.asm编译产生的boot.bin的a.img用bochs调试。b 0x7c00 设置断点;c 运行到断点。 x/64xb 0x7c00查看内存。 用n进行单步运行,用u来进行反汇编。 **3.3 为什么要jmp ,如何改造程序,让这个输出过程执行100次。** jmp的作用是让程序死循环,从而使操作系统保持运行状态。要打印100此字符串,可以在外层设置一个100次的循环。 3.4 回答:为什么要对段寄存器进行赋值。 要对段寄存器进行赋值是因为cs是代码段基址,将它的值赋给ds、es可以确定程序运行的基址,比如数据段基址,之后加上bp,使用ES:BP就可以访问到BootMessage地址上的内容。 3.5 回答:如何在该程序中调用系统中断。 使用汇编int 10h可以调用中断,调用时需要设置好其参数,比如cx为字符串长度,ah=13表示输出字符串,AL=01h为显示器模式,bx表示颜色,dl赋值为0表示在第一行输出,ES:BP为字符串地址。 |
OS_lab——bochs源码的编译与安装
Hellespontus2024-01-07 10:27
相关推荐
一次旅行1 天前
2026.08.16 AI产业深度解读|国产大模型全面突围,算力硬件/智能安全/人形机器人四大趋势附落地方案名字还没想好☜1 天前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线liulilittle1 天前
并发与内存安全术语:定义、分类与关联愚公搬代码1 天前
【愚公系列】《Web应用安全》006-HackBar插件的使用Java成神之路-1 天前
彻底理解 mmap:从虚拟内存、缺页中断、写时复制到 Page Cachesbjdhjd1 天前
企业站 SQL 注入实战:PCRE 正则回溯绕过关键词 WAF 完整实战 | 进阶02愚公搬代码1 天前
【愚公系列】《Web应用安全》005-Visual Studio Code编辑器的使用吴声子夜歌1 天前
网络安全——消息认证吴声子夜歌1 天前
网络安全——数字签名MartinYeung51 天前
[论文学习]X-Boundary:为LLM建立精确安全边界以抵御多轮越狱攻击
2.2 使用bochs自带工具bximage创建虚拟软驱。
2.3
2.4 修改bochsrc文件,运行并调试。 
尝试将0xAA55改成0xBB66,编译后无法正常引导软盘启动。
原因在于一个符合要求的引导程序的第一个扇区必须有512个字节,而且该扇区的最后两个字节的内容应该是0xAA55。删除之后程序无法编译,而更改后程序无法引导。 3.2 修改程序中输出为,一个包含自己名字的字符串,调试程序。
把生成的可执行文件反汇编,看看输出的内容是怎样的,并在虚拟机启动过程,设置断点进行调试,在实验报告中截图。 使用指令ndisasm -o 0x7c00 boot.bin >> disboot.asm反汇编,得到如下图结果,其内容与我们编写的boot.asm一致。
对写入了原始boot.asm编译产生的boot.bin的a.img用bochs调试。b 0x7c00 设置断点;c 运行到断点。
x/64xb 0x7c00查看内存。
用n进行单步运行,用u来进行反汇编。
**3.3 为什么要jmp
3.4 回答:为什么要对段寄存器进行赋值。 要对段寄存器进行赋值是因为cs是代码段基址,将它的值赋给ds、es可以确定程序运行的基址,比如数据段基址,之后加上bp,使用ES:BP就可以访问到BootMessage地址上的内容。 3.5 回答:如何在该程序中调用系统中断。 使用汇编int 10h可以调用中断,调用时需要设置好其参数,比如cx为字符串长度,ah=13表示输出字符串,AL=01h为显示器模式,bx表示颜色,dl赋值为0表示在第一行输出,ES:BP为字符串地址。