ReactOS 0.0.29启动分析

最开始的是loadros.asm,它会将ntoskrnl.exe等各个模块读入内存,并跳到0:901000。同时它还会初始化一个_LOADER_PARAMETER_BLOCK数据结构。

typedef struct _LOADER_PARAMETER_BLOCK
{
   ULONG Flags;
   ULONG MemLower;
   ULONG MemHigher;
   ULONG BootDevice;
   ULONG CommandLine;
   ULONG ModsCount;
   ULONG ModsAddr;
   UCHAR Syms[12];
   ULONG MmapLength;
   ULONG MmapAddr;
   ULONG DrivesCount;
   ULONG DrivesAddr;
   ULONG ConfigTable;
   ULONG BootLoaderName;
} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;

并且初始化_LOADER_MODULE数据结构的数组,每个pe文件对应一个。
typedef struct _LOADER_MODULE
{
   ULONG ModStart;
   ULONG ModEnd;
   ULONG String;
   ULONG Reserved;
} LOADER_MODULE, *PLOADER_MODULE;


通过跳转0:901000,来到ntoskrnl.exe的_NtProcessstartup模块,它是一段16位的代码。初始化页目录、页表。初始化GDT、IDT。最后跳到main.c中的_main函数。



_main将bootloader中得到信息进一步处理。例如bootloader是将各个模块读入到低端内存,而经过分页后,ntoskrnl.exe被应设在0xc0000000的位置。重新修改LOADER_PARAMETER_BLOCK结构和LOADER_MODULE结构的信息。

然后调用LdrSafePEProcessModule,将ntoskrnl.exe hal.sys重定向内存。
最后调用KiSystemStartup

转载于:https://www.cnblogs.com/fanzi2009/archive/2009/05/31/1493070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值