进入Enclave的目的归类

调用硬件指令进入Enclave

进入Enclave通常使用EENTER硬件指令,也可能使用ERESUME硬件指令。

ERESUME

ERESUME主要是因为之前Enclave正常执行流程中,发生了AEX(异步Enclave退出),AEX处理完后,可以通过ERESUME恢复Enclave的正常执行流程。

EENTER的进入点

EENTER的进入点是enclave_entry(也就是EnclaveBase+TCS.OENTRY,Enclave文件的元数据中的TCS布局都已经把这些都安排好了。在形成Enclave文件时,由SignTool来完成),这也是我们在lds文件中标记的全局符号。

//位于sdk/trts/linux/trts_pic.S
/* 
 * ---------------------------------------------------------------------
 * Function: enclave_entry
 *      The entry point of the enclave.
 *
 * Registers:
 *      XAX - TCS.CSSA
 *      XBX - the address of a TCS
 *      XCX - the address of the instruction following the EENTER
 *      XDI - the reason of entering the enclave
 *      XSI - the pointer to the marshalling structure
 */
DECLARE_GLOBAL_FUNC enclave_entry

EENTER

EENTER的目的分类如下:

index值(EDI、proc)进入Enclave的目的
大于等于0或者ECMD_ECALL_PTHREAD正常进入Enclave操作敏感代码数据

ECMD_INIT_ENCLAVE

Enclave初始化时候,Enclave内部需要完成部分初始化操作

ECMD_ORET

OCALL返回了,重新进入Enclave

ECMD_MKTCS

Enclave内外联动完成动态TCS的生成

ECMD_UNINIT_ENCLAVE

销毁Enclave时候,进入Enclave完成部分销毁工作

ECMD_EXCEPT

AEX后,OS初步处理异常后,进入Enclave,完成异常处理

下面这小段代码是为了说明,EENTER的时候具体会根据寄存器值的不同,进行不同的操作流程,也就是不同的进入Enclave的目的。

/* 
 * ----------------------------------------------------------------------
 * Dispatch code according to CSSA and the reason of EENTER
 *      eax >   0 - exception handler
 *      edi >=  0 - ecall
 *      edi == -1 - do_init_enclave
 *      edi == -2 - oret
 * Registers
 *      No need to use any register during the dispatch
 * ----------------------------------------------------------------------
 */

!!注意一个区别!!!

ERESUME会让我们在AEX处理完之后重新进入Enclave。而EENTER中有一个目的是进入Enclave对AEX异常原因使用Enclave异常句柄进行解决。

这里普及以下AEX处理流程。AEX处理可以分为“一进一出”和“二进二出”。

一进一出。Enclave发生AEX,退出Enclave(下图左边这个EXIT步骤)。然后OS进行异常解决。然后返回Enclave进行正常流程(下图RESUME步骤,使用ERESUME硬件指令,注意一个是RESUME过程,一个是我说的ENCLU ERESUME硬件指令)。

二进二出。如图(CoSMIX画的图)。Enclave发生AEX,退出Enclave(下图左边这个EXIT步骤)。然后OS进行初步的异常解决。然后有的异常只有Enclave内部注册的和异常句柄才能解决,那么就要多一次的进入异常句柄完成异常处理(下图ENTER步骤)。Enclave内部异常句柄处理完之后,多一次的退出Enclave,回到OS的异常处理句柄(下图右边这个EXIT步骤)。然后再返回到Enclave进行正常执行流程(下图RESUME步骤)

CoSMIX: a compiler-based system for secure memory instrumentation and execution in enclaves》顺带提一句,CoSMIX主要是为了解决这种二进二出的开销,因为我们其实可以Enclave内部直接转到异常句柄,不需要退出到OS的错误句柄中。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值