镇江手机网站制作,做一个网站和手机软件多少钱,网站内容框架,wordpress序号插件为了让大家更好的理解bios是怎样被执行的#xff0c;也就是计算机中第一个软件是怎样开始的#xff0c;咱们还是先看下图3-17。在图的上面第5行#xff0c;显示的是下一条待执行的指令#xff0c;这是程序计数器#xff08;PC#xff09;中的值#xff0c;在x86上的程序…为了让大家更好的理解bios是怎样被执行的也就是计算机中第一个软件是怎样开始的咱们还是先看下图3-17。在图的上面第5行显示的是下一条待执行的指令这是程序计数器PC中的值在x86上的程序计数器是指cs:ip。大家看cs是0xf000ip是fff0所以最终地址是0xffff0这是bios的入口地址低端1M内存最顶端的16字节。忘记的同学翻看以往文章中有介绍实模式下的内存布局。在右边的jmp far f000:e05b是指此内存0xffff0处的内容在内存中内容不是普通数据就是指令在此处就是条跳转指令。这是咱们之前分析bios时所说的1M内存的最顶端只有16字节肯定容不下完整bios代码必然是条跳转指令。由此可见果然没错它是跳转到0xf000:e05b的地方了。咱们需要验证一下内存0xffff0处的内容是不是jmp far f000:e05b。
验证的方法有多种不过先来个简单粗暴可依赖的咱们查看此处内存的内容是什么。内容如图 由于默认xp是以4字节来显示所以xp中斜杠后面指定的数字2最终会让xp显示8个字节。提醒一下咱们bochs模拟的是x86平台它是小端字节序。咱们只看1个4字节先从低地址看最低位是ea这是直接绝对远转移jmp far的机器码高位的是0xe05b这是jmp far的操作数待跳转到的地址如果忘记指令格式的同学赶紧到前面找到IA32指令格式回忆一下。
这与程序计数器(cs:ip)中指定的内容是吻合的不过咱们还是不太放心也许您说万一0x00e05bea只是普通数据呢我又对机器码不熟不许忽悠我。为了打消您的疑虑那再用一种方法来验证一下吧。
在“Debugger control”类中有个命令U它用来将内存数据反汇编成指令。咱们看一下此命令的帮助。help u回车后效果如图 大概意思是说u和disasm是一样的命令用哪个都行其用法是在后面跟需要汇编的指令数起始线性地址终止线性地址。由于我们在实模式下线性地址就是物理地址。键入 u/1 0xffff0回车效果如图 果然没有忽悠大家地址0xffff0处的内容确实是指令并且是jmp far f000:e05b。这下大家对理解bios启动应该更深刻一些了。
以上内容来自《操作系统真象还原》请大家支持正版多谢。
【再续】