码迷,mamicode.com
首页 > 其他好文 > 详细

[转载]gate 的用法

时间:2015-02-02 17:54:37      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

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 就是最终的服务例程的入口点。

[转载]gate 的用法

标签:

原文地址:http://www.cnblogs.com/Acg-Check/p/4268096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!