Чтение содержимого файла в анклаве SGX

Я пытаюсь прочитать содержимое файла из анклава с помощью OCalls.

анклав.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 (нулевой)

Я не уверен, что я делаю неправильно?


person wasp256    schedule 03.01.2017    source источник


Ответы (1)


Если вы ожидаете, что он выведет 1234567890, вам может понадобиться malloc(11) вместо malloc(10), плюс то, как вы используете копирование, также может содержать ошибку.

копировать(&tmp[0], &tmp[9], содержимое); копирует 123456789 в содержимое, исключая последний итератор &tmp[9], насколько я понимаю. Для получения более подробной информации вы можете посмотреть: http://www.cplusplus.com/reference/algorithm/copy/

Кроме того, я думаю, что вы также не читаете какой-либо контент из файла «test.txt».

person Richard Li    schedule 09.01.2017