C++ 英特尔SGX将整数从应用程序传递到Enclave

C++ 英特尔SGX将整数从应用程序传递到Enclave,c++,intel,sgx,enclave,C++,Intel,Sgx,Enclave,我试图将两个整数传递给SGX enclave,合并它们,然后将结果返回给应用程序。 然而,除了创建enclave之外,在编译代码时似乎什么都没有发生。没有给出错误,而且似乎永远不会到达ECALL函数 如果有人知道我可以作为参考的教程,我将不胜感激 EDL: enclave { from "sgx_tae_service.edl" import *; /* enum definition */ enum TEE_ERROR { TEE_ERROR_INVA

我试图将两个整数传递给SGX enclave,合并它们,然后将结果返回给应用程序。 然而,除了创建enclave之外,在编译代码时似乎什么都没有发生。没有给出错误,而且似乎永远不会到达ECALL函数

如果有人知道我可以作为参考的教程,我将不胜感激

EDL:

enclave {
    from "sgx_tae_service.edl" import *;

    /* enum definition */
    enum TEE_ERROR {
        TEE_ERROR_INVALID_SIGNATURE = 0,
        TEE_ERROR_INVALID_COUNTER = 1,
        TEE_ERROR_INVALID_SECRET = 2
    };


    trusted {
        /* define ECALLs here. */
        public int in_enclave([in] int* a, [in] int* b);
};

    untrusted {
        /* define OCALLs here. */
        void ocall_print_int([out] int* i);
    };
};
Enclave.cpp

int in_enclave(int* a, int* b){
        ocall_print("In the Enclave.");
        int result =0;
        result = a + b;
        ocall_print_int(&result);

}
int test(void) {
    if (initialize_enclave(&global_eid, "enclave.token", "enclave.signed.so") < 0) {
        std::cout << "Fail to initialize enclave." << std::endl;
        return 1;
    }else{

    std::cout<<"Enclave made. "<<"\n";
}
        int a =34, b =23,point = 0;
        in_enclave(global_eid,&point,&a,&b);

    return 0;                                                                                                                                                                                                                                                                             }
App.cpp

int in_enclave(int* a, int* b){
        ocall_print("In the Enclave.");
        int result =0;
        result = a + b;
        ocall_print_int(&result);

}
int test(void) {
    if (initialize_enclave(&global_eid, "enclave.token", "enclave.signed.so") < 0) {
        std::cout << "Fail to initialize enclave." << std::endl;
        return 1;
    }else{

    std::cout<<"Enclave made. "<<"\n";
}
        int a =34, b =23,point = 0;
        in_enclave(global_eid,&point,&a,&b);

    return 0;                                                                                                                                                                                                                                                                             }
int测试(无效){
if(initialize_enclave(&global_eid,“enclave.token”,“enclave.signed.so”)<0){

std::cout请参见下面的更正。enclave中的受信任函数
接收
a
b
,计算总和并返回结果。在(不受信任的)应用程序代码中,函数结果位于

调用函数时,检查返回值。从主应用程序代码的角度来看,返回值的类型为
sgx_status\u t
,其中OK为
sgx_SUCCESS
。在sgx developer参考中或在源代码中查找错误代码列表。在本例中,我们可以使用
status的值
查找ecall失败的原因

EDL 飞地 应用
inta=34,b=23,点=0;
sgx_status_t status=in_enclave(全局隔离区和点a、b);
如果(SGX_成功!=状态){

//出现错误!请参见下面的更正。enclave中的受信任函数
接收
a
b
,计算总和并返回结果。在(不受信任的)应用程序代码中,函数结果放在
点中

调用函数时,检查返回值。从主应用程序代码的角度来看,返回值的类型为
sgx_status\u t
,其中OK为
sgx_SUCCESS
。在sgx developer参考中或在源代码中查找错误代码列表。在本例中,我们可以使用
status的值
查找ecall失败的原因

EDL 飞地 应用
inta=34,b=23,点=0;
sgx_status_t status=in_enclave(全局隔离区和点a、b);
如果(SGX_成功!=状态){
//发生错误!