博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReactOS 0.0.29启动分析
阅读量:6039 次
发布时间:2019-06-20

本文共 979 字,大约阅读时间需要 3 分钟。

最开始的是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

你可能感兴趣的文章
Retrofit全攻略——基础篇
查看>>
代理模式
查看>>
具体问题具体分析
查看>>
【SqlServer系列】表达式(expression)
查看>>
maven与gradle的对比
查看>>
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
uasy-datetimebox的使用
查看>>
Android Home键监听
查看>>
Java JVM虚拟机选项Xms/Xmx/PermSize/MaxPermSize(转)
查看>>
linux convert命令安装及使用
查看>>
JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
查看>>
laravel5.5 Syntax error or access violation: 1071 Specified key was too long
查看>>
分布式锁与实现(一)——基于Redis实现
查看>>
RDLC报表显示图片
查看>>
用查表查找汉字笔画
查看>>
top高级技能
查看>>
两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)...
查看>>
sso单点登录,单点登录原理图,单点登录图解,单点登录
查看>>
原码、反码、补码的正(nao)确(can)打开方式
查看>>
《算法导论》
查看>>