Как зарегистрировать пользовательское исключение в Intel SGX?

У меня возникают трудности с работой обработчика пользовательских исключений.

Это код Анклава:

#include "Enclave_DivideZero_t.h"#include "sgx_trts_exception.h"#include "sgx_trts.h"#include <string>

static char buf[200] = "Handler not called";

int divide_by_zero_handler(sgx_exception_info_t* info) {

buf[0] = '1';
return EXCEPTION_CONTINUE_EXECUTION;
}

void Enclave_DivideByZero() {
Ocall_printf(buf);
if (sgx_register_exception_handler(1, divide_by_zero_handler) == NULL) {
Ocall_printf("register failed");
} else {
Ocall_printf("register success");
}
int a(1);
int b(3/(a-a));
(void) a;
(void) b;
Ocall_printf(buf);
}

Мы использовали buf в качестве указания на то, был ли обработчик действительно выполнен. Тем не менее, вывод таков:

Enclave created!
[Ocall printf] - Handler not called
[Ocall printf] - register success
[Ocall printf] - Handler not called <-- should be: "1andler not called" ("1andler" instead of "Handler")

Кроме того, вот App код (то есть недоверенный код)

#include "stdafx.h"#include "sgx_urts.h"#include "Enclave_DivideZero_u.h"#define ENCLAVE_FILE _T("Enclave_DivideZero.signed.dll")
sgx_status_t createEnclave(sgx_enclave_id_t *eid) {
sgx_status_t        ret   = SGX_SUCCESS;
sgx_launch_token_t  token = {0};
int                 updated = 0;
ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, eid, NULL);
return ret;
}
void Ocall_printf( char* str) {
printf("[Ocall printf] - %s\n", str);
}
int _tmain(int argc, _TCHAR* argv[]) {
sgx_enclave_id_t eid;
sgx_status_t res = createEnclave(&eid);
if (res != SGX_SUCCESS) {
printf("App: error-, failed to create enclave.\n");
return -1;
} else {
printf("Enclave created!\n");
}
Enclave_DivideByZero(eid);
return 0;
}

Эта проблема: Как видно из вывода, указывается, что обработчик зарегистрирован успешно, но не выполнен.

1- Почему регистрация не работает?

2- Я пытался поставить регистрацию с App код, и для этого мне пришлось добавить обработчик в edl, проблема для этого заключается в прохождении sgx_exception_info_t *info параметр, который не ясно, какие флаги ему нужны (т.е. [in, .. <'flags'>]). Так, правильно ли определить его внутри анклава?

постскриптум Я запустил код с Prerelease Режим.

[РЕДАКТИРОВАТЬ] Я задокументировал проект + код, который я провел на SGX Вот

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]