遇到了一个SGX的项目,第一次接触,两眼一抹黑,又不想读官方文档,踩了坑就百度。做个踩坑记录,以防二次犯蠢。
一、安装
我的电脑不支持sgx,但是实验室有,希望可以在自己的电脑上模拟一个,但目前为止的尝试都失败了
1. 虚拟机
尝试了很多教程,还是这篇从头到尾没有报错,但是最终跑不了项目,后来发现即使是虚拟机也还是需要主机对sgx的支持
2. sgx模拟器
后来我查到如果硬件不支持SGX,在SGX的sdk中有模拟器,2023.9.26尝试的时候,官网上已经没有sgx在windows的sdk安装包了;其他途径下载的sdk安装程序,运行到一半就退出了,啥都没有。
二、编程 Illegal Instruction
之后就只能在实验室的电脑上测试程序了
- 指针数组
不允许new指针数组
eg.自定义结构体* hashMap = new 自定义结构体[数量];
- 库函数里涉及内核态的语句
被调用的函数不用在edl文件里声明,但是只能在用户态,内部不能出现涉及内核态的语句,例如new - 内存不够 其他队员踩的坑
SGX数据规模大的时候,如果可以,把数据分组进行计算,需要显式释放中间变量(注意delete和free的分别)
数据量大的时候,尽量不要新建中间数组变量
发现只能用5MB的时候,就知道一定是设置错了,实例的项目中对于空间要求不大,所以设置的比较小,需要在配置文件(.config.xml)中改设置,<HeapMaxSize>这一项的内容用十六进制改大,我改成了0x8000000。应该是不能超过规定的128M - 重复new相同变量名的变量
在循环中若需要new一个变量,需要在每次循环结束前delete掉,如果可以,直接不在循环里new