mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-19 17:26:31 +00:00
🆕 do_execve函数,跳转至应用层
This commit is contained in:
@ -111,12 +111,12 @@ SetUp_TSS64:
|
||||
addq $103, %rax // 设置段长度
|
||||
|
||||
leaq GDT_Table(%rip), %rdi
|
||||
movq %rax, 64(%rdi) // 把低八B存储到GDT第8项
|
||||
movq %rax, 80(%rdi) // 把低八B存储到GDT第10项
|
||||
shrq $32, %rdx
|
||||
movq %rdx, 72(%rdi) // 高8B存到GDT低9项
|
||||
movq %rdx, 88(%rdi) // 高8B存到GDT第11项
|
||||
|
||||
// 装载任务状态段寄存器(已改为在main.c中使用load_TR宏进行装载)
|
||||
// mov $0x40, %ax // 设置起始地址为64
|
||||
// mov $0x50, %ax // 设置起始地址为80
|
||||
// ltr %ax
|
||||
|
||||
// 切换到内核主程序
|
||||
@ -152,7 +152,7 @@ ENTRY(_stack_start)
|
||||
.org 0x1000 //设置页表位置为内核执行头程序的0x1000处
|
||||
|
||||
__PML4E:
|
||||
.quad 0x102007 // 系统访问,可读写,已存在, 地址在31~12位
|
||||
.quad 0x102007 // 用户访问,可读写,已存在, 地址在31~12位
|
||||
.fill 255,8,0
|
||||
.quad 0x102007
|
||||
.fill 255,8,0
|
||||
@ -161,26 +161,26 @@ __PML4E:
|
||||
|
||||
__PDPTE:
|
||||
|
||||
.quad 0x103003 // 用户访问,可读写,已存在
|
||||
.quad 0x103007 // 用户访问,可读写,已存在
|
||||
.fill 511,8,0
|
||||
|
||||
.org 0x3000
|
||||
|
||||
__PDE:
|
||||
|
||||
.quad 0x000083 // 用户访问,可读写,已存在
|
||||
.quad 0x200083
|
||||
.quad 0x400083
|
||||
.quad 0x600083
|
||||
.quad 0x800083
|
||||
.quad 0xe0000083 /*0x a00000*/
|
||||
.quad 0xe0200083
|
||||
.quad 0xe0400083
|
||||
.quad 0xe0600083 /*0x1000000*/
|
||||
.quad 0xe0800083
|
||||
.quad 0xe0a00083
|
||||
.quad 0xe0c00083
|
||||
.quad 0xe0e00083
|
||||
.quad 0x000087 // 用户访问,可读写,已存在
|
||||
.quad 0x200087
|
||||
.quad 0x400087
|
||||
.quad 0x600087
|
||||
.quad 0x800087
|
||||
.quad 0xe0000087 /*0x a00000*/
|
||||
.quad 0xe0200087
|
||||
.quad 0xe0400087
|
||||
.quad 0xe0600087 /*0x1000000*/
|
||||
.quad 0xe0800087
|
||||
.quad 0xe0a00087
|
||||
.quad 0xe0c00087
|
||||
.quad 0xe0e00087
|
||||
.fill 499,8,0
|
||||
|
||||
// GDT表
|
||||
@ -188,14 +188,16 @@ __PDE:
|
||||
.global GDT_Table // 使得GDT可以被外部程序引用或者访问
|
||||
|
||||
GDT_Table:
|
||||
.quad 0x0000000000000000 // 0 空描述符 00
|
||||
.quad 0x0020980000000000 // 1 内核64位代码段描述符 08
|
||||
.quad 0x0000920000000000 // 2 内核64位数据段描述符 10
|
||||
.quad 0x0020f80000000000 // 3 用户64位代码段描述符 18
|
||||
.quad 0x0000f20000000000 // 4 用户64位数据段描述符 20
|
||||
.quad 0x00cf9a000000ffff // 5 内核32位代码段描述符 28
|
||||
.quad 0x00cf92000000ffff // 6 内核32位数据段描述符 30
|
||||
.fill 10, 8, 0 // 8~9 TSS(跳过了第七段) 重复十次填充8字节的空间,赋值为0
|
||||
.quad 0x0000000000000000 // 0 空描述符 0x00
|
||||
.quad 0x0020980000000000 // 1 内核64位代码段描述符 0x08
|
||||
.quad 0x0000920000000000 // 2 内核64位数据段描述符 0x10
|
||||
.quad 0x0000000000000000 // 3 用户32位代码段描述符 0x18
|
||||
.quad 0x0000000000000000 // 4 用户32位数据段描述符 0x20
|
||||
.quad 0x0020f80000000000 // 5 用户64位代码段描述符 0x28
|
||||
.quad 0x0000f20000000000 // 6 用户64位数据段描述符 0x30
|
||||
.quad 0x00cf9a000000ffff // 7 内核32位代码段描述符 0x38
|
||||
.quad 0x00cf92000000ffff // 8 内核32位数据段描述符 0x40
|
||||
.fill 10, 8, 0 // 10-11 TSS(跳过了第9段) 重复十次填充8字节的空间,赋值为0
|
||||
GDT_END:
|
||||
|
||||
GDT_POINTER:
|
||||
|
Reference in New Issue
Block a user