实验 调试操作系统的启动
操作系统实验指导书

《操作系统》课程实验指导书一.实验总学时(课外学时/课内学时):4/8 总学分:8/44必开实验个数: 4 选开实验个数:0二.适用专业:网络工程、计算机科学与技术2007级三.考核方式及办法:在规定实验时间内完成实验要求,依据实验过程及实验结果在实验现场逐一检查考核。
四.配套的实验教材或指导书:自编实验指导书五. 实验项目:实验1 SHELL命令的使用1、实验目的通过对LINUX的系统启动、注销、关闭和关机,帐号管理,文件系统的日常管理,文件系统的权限控制等常用基本命令的使用及与Windows下DOS SHELL的比较,了解现代操作系统SHELL的特点和功能。
了解编辑器vi的使用方法。
2、实验工具及环境LINUX系统网络环境或单机,Windows系统网络环境或单机。
3、实验计划学时2学时上机实际操作。
4、实验内容及操作步骤⑴系统启动和关闭①使用自己的账户登录UNIX系统,查看系统提示符确定自己使用的shell程序类型别。
◎开机后,系统自检启动后提示login:(输入:root↙)password:(输入:用户口令↙,root用户为redhat)◎查看/etc/passwd文件可以获得用户使用的shell#grep $LOGNAME /etc/passwd↙可能的显示为:user001:*:200:50::/usr/user001:/bin/sh请思考上述命令怎样得到了当前使用的shell类型的?使用下面的命令也可以查看当前shell:#echo $SHELL②注销和关机命令。
◎用户注销使用:$exit↙或$<ctrl>+<D>↙或$logout↙◎超级用户关机使用:#shutdown↙该命令将结束所有的进程,当执行此命令后系统提示“Safe to Power off or Press Any Keyto Reboot”时可以关闭电源或按任一键重启系统。
◎haltsys(halt),reboot只能由超级用户在单用户模式下使用。
微型计算机实验一实验报告

微型计算机实验一实验报告一、实验目的本次微型计算机实验的主要目的是让我们熟悉微型计算机的硬件组成,了解计算机各部件之间的连接和工作原理,并掌握基本的计算机组装和调试技能。
通过实际操作,提高我们对计算机系统的认识和动手能力,为今后的学习和工作打下坚实的基础。
二、实验设备与工具1、计算机主机箱、主板、CPU、内存、硬盘、显卡、声卡、网卡等硬件设备。
2、螺丝刀、镊子、防静电手环等工具。
三、实验内容1、了解计算机硬件组成打开计算机主机箱,观察主板、CPU、内存、硬盘、显卡、声卡、网卡等硬件设备的外观和安装位置。
学习各硬件设备的功能和作用,如 CPU 负责运算和控制,内存用于临时存储数据,硬盘用于长期存储数据等。
2、计算机硬件组装戴上防静电手环,防止静电对硬件设备造成损坏。
首先安装 CPU,将 CPU 对准主板上的插座,轻轻放下,然后扣紧CPU 插座的扳手。
安装内存,将内存插槽两端的卡扣掰开,将内存条对准插槽,用力按下,直到两端的卡扣自动扣紧。
安装硬盘,将硬盘固定在机箱的硬盘架上,然后连接数据线和电源线。
安装显卡,将显卡插入主板上的 PCIE 插槽,并用螺丝固定。
安装声卡和网卡,根据主板的接口类型,将声卡和网卡插入相应的插槽。
连接机箱前面板的线缆,包括电源按钮、重启按钮、指示灯、USB 接口等。
3、计算机硬件调试检查各硬件设备的安装是否牢固,连接是否正确。
接通电源,按下电源按钮,观察计算机能否正常启动。
如果计算机无法启动,根据报警声和指示灯的提示,查找故障原因并进行排除。
四、实验步骤1、准备工作清理实验台,将所需的硬件设备和工具摆放整齐。
阅读计算机硬件组装的相关资料,了解组装的流程和注意事项。
2、硬件组装按照上述步骤,依次安装 CPU、内存、硬盘、显卡、声卡、网卡等硬件设备,并连接好线缆。
3、硬件调试检查组装完成的计算机,确保没有遗漏的部件和连接错误。
接通电源,按下电源按钮,观察计算机的启动情况。
如果计算机无法启动,首先检查电源是否正常,然后检查各硬件设备的连接是否松动。
(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

操作系统教程实验指导书实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。
编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
计算机及外部设备装配调试实践报告

计算机及外部设备装配调试实践报告全文共四篇示例,供读者参考第一篇示例:计算机及外部设备装配调试实践报告一、实验目的本实验旨在通过组装和调试计算机及外部设备的过程,提升学生对计算机硬件及外部设备的了解,培养学生相关技能,为将来的IT工作做好准备。
二、实验环境1. 实验设备:主机箱、主板、CPU、内存、硬盘、显卡、电源、显示器、键盘、鼠标等。
2. 实验软件:操作系统、驱动程序等。
三、实验步骤1. 准备工作a) 将所有配件整理好,确保没有损坏。
b) 准备一个干净的工作台,确保操作环境整洁。
2. 组装主机a) 将CPU插入主板的CPU插槽中,注意对准方向并轻轻按下。
b) 安装内存条到主板的内存槽中。
c) 将主板安装到主机箱中,固定好螺丝。
d) 安装硬盘和显卡。
e) 连接主板和电源、显示器、键盘、鼠标等。
3. 开机运行a) 使用安装盘安装操作系统。
b) 完成系统安装后,安装相关驱动程序。
c) 检查各部件运行状态,保证无异常。
4. 调试外部设备a) 确保显示器、键盘、鼠标等外部设备正常工作。
b) 测试网络连接、打印机等外部设备。
5. 系统优化a) 更新操作系统及驱动程序。
b) 设置系统启动项、调整性能参数。
c) 安装必要的软件应用程序。
四、实验总结通过本次实践,我对计算机硬件组装和外部设备调试有了更深入的了解,掌握了相关技能。
在实践中,我遇到了一些问题,例如主板和电源连接不稳定导致开机失败,经过检查调整后成功解决。
在调试外部设备时,遇到了打印机无法正常连接的问题,通过重新安装驱动程序解决了这一困扰。
在系统优化方面,我学会了如何提高计算机性能,优化系统设置,使系统更加流畅运行。
本次实践让我对计算机硬件及外部设备有了更深刻的认识,也锻炼了我的动手能力和解决问题的能力。
希望在以后的学习和工作中能够更好地运用所学知识,不断提升自己的技能水平。
【2000字】第二篇示例:计算机及外部设备的装配调试是计算机科学和技术课程中非常重要的一环,通过这一实践能够帮助学生深入了解计算机硬件的组成及工作原理,并提高他们的动手能力和解决问题的能力。
北航ARM9实验报告:实验3uCOS-II实验

北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。
通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。
二、实验环境1、硬件环境:ARM9 开发板、PC 机。
2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。
三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。
其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。
任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。
任务可以处于就绪、运行、等待、挂起等状态。
任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。
时间管理:通过系统时钟节拍来实现任务的延时和定时功能。
内存管理:提供了简单的内存分区管理和内存块管理机制。
中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。
2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。
3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。
4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。
5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。
6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。
武汉理工大学-操作系统实验报告-中国好学长系列之小灰灰的爸爸

学 生 实 验 报 告 书实验课程名称 操 作 系 统 开 课 学 院 计算机科学与技术学院 指导老师姓名 刘 军 学 生 姓 名 小灰灰的爸爸 学生专业班级 中国好学长系列2013 — 2014 学年 第 一 学期学生学号实验课成绩实验课程名称:操作系统实验项目名称Linux键盘命令和vi实验成绩实验者专业班级组别同组者实验日期年月日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)掌握Linux系统键盘命令的使用方法。
二、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)Vi编辑器是所有计算机系统中最常用的一种工具。
UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi。
1.进入vi在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:例如:$ vi myfile有一点要注意,在进入vi之后,是处于“命令行模式”,要切换到“插入模式”才能够输入文字。
2. 切换至插入模式编辑文件在“命令行模式”下按一下字母“i”就可以进入“插入模式”,这时候就可以开始输入文字了。
3. Insert 的切换处于“插入模式”,就只能一直输入文字,按一下“ESC”键转到”命令行模式”能够删除文字。
4. 退出vi及保存文件在“命令行模式”下,按一下“:”冒号键进入“Last line mode”,例如:: w myfilename: wq (输入”wq”,存盘并退出vi): q! (输入q!,不存盘强制退出vi)三、主要实验工具、仪器设备及耗材安装Linux系统的计算机一台。
第二部分:实验结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)在整个过程中,最困难的就是记忆整个Vi命令。
在查阅资料的情况下,这个问题得到了解决。
二、实验结果描述1.进入vi在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面图1 vi主界面2.切换至插入模式编辑文件在“命令行模式”下按一下字母”i”就可以进入”插入模式”。
系统成套启动调试方案

系统成套启动调试方案简介系统成套启动调试是为了确保系统整体功能的正确性和稳定性而进行的一系列调试工作。
系统成套启动调试方案涵盖了从系统启动到功能正常运行的全过程,包括引导程序的加载、操作系统的启动、基础设施的初始化以及各个模块的功能验证等。
本文将介绍系统成套启动调试方案的流程和注意事项,帮助开发人员有效地进行系统调试和故障排除。
系统成套启动调试方案步骤1. 硬件初始化启动首先,确保系统的硬件连接正确,并完成硬件初始化。
这包括连接电源、外部设备、嵌入式开发板等,并进行必要的硬件配置和初始化操作。
2. 引导程序加载和启动在硬件初始化完成后,需要加载引导程序,并启动引导过程。
引导程序的作用是加载操作系统到内存并启动其执行。
在进行引导过程时,需要注意以下几点:•检查引导程序是否正确配置,包括正确设置引导地址和加载方式。
•确保引导程序的加载路径正确,避免由于路径错误导致加载失败。
•检查引导程序的版本和编译选项,确保与目标系统的兼容性。
•通过日志输出或调试工具,检查引导程序的执行过程和结果。
3. 操作系统启动和初始化一旦引导程序成功加载并启动,操作系统的启动和初始化就会开始。
在操作系统启动和初始化过程中,需要注意以下几点:•检查操作系统的启动参数是否正确配置和传递。
•检查操作系统的依赖库和驱动程序是否正确加载。
•检查初始化过程中的日志输出,确保操作系统的各个模块正确初始化。
•通过调试工具,检查操作系统的内核态和用户态的切换是否正常。
4. 基础设施初始化在操作系统启动和初始化后,需要对系统的基础设施进行初始化。
基础设施包括网络设备、文件系统、数据库等,其初始化过程主要包括以下几个方面:•网络设备的配置和连接,检查网络接口的状态和网络连接的正确性。
•文件系统的挂载和配置,确保文件系统的正常访问和使用。
•数据库的启动和连接,确保数据库的正常运行和可用性。
•其他基础设施的初始化,如消息队列、日志系统等。
5. 功能验证和故障排除在系统成套启动调试的最后阶段,需要对系统的各个功能进行验证和故障排除。
整机调试及检测的实验报告

整机调试及检测的实验报告
实验目的:了解整机调试及检测的流程和方法,掌握实际操作技能。
实验材料:需要调试和检测的整机设备。
实验步骤:
1. 组装整机:按照设备说明书和图纸的要求,将所有部件正确组装好,确保不漏装、不错装。
2. 检查电源:先检查电源线是否接触良好,然后安装电源连接电源开关和主板电源插座,打开电源,观察指示灯是否亮起,听是否有电源风扇转动声音。
3. BIOS设置:进入BIOS界面,确保CPU、内存和其它硬件的自动检测功能全部开启,并按照要求设置。
4. 操作系统安装:将操作系统光盘或U盘插入,按照操作系统安装向导提示完成系统安装。
5. 驱动程序安装:按照设备说明书中所列程序,将所有驱动程序和必要程序安装好。
6. 系统优化:按照设备说明书所列建议,进行系统优化设置,确保设备在最佳状态下运行。
7. 整机测试:启动整机,进行系统性能测试、游戏测试等。
实验结果:
本次实验,整机调试和检测的流程、方法和操作技能得到掌握。
经过以上步骤测试,设备性能稳定,系统优化良好,运行非常流畅,各项测试均通过。
实验结论:
整机调试和检测是确保设备稳定、可靠运行的重要环节,准确、细致完成整机调试和检测,是确保设备正常和长期使用重要的保障。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统的启动实验性质:验证建议学时:2学时一、实验目的跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。
二、预备知识阅读《EOS实验指南》第三章,了解EOS操作系统的启动过程。
阅读2.4节,复习汇编语言的相关知识,并掌握NASM汇编代码的特点。
阅读附录A,了解Bochs和Virtual PC 这两款虚拟机软件的特点,重点熟悉Bochs的调试命令。
三、实验内容3.1 准备实验1.启动OS Lab。
2.新建一个EOS Kernel项目。
3.在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。
boot.asm是软盘引导扇区程序的源文件,loader.asm是loader程序的源文件。
简单阅读一下这两个文件中的NASM汇编代码和注释。
4.按F7生成项目。
5.生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。
找到由boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小一定为512字节(与软盘引导扇区的大小一致)。
找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小,在下面的实验中会用到。
找到由其它源文件生成的操作系统内核文件kernel.dll。
3.2 调试EOS操作系统的启动过程3.2.1 使用Bochs做为远程目标机按照下面的步骤将调试时使用的远程目标机修改为Bochs:1.在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。
2.在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“Bochs Debug”(此时按F1可以获得关于此属性的帮助)。
3.点击“确定”按钮关闭“属性页”对话框。
接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。
3.2.2 调试BIOS程序按F5启动调试,此时会弹出两个Bochs窗口。
标题为“Bochs for windows - Display”的窗口相当于计算机的显示器,显示操作系统的输出。
标题为“Bochs for windows - Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。
启动调试后,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断。
此时,Display窗口没有显示任何内容,Console窗口显示要执行的BIOS第一条指令的相关信息,并等待用户输入调试命令,如图1:图1:Console窗口显示在BIOS第一条指令处中断从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的如下信息:●行首的[0xfffffff0]表示此条指令所在的物理地址。
●f000:fff0表示此条指令所在的逻辑地址(段地址:偏移地址)。
●jmp far f000:e05b是此条指令的反汇编代码。
●行尾的ea5be000f0是此条指令的十六进制字节码,可以看出此条指令有5个字节。
接下来可以按照下面的步骤查看CPU在没有执行任何指令之前主要寄存器和内存中的数据:1.在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图2。
其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000。
图2:使用sreg命令查看段寄存器的值2.输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图3。
其中“rip: 0x00000000:0000fff0”表示IP寄存器的值为0xfff0。
图3:使用r命令查看通用寄存器的值3.输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。
在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。
4.输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。
输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。
可以验证BIOS第一条指令所在逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。
由于内存还没有被使用,所以其中的值都为0。
3.2.3 调试软盘引导扇区程序BIOS在执行完自检和初始化工作后,会将软盘引导扇区加载到物理地址0x7c00-0x7dff 位置,并从0x7c00处的指令开始执行引导程序,所以接下来练习从0x7c00处开始调试软盘引导扇区程序:1.输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加了一个断点。
2.输入调试命令c继续执行,在0x7c00处的断点中断。
中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令(0) [0x00007c00] 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d3.为了方便后面的使用,先在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0x00007c6f)。
4.输入调试命令sreg验证CS寄存器(0x0000)的值。
5.输入调试命令r验证IP寄存器(0x7c00)的值。
6.由于BIOS程序此时已经执行完毕,输入调试命令xp /1024b 0x0000验证此时BIOS中断向量表已经被载入。
7.输入调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。
观察此块内存最开始的两个字节分别为0xeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。
此块内存最后的两个字节分别为0x55和0xaa,表示引导扇区是激活的,可以用来引导操作系统,这两个字节是boot.asm中最后一行语句dw 0xaa55定义的(注意,Intel 80386 CPU使用little endian字节顺序)。
8.输入调试命令xp /512b 0x0600验证第一个用户可用区域是空白的。
9.输入调试命令xp /512b 0x7e00验证第二个用户可用区域是空白的。
10.自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白的。
11.输入调试命令xp /512b 0xa0000验证上位内存已经被系统占用。
12.自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。
NASM汇编器在将boot.asm生成为boot.bin的同时,会生成一个boot.lst列表文件,帮助开发者调试boot.asm文件中的汇编代码。
按照下面的步骤查看boot.lst文件:1.在“项目管理器”窗口中,右键点击“boot”文件夹中的boot.asm文件。
2.在弹出的快捷菜单中选择“打开生成的列表文件”,在源代码编辑器中就会打开文件boot.lst。
3.将boot.lst文件和boot.asm文件对比可以发现,此文件包含了boot.asm文件中所有的汇编代码,同时在代码的左侧又添加了更多的信息。
4.在boot.lst中查找到软盘引导扇区程序第一条指令所在的行(第73行)73 00000000 EB6D jmp short Start此行包含的信息有:●73是行号。
●00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为0)。
●EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。
软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。
按照下面的步骤调试上述过程:1.在boot.lst文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执行的指令(第278行)278 00000181 EA00100000 jmp 0:LOADER_ORG根据此指令相对于程序开始(0x7C00)的偏移(0x0181)可以得到此指令的逻辑地址为0x0000:7D81。
2.输入调试命令vb 0x0000:0x7d81添加一个断点。
3.输入调试命令c继续执行,到断点处中断。
在Console窗口中显示(0) [0x00007d81] 0000:7d81 (unk. ctxt): jmp far 0000:1000 ; ea00100000此条指令就会跳转到物理内存0x1000处(即Loader程序的第一条指令)继续执行。
4.按照打开boot.lst文件的方法打开loader.lst文件,并在此文件中查找到loader程序的第一条指令(第33行)33 00000000 E91801 jmp Start5.输入调试命令xp /8b 0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。
6.根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。
3.2.4 调试加载程序Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU 进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行)。
按照下面的步骤调试上述过程:1.在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行)755 0000014F FF15[17010080] call dword [va_ImageEntry]2.计算此条指令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION是NASM汇编中的概念)开始的。
由于在boot.asm程序中只有一个节,所以之前计算的结果都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。
下面引用的代码是loader.lst中第一个节的最后一条指令(第593行)593 000003C1 C20600 ret 6因为第一个节中最后一条指令的偏移为0x03c1,并占用了3个字节(字节码为C20600),所以可以计算出进入内核执行的指令所在的物理地址为0x1513(0x1000+0x03c1+0x3+0x14f)。
3.使用添加物理地址断点的调试命令pb 0x1513添加一个断点。
4.输入调试命令c继续执行,到断点处中断。
在Console窗口中显示要执行的下一条指令(注意,此时的逻辑地址都为虚拟地址):(0) [0x00001513] 0008:0000000080001513 (unk. ctxt): call dword ptr ds:0x80001117; ff1517110080由于这里使用了函数指针的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址0x8000117处的四个字节中。