linux进程启动时段寄存器的初始化 及意义
2007-07-06 14:20
316 查看
#define start_thread(regs,new_rip,new_rsp) do { /
asm volatile("movl %0,%%fs" :: "r" (0)); /
asm volatile("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS)); /
load_gs_index(0); /
(regs)->rip = (new_rip); /
(regs)->rsp = (new_rsp); /
(regs)->eflags = 0x200; /
(regs)->cs = __USER32_CS; /
(regs)->ss = __USER32_DS; /
set_fs(USER_DS); /
} while(0)
下面是关于段描述符的定义及解释
#define __USER32_CS 0x23 /* 4*8+3 */ //NO. of GDT is 0x20/8=4 ti=0(GDT) RPL = 3 //USER
#define __USER_DS 0x2b /* 5*8+3 */ //NO. of GDT is 0x28/8=5 ti=0(GDT) RPL = 3 //USER
下面分别是GDT的第4、5个描述符项的内容(4、5代表当前进程的代码段、数据段)
.quad 0x0000000000000000 /* 0x00 reserved */
.quad 0x0000000000000000 /* 0x08 reserved */
.quad 0x00cf9a000000ffff /* 0x10 kernel 4GB code at 0x00000000 */
.quad 0x00cf92000000ffff /* 0x18 kernel 4GB data at 0x00000000 */
.quad 0x00cffa000000ffff /* 0x23 user 4GB code at 0x00000000 */
.quad 0x00cff2000000ffff /* 0x2b user 4GB data at 0x00000000 */
BO-BIS 、B16-B31 都是0 基地址为0;LO-LlS 、Ll6- Ll 9都是l段的上限全是Oxftfff;
G 位都足1 段长单位均为4KB;D 位都是1 四个段的访问都是 3 2 位指令:P 位都是1 四个段都在内存。
asm volatile("movl %0,%%fs" :: "r" (0)); /
asm volatile("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS)); /
load_gs_index(0); /
(regs)->rip = (new_rip); /
(regs)->rsp = (new_rsp); /
(regs)->eflags = 0x200; /
(regs)->cs = __USER32_CS; /
(regs)->ss = __USER32_DS; /
set_fs(USER_DS); /
} while(0)
下面是关于段描述符的定义及解释
#define __USER32_CS 0x23 /* 4*8+3 */ //NO. of GDT is 0x20/8=4 ti=0(GDT) RPL = 3 //USER
#define __USER_DS 0x2b /* 5*8+3 */ //NO. of GDT is 0x28/8=5 ti=0(GDT) RPL = 3 //USER
下面分别是GDT的第4、5个描述符项的内容(4、5代表当前进程的代码段、数据段)
.quad 0x0000000000000000 /* 0x00 reserved */
.quad 0x0000000000000000 /* 0x08 reserved */
.quad 0x00cf9a000000ffff /* 0x10 kernel 4GB code at 0x00000000 */
.quad 0x00cf92000000ffff /* 0x18 kernel 4GB data at 0x00000000 */
.quad 0x00cffa000000ffff /* 0x23 user 4GB code at 0x00000000 */
.quad 0x00cff2000000ffff /* 0x2b user 4GB data at 0x00000000 */
BO-BIS 、B16-B31 都是0 基地址为0;LO-LlS 、Ll6- Ll 9都是l段的上限全是Oxftfff;
G 位都足1 段长单位均为4KB;D 位都是1 四个段的访问都是 3 2 位指令:P 位都是1 四个段都在内存。
相关文章推荐
- [实践Ok]Linux下查看进程(程序)启动时的环境变量
- Linux判断进程是否存在并启动该进程
- Unix/Linux 那些系统启动后的进程
- 全面解析Linux 内核 3.10.x - 启动1号进程
- Linux 命令详解(六)Linux 守护进程的启动方法
- linux启动进程的方式
- linux 查看进程启动时间(运行时间)
- jvm莫名启动被linux系统杀掉进程
- Linux如何查看进程、杀死进程、启动进程等常用命令
- linux 查看其他用户启动的进程
- Linux下启动停止查看杀死Tomcat进程
- LINUX下/ect/rc.d/目录的作用[linux启动及初始化过程]
- linux下查看某一进程的启动时间和运行时间
- 深入理解Linux OS守护进程的意义
- 详解linux系统的启动过程及系统初始化
- linux 启动 终止 tomcat,查看进程
- linux启动分析——init进程与app启动
- 与Linux初始化相关的进程及配置文件
- Linux下Tomcat的启动、关闭、杀死进程以及查看日志
- Linux下Tomcat的启动、关闭、杀死进程以及查看日志