读取 SGX 飞地中的文件内容
Read file content in SGX enclave
我正在尝试使用 OCalls 从 enclave 读取文件的内容。
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, '[=12=]', sizeof(char) *10);
char tmp[] = "1234567890";
copy(&tmp[0], &tmp[9], content);
cout << content << endl;
}
但我收到的结果如下:
123456789 (null)
我不确定我做错了什么?
如果您希望它输出 1234567890,那么您可能需要 malloc(11) 而不是 malloc(10),plus 您使用复制的方式可能包含一个错误也是。
复制(&tmp[0], &tmp[9], 内容);
正在将 123456789 复制到内容中,据我所知,它排除了最后一个迭代器 &tmp[9] 。有关更多详细信息,您可能需要查看:http://www.cplusplus.com/reference/algorithm/copy/
此外,我认为您也没有读取文件 "test.txt" 中的任何内容。
在上面的程序中,"read_IMA_file" 受信函数是使用 character.Here 类型的指针变量(OUT 指针)调用的,我们在传递指针变量时没有分配任何内存。
"read_IMA_file" 启动一个分配内存的 OCall 并执行 "Copy" operation.Now 分配的内存在不受信任的区域内有效。所以我们得到了“cout<
由于没有为"content"分配可信内存(在调用Ocall之前),所以在Ocall returns期间"OUT"指针没有发生复制回操作。
因此 "buf" 在受信任区域中的 Ocall returns 之后执行 "print(buf)" 时不包含任何有效数据。
请尝试使用指向字符缓冲区的有效 OUT 指针(分配了一些内存)或指向字符串缓冲区的 IN 和 OUT 指针。
我正在尝试使用 OCalls 从 enclave 读取文件的内容。
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, '[=12=]', sizeof(char) *10);
char tmp[] = "1234567890";
copy(&tmp[0], &tmp[9], content);
cout << content << endl;
}
但我收到的结果如下:
123456789 (null)
我不确定我做错了什么?
如果您希望它输出 1234567890,那么您可能需要 malloc(11) 而不是 malloc(10),plus 您使用复制的方式可能包含一个错误也是。
复制(&tmp[0], &tmp[9], 内容); 正在将 123456789 复制到内容中,据我所知,它排除了最后一个迭代器 &tmp[9] 。有关更多详细信息,您可能需要查看:http://www.cplusplus.com/reference/algorithm/copy/
此外,我认为您也没有读取文件 "test.txt" 中的任何内容。
在上面的程序中,"read_IMA_file" 受信函数是使用 character.Here 类型的指针变量(OUT 指针)调用的,我们在传递指针变量时没有分配任何内存。 "read_IMA_file" 启动一个分配内存的 OCall 并执行 "Copy" operation.Now 分配的内存在不受信任的区域内有效。所以我们得到了“cout<
由于没有为"content"分配可信内存(在调用Ocall之前),所以在Ocall returns期间"OUT"指针没有发生复制回操作。 因此 "buf" 在受信任区域中的 Ocall returns 之后执行 "print(buf)" 时不包含任何有效数据。
请尝试使用指向字符缓冲区的有效 OUT 指针(分配了一些内存)或指向字符串缓冲区的 IN 和 OUT 指针。