由机器上电到 vista 加载完毕,大致分为 6 大部分:
流程如下:
POST(INT 19h)---> 0x7c00 ---> 0x20000 ---> bootmgr ---> winload ---> nt(kernel)加载完华
第一部分:
机器上电做自检 POST 后,最后一步工作是调用 INT 19h,进行加载 MBR 到 0x7c00,并转入 0x7c00 执行,Int 19h 是永不返回,Int 19h 加载完 MBR 后,直接跳转到 0x7c00 处执行,它不会返回到 POST 自检代码。
第二部分:
进入 0x7c00 后,它会自己复制到 0x6000 然后执行,此时它将 Boot Sector 重新加载到 0x7c00,再跳回到 0x7c00 执行,在这个加载过程中,它遍历检查 4 个磁盘分区,遇到第一个可启动分区时,就将这个分区的 Boot Sector 加载到 0x7c00 执行,最后,转入到 0x20000 领域继续执行。
第三部分:
进入 0x20000 领域,这个领域主要是负责环境的初步建立,开启保护模式,加载更多的模块及驱动程序。此间后进行反复多次的模式转换,即:real mode --> protection mode ---> real mode ....
再进入 vista 的 boot 管理模块时,已经建立了保护模式,但分页机制尚未开启。
这个部分的最后工作是转入 bootmgr 的入口函断 bootmgr!BmMain()
第四部分:
进入 vista 的 bootmgr 模块,此时屏幕上仍旧是黑屏。这个模块经由 bootmgr!BmMain() 入口函数转入。
1、下面是 windbg 在 bootmgr 响应断点时的信息:
Microsoft (R) Windows Debugger Version 6.9.0003.113 AMD64 Copyright (c) Microsoft Corporation. All rights reserved.Opened \\.\pipe\com_1 Waiting to reconnect... BD: Boot Debugger Initialized Connected to Windows Boot Debugger 6000 x86 compatible target, ptr64 FALSE Kernel Debugger connection established. (Initial Breakpoint requested) Symbol search path is: *** Invalid *** **************************************************************************** * Symbol loading may be unreliable without a symbol search path. * * Use .symfix to have the debugger choose a symbol path. * * After setting your symbol path, use .reload to refresh symbol locations. * **************************************************************************** Executable search path is: ********************************************************************* * Symbols can not be loaded because symbol path is not initialized. * * * * The Symbol Path can be set by: * * using the _NT_SYMBOL_PATH environment variable. * * using the -y <symbol_path> argument when starting the debugger. * * using .sympath and .sympath+ * ********************************************************************* *** ERROR: Module load completed but symbols could not be loaded for bootmgr Windows Boot Debugger Kernel Version 6000 UP Free x86 compatible Primary image base = 0x00400000 Loaded module list = 0x004ffff8 System Uptime: not available Break instruction exception - code 80000003 (first chance) bootmgr+0x37ea4: 00437ea4 cc int 3 |
发布评论