1

我正在尝试将两个整数传递给 SGX 飞地,将它们组合起来,然后将结果返回给应用程序。但是,除了创建飞地之外,编译代码时似乎什么都没有发生。没有给出错误,它似乎永远不会到达 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);
    };
};

飞地.cpp

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

}

应用程序.cpp

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;                                                                                                                                                                                                                                                                             }
4

1 回答 1

0

请参阅下面的更正。可信函数in_enclave接收ab,计算总和,并返回结果。在(不受信任的)应用程序代码中,函数结果放在point.

调用函数时检查返回值。从主应用程序代码的角度来看,返回值的类型sgx_status_t是 OK SGX_SUCCESS。SGX 开发人员参考中有错误代码列表或sgx_error.h在源代码中查找。在此示例中,我们可以使用 的值status来查找 ecall 失败的原因。

EDL

    trusted {
        public int in_enclave(int a, int b);
    };

飞地

    int in_enclave(int a, int b){
        return a + b;
    }

应用

    int a = 34, b = 23, point = 0;
    sgx_status_t status = in_enclave(global_eid, &point, a, b);
    if (SGX_SUCCESS != status) {
        // error occurred! 
    }
    printf("%d\n", point);
于 2020-05-29T13:52:04.350 回答