linux进程启动时段寄存器的初始化 及意义
来源:互联网 发布:ubuntu安装数据库 编辑:程序博客网 时间:2024/06/05 09:15
#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 四个段都在内存。
- linux进程启动时段寄存器的初始化 及意义
- Linux BIOS启动代码DS与ES寄存器初始化分析
- Linux进程的启动方式及查看进程方法
- 进程与线程的异同及意义
- Linux系统的启动,初始化及关机过程
- Linux系统的启动,初始化及关机过程
- 详解linux系统的启动过程及系统初始化
- 详解linux系统的启动过程及系统初始化
- OSPF进程号的意义及多进程OSPF
- 多线程_进程概述及多进程的意义
- Linux 启动流程与多重引导及虚拟文件系统的意义
- linux内核初始化及启动之start_kernel
- linux内核初始化及启动之start_kernel
- linux内核初始化及启动之start_kernel
- Linux启动新进程的几种方法及比较
- Linux启动新进程的几种方法及比较
- Linux启动新进程的几种方法及比较
- Linux启动新进程的几种方法及比较
- 什么是极限编程?什么是借口编程?什么是敏捷开发?
- ASP.NET 2.0防止同一用户同时登陆
- 两个log4j.properties文件
- 类的虚拟方法与多态
- cglib 指南
- linux进程启动时段寄存器的初始化 及意义
- GDI+ 在Delphi程序的应用 -- 多帧(页)图像动画播放
- MBR, disk partitioning, .... OS
- 计算机应用基础 操作系统初步 题库
- 一个关于java.net.Socket的超时的问题
- Hashtable和HashMap类的区别
- Window 消息大全使用详解
- 查找已经安装的perl模块
- 敏捷(agile)开发与极限编程(XP)(转载)