[转载]gate 的用法

1、gate descriptor 的 selector 给出目标代码的 code segment descriptor

2、由目标代码 code segment descriptor 的 base address 得出代码的 base

3、这个 base 加上 gate descriptor 的 offset 值,最终得到代码的入口点。
用 C 代码描述为:

void do_call_with_gate(selector_t call_gate_descriptor) {         code_descriptor = get_descriptor(call_gate_descriptor.selector);         base = code_descriptor.base;
        void (*pf)() = (void(*)()) base + call_gate_descriptor.offset;
        pf();
}

在用户代码中使用如下指令:
  call  0x20:00000000                 /*  通过 call gate 调用 */

或:   

jmp 0x20:00000000               
---------------------------------------------------------------   

上面这条指令是 far call 指令格式:

call cs:eip 这种形式。 0x20 为 call gate descriptor selector,在这里 0x000000000 是无意义的。只是为了完整这条指令格式,可以使用任意一个值。   

在 gate descriptor 格式里,高 16 位和低 16 位组成一个 32 位的 offset 值。这个值就是入口地址。在绝大多数的 OS 里使用的平坦内存模式下,base 为 0,那么,这个 offset 就是最终的服务例程的入口点。

时间: 2024-10-10 23:15:36

[转载]gate 的用法的相关文章

[转载]typedef常见用法

注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明 2.数组类型定义例如: typedef int array[2];描述: array等价于 int [2]定义; array a声明等价于int a[2]声明 扩展: typedef int array[M][N];描述: array等价于

转载 NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel

我用的版本是1.25的.每个版本用法有一点不同 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using NPOI.HS

[转载] boost thread用法

原文: http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html boost库中thread的用法官方文档写的不是特别清楚, 这篇文章给出了比较清晰的介绍和例子. Threading with Boost - Part I: Creating Threads May 13, 2009 Boost is an incredibly powerful collection of portable cl

【转载】AsyncTask用法

在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫做UI线程.

C语言函数sscanf()的用法 (转载

在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)

fdisk用法(转载)

Linux下的fdisk功能是极其强大的,用它可以划分出最复杂的分区,下面简要介绍一下它的用法: 对于IDE硬盘,每块盘有一个设备名:对应于主板的四个IDE接口,设备名依次为:/dev/hda,/dev/hdb,/dev/hdc,/dev/hdd等, 如果还有IDE Raid卡,则依次为:/dev/hde,/dev/hdf,/dev/hdg,/dev/hdh.对于SCSI硬盘,则设备名依次为/dev/sda,/dev/sdb...等等 fdisk的命令行用法为: fdisk 硬盘设备名 进入fd

多线程的常见用法详解 --转载

1.多线程:使用多个处理句柄同时对多个任务进行控制处理的一种技术.据博主的理解,多线程就是该应用的主线程任命其他多个线程去协助它完成需要的功能,并且主线程和协助线程是完全独立进行的.不知道这样说好不好理解,后面慢慢在使用中会有更加详细的讲解. 2.多线程的使用: (1)最简单.最原始的使用方法:Thread oGetArgThread = new Thread(new ThreadStart(() =>{});这种用法应该大多数人都使用过,参数为一个ThreadStart类型的委托.将Threa

[转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: $.get(),$.post(),$.ajax(),$.getJSON() 一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表,callback为请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个参数为服务器的状态,

elasticsearch的基本用法(转载)

最大的特点:  1. 数据库的 database, 就是  index  2. 数据库的 table,  就是 tag  3. 不要使用browser, 使用curl来进行客户端操作.  否则会出现 java heap ooxx... curl:  -X 后面跟 RESTful :  GET, POST ...  -d 后面跟数据. (d = data to send) 1. create: 指定 ID 来建立新记录. (貌似PUT, POST都可以)  $ curl -XPOST localh