目标 code segment 的访问

转自:点击打开链接


当程序中使用指令 call / jmp,以及通过 int 引发中断例程的执行,这将都是对目标的 code segment 进行访问,当通过权限的检查后程序将会跳转到目标的 code segment 进行执行。

  在 code segment 的访问过程中涉及到权限级别的改变,stack 的改变等问题。


访问目标 code segment 的几种情形:

1、call / jmp offset 
  在段内直接 call / jmp,不改变目标 code segment

2、call / jmp code_selector:offset 
  直接 call / jmp 目标 code segment

3、call / jmp callgate_selector:offset 
  使用 call gate 的 call / jmp 形式

4、call / jmp tss_selector:offset  
  使用 TSS gate 的直接 call / jmp 形式,使用了 TSS 任务切换机制

5、call / jmp taskgate_selector:offset
  通过 task gate 使用 TSS 任务切换机制

6、int n
  使用 int 指令调用 interrupt / trp 例程,或者 task gate 提供的任务切换机制

7、使用 syscall / sysret、 sysenter / sysexit 指令快速调用系统服务例程

8、ret 或 iret
  利用 ret 以及 iret 指令构造另一种访问 code segment 的途径。


  以上是程序中主动发起访问目标 code segment 大多数方法,在继续执行之前,processor 会进行一系统的检查,包括相关的权限检查、type 检查、limit 检查等,通过了检查后,加载到 cs:rip 后继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值