簡體   English   中英

讀取SGX飛地中的文件內容

[英]Read file content in SGX enclave

我正在嘗試使用OCalls從安全區域讀取文件的內容。

enclave.edl:

untrusted {
        void ocall_print_string([in, string] const char *str);
        void ocall_read_IMA_file([in, string] const char *filename, [out] char *buf, [out] int *size);
};

enclave.cpp:

void printf(const char *fmt, ...) {
    ocall_print_string(fmt);
}

void read_IMA_file(const char *filename, char *buf, int *size) {
    ocall_read_IMA_file(filename, buf, size);

    printf(buf);
}

//whereas the read_IMA_file function is called with
char *buf;
int size;
read_IMA_file("test.txt", buf, &size);

應用程序中ocall函數的實現:

void ocall_print_string(const char *str) {
    printf("%s\n", str);
}

void ocall_read_IMA_file(const char *filename, char *content, int *size) {
    content = (char*) malloc(sizeof(char) * 10);
    memset(content, '\0', sizeof(char) *10);
    char tmp[] = "1234567890";
    copy(&tmp[0], &tmp[9], content);

    cout << content << endl;
}

但是我收到的結果如下:

123456789(空)

我不確定自己在做什么錯?

如果您希望它輸出1234567890,則可能需要使用malloc(11)而不是malloc(10), 加上您使用copy的方式也可能包含錯誤。

復制(&tmp [0],&tmp [9],內容); 將123456789復制到內容中,據我了解,它排除了最后一個迭代器&tmp [9]。 有關更多詳細信息,您可能需要查看: http : //www.cplusplus.com/reference/algorithm/copy/

另外,我認為您也不會從文件“ test.txt”中讀取任何內容。

在上面的程序中,使用字符類型的指針變量(OUT指針)調用“ read_IMA_file”受信任函數。這里我們傳遞的指針變量沒有任何內存分配。 “ read_IMA_file”啟動一個OCall,該OCall分配內存並執行“復制”操作。現在,所分配的內存在不受信任的區域內有效。 因此,對於“ cout <

由於沒有為“內容”分配可信內存(在調用Ocall之前),因此在Ocall返回期間,“ OUT”指針中不會發生任何回寫操作。 因此,在Ocall返回受信任區域后執行“ print(buf)”時,“ buf”不包含任何有效數據。

請嘗試使用有效的OUT指針指向字符緩沖區(有一些內存分配)或IN和OUT指針指向字符串緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM