我注意到有些人可以用C代码编写SGX代码。我尝试这样做,假设我有以下代码。仍然我不知道如何编写可以编译这些文件的Makefile,因为我在网上找不到太多有关如何编译它的信息。

main.c

#define ENCLAVE_FILE "enclave.signed.dll"
#define MAX_BUF_LEN 100
#include "sgx_urts.h"
#include "enclave_u.h"
#include "stdio.h"
#include <string>

int main()
{

    //Encalve starts
    sgx_enclave_id_t eid;
    sgx_status_t    ret = SGX_SUCCESS;
    sgx_launch_token_t token = { 0 };
    int updated = 0;
    char buffer[MAX_BUF_LEN] = "Hello world!";

    ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL);

    if (ret != SGX_SUCCESS) {
        printf("\nApp: error %#x, failed to create enclave. \n", ret);
    }

    //Encalve starts


    // (ECALL will happen here).

    printf("\nApp: Buffertesrs:\n");

    printf("App: Buffer before ECALL: %s\n", buffer);

    encalveChangebuffer(eid, buffer, MAX_BUF_LEN);

    printf("App: Buffer before ECALL: %s\n", buffer);



}


encalve.c

#include "enclave_t.h"
#include "sgx_trts.h"
#include <stdio.h>
#include <string.h>

void encalveChangebuffer(char * buf, size_t len) {

    const char * secret = "Hello from Enclave 2";
    if (len > strlen(secret))
        memcpy(buf, secret, strlen(secret) + 1);
    else
        memcpy(buf, "false", strlen("false") + 1);

}


encalve.edl

enclave {
    trusted {
        /* define ECALLs here. */
        public void encalveChangebuffer([in,out,size=len] char * buf, size_t len);
    };

    untrusted {
        /* define OCALLs here. */
    };
};


我正在寻找可以编译sgx c代码的Makefile。

最佳答案

查看此参考:
SGX Developer Reference

它包含有关Edger8r工具的部分,解释了如何运行该工具将enclave.edl编译为一堆C文件。
它还有一个有关sgx_sign.exe的部分,用于生成签名的DLL。
有一个“ Enclave Project Files”部分,其中列出了所有必需的文件和构建工具设置。

我没有所有的答案,但这应该是构建make文件的一个很好的起点。

08-16 21:48