gpt4 book ai didi

c++ - 读取 SGX 飞地中的文件内容

转载 作者:行者123 更新时间:2023-11-28 01:55:17 26 4
gpt4 key购买 nike

我正在尝试使用 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);
};

飞地.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 (null)

我不确定我做错了什么?

最佳答案

在上面的程序中,使用字符类型的指针变量(OUT 指针)调用“read_IMA_file”可信函数。这里我们传递指针变量而没有分配任何内存。“read_IMA_file”发起一个分配内存并执行“复制”操作的OCall。现在分配的内存在不受信任的区域内有效。所以我们得到了“cout<

由于没有为“content”分配可信内存(在调用Ocall 之前),因此在Ocall 返回期间“OUT”指针不会发生复制回操作。因此,在 Ocall 返回可信区域后执行“print(buf)”时,“buf”不包含任何有效数据。

请尝试使用指向字符缓冲区的有效 OUT 指针(有一些内存分配)或指向字符串缓冲区的 IN 和 OUT 指针。

关于c++ - 读取 SGX 飞地中的文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com