首页 > 代码库 > [转载]gate 的用法
[转载]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 就是最终的服务例程的入口点。
[转载]gate 的用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。