[英]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.