NKStartup的参数KData

网友投稿 954 2022-09-17

NKStartup的参数KData

NKStartup的参数KData

NKStartup的参数KData是什么?,其实就是一个数据结构, 它位于nkldr的data区。如下:       AREA |.KDATA|,DATA,NOINIT KDataArea PTs     %       0x4000          ; space for first-level page table ExceptionVectors          %       0x0400    ; space for exception vectors         %       0x0400    ; space for interrupt stack         %       0x0100    ; space for FIQ stack         %       0x0700    ; space for Abort stack KPage  %       0x0c00   ; space for kernel stack & KDataStruct HighPT %       0x0400   ; 2nd level page table to map 0xFFF00000 KDEnd %       0 撇开实现, 单纯去理解的话, 和传递一个结构体指针没有什么区别。 再问: 这个数据结构干嘛的,代表什么? 这得明白高地址分配。 [高地址分配]    ^ 0xFFFD0000 FirstPT         # 0x4000              # 0x4000              # 0x8000              # 0x10000       ; not mapped ExVector       # 0x0400        ; vectors and table              # 0x0400  ; 1K interrupt stack            (ffff0400) IntStack       # 0x0100 ; 256 byte FIQ stack            (ffff0800) FIQStack      # 0x0700 ; 2K-256 abort stack            (ffff0900) AbortStack  #0xC000-0x1000;not mapped                (ffff1000) KDBase       # 0x07E0        ; 2K-32 kernel stack KStack        # 0x0020        ; temporary register save area KData         # 0x400         ; kernel data area FirstPT就是之前说的一级页表所在。大小16kbytes。 后面保留了2块区域,也许是提供给2级页表使用。 ExVector是异常入口, Arm有个机制, 通过设定p15, 可以将异常入口从0x18改成高地址FFFF0000. IntStack, FIQStack, AbortStack, KStack分别是各个模式以及内核的堆栈。 KData就是内核参数区了。 typedef struct ARM_HIGH {     ulong   firstPT[4096];      // 0xFFFD0000: 1st level page table     char    reserved2[0x20000-0x4000];     char    exVectors[0x400];   // 0xFFFF0000: exception vectors     char    reserved3[0x2400-0x400];     char    intrStack[0x400];   // 0xFFFF2400: interrupt stack     char    reserved4[0x4900-0x2800];     char    abortStack[0x700];  // 0xFFFF4900: abort stack     char    reserved5[0x6800-0x5000];     char    fiqStack[0x100];    // 0xFFFF6800: FIQ stack     char    reserved6[0xC000-0x6900];     char    kStack[0x800];      // 0xFFFFC000: kernel stack     struct KDataStruct kdata;   // 0xFFFFC800: kernel data page } ARM_HIGH;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C#/VB.NET 创建图片超链接(count)
下一篇:windows中batcmd脚本批处理命令xcopy move del md案例#yyds干货盘点#
相关文章

 发表评论

暂时没有评论,来抢沙发吧~