📄 起源 .txt
字号:
起源
作者:iKs 于2007-10-15上传
--------------------------------------------------------------------------------
一位著名的科学家(据说是贝特郎·罗素)曾经作过一次关于天文学方面的讲演。他描述了地球如何绕着太阳运动,以及太阳又是如何绕着我们称之为星系的巨大的恒星群的中心转动。演讲结束之时,一位坐在房间后排的矮个老妇人站起来说道:"你说的这些都是废话。这个世界实际上是驮在一只大乌龟的背上的一块平板。"这位科学家很有教养地微笑着答道:"那么这只乌龟是站在什么上面的呢?""你很聪明,年轻人,的确很聪明,"老妇人说,"不过,这是一只驮着一只一直驮下去的乌龟群啊!"
时间简史 第一章 我们的宇宙图像
无论是初学电脑的还是玩电脑许多年的人,都会对PC如何启动非常感兴趣。遗憾的是这方面的资料非常少,我下面要介绍的就是PC如何启动第一条指令,它在什么地方。
陈旧的资料都会说第一条指令在1MB之下的一点点,随便打开一个BIOS,在文件的末尾都会有这样的指令:
使用Debug工具反编译就是下面的语句:
-U F000:FFF0
F000:FFF0 EA5BE000F0 JMP F000:E05B
直接察看你的电脑也是这样的结果。但是,资料中又说BIOS ROM是处在4G下面开始的位置的。具体举例,一个2MB的BIOS,他的文件尾吧正好处在4G下面一点的位置,文件的头是处于 4G-2MB 的位置。量化表示就是这样的对应关系:
影射在内存寻址空间 文件偏移
FFD0,0000<―――――――――>0hdcmap
FFEF,FFF0<―――――――――>F,FFF0hdcmap
FFE7,FFF0<―――――――――>17,FFF0hdcmap
FFFF,FFF0<―――――――――>1F,FFF0hdcmap
开机时,CPU 将会从 0FFFF,FFF0h 处开始执行,就是对应在 2MB 文件 1F,FFF0h 的位置。这里有2点问题:
1.我们开机不插内存,它是到哪里执行的?
2.你怎么知道 CPU 是从这个位置执行而不是那个位置?
第一个问题是:它是在 BIOS ROM 中开始执行的。目前的 BIOS ROM 是一种可擦写的 Flash ROM,通常在南桥上。
开机之后,CPU 要访问 0FFFFFFF0h 处的数据,问北桥,北桥看看不在他的掌控下回头就去问南桥,南桥继续通过 LPC 或者 SPI 总线问 BIOS,取出来再一路返回给 CPU,然后 CPU 就知道了执行各种指令。
第二个问题,CPU 的 Spec 上是这样讲的[参考1]:
就是说开机之后,CPU 实际上是处在保护模式下的,Base=FFFF0000h 加上 EIP 就刚好是 4G 下面一点点。
我做了一点试验来验证上面的,但是还不完全。
试验环境:MSI 7365 主板
NB: BearLake
SB: ICH9
SPI: 1MB(板载1MB但是我们有特殊设备,可以直接使用2MB)
此外,还有一块强大的Debug卡,它有8个数码管,能够显示发送到Port 300h上的32位数据。
Step1. 生成一个2MB的文件:我选用 WinHex
选择生成2MB的
命名为our.bin
新生成的文件是全0填充的,我再使用 UltraEdit-32 打开,替换
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
为
"90 90 90 90 90 90 90 90 90 90 90 90 90 90 eb e0"
其中的 90是 NOP 指令,EB E0 是跳转指令,意思是跳转到上面 16 个字节处。
比如:
1FFFF0h 后面的 EB E0 就会跳转到 1FFFE0h 处继续执行。
这样,整个文件都成为一个可以执行的程序"链条",我们要做的只是用我们的代码的机器码取代 90h 就可以了。
我在文件的末端写入
2E668B06F0FF mov eax,cs:[0fff0]
BA0003 mov dx,300h ;(我在PCI上插了一个能截获丢到300h端口的Debug卡)
66ef out dx,eax
ebfe jmp $
运行之后,我们的卡上会出现068B662E ,这里我们无法使用 mov eax,[esi]
这样的指令,因为ds es似乎还没有处于保护模式下,使用的结果只有死机。
开机之后,没有Ram可以使用,因此暂时没有办法将EIP装到EAX中并且显示出来。
(本文涉及内容请不要随便试验,因为在没有刷新设备的情况下进行BIOS更新会导致无法开机)
参考1:
Intel? 64 and IA-32 Architectures
Software Developer's Manual
Volume 3A:
System Programming Guide, Part 1
Order Number: 253668-024US
August 2007
第 382 页 为了方便参考阅读,我将相关内容抓图放在下面。
收稿日期:2007年10月1日
--------------------------------------------------------------------------------
<<<上一篇 欢迎访问AoGo汇编小站:http://www.aogosoft.com 下一篇>>>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -