@Intel SGX 读书笔记…
Enclave调试器
只有调试模式的Enclave可以使用Intel SGX调试器进行调试:
- Enclave必须构建为可调试的。在Enclave Settings中的Advanced设置里面取消勾选Ensure the enclave cannot be launched in debug mode。
- 在应用程序中,Enclave必须在调试模式下加载。为了在调试模式下加载Enclave,调试器标志(sgx_create_encalve的第二个参数)必须为TRUE。(在后面的函数说明里面会说的,不过在很后面,不知道我能不能坚持到)
为了利用Intel SGX调试器调试Enclave,你必须在Intel SGX 应用程序中改变项目属性。
1.点击右键不可信应用程序项目,选择
属性
。
2.点击
属性
->
调试
,并如下选择
Intel SGX Debugger
。
3.在你选择
Intel SGX Debugger
之后,编辑
Working Directory
为**$(OutDir)**。
在VS2017中启动和调试一个Enclave应用程序
一旦选择了Intel SGX 调试器,设置断点和进入Enclave,其工作原理与VS2017中正常应用程序调试完全相同。
附加到正在运行的进程中的Enclave并对其进行调试
使用以下步骤附加到正在运行的进程中的Enclave并对其进行调试:
1.
调试->附加到进程->选择->Intel SGX code
2.突出显示要附加和调试的进程,然后单击
Select
按钮
3.在弹出的对话框中,
选择代码类型
中选择
调试以下代码类型
,然后勾选Intel® SGX
4.点击
确定
,再点击
附加
即可
当使用Intel SGX调试器作为远程调试器时,主机需要安装Intel SGX SDK和Intel SGX
调试器;目标机器需要Intel SGX调试器和VS2017远程调试器服务器:
1.在目标主机上,开启
远程调试监管器
(msvsmon.exe)
2.在主机上,选择
调试->附加到进程->选择->Intel SGX代码
,并将限定符设置为目标机器名或IP地址。
中途需要学习一下远程调试的建立~
https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging
我参考了这个https://www.cnblogs.com/gougou1981/p/11639887.html
Intel SGX调试器可用于调试Enclave项目和不受信任的应用程序,但不能用于调试uRTS和tRTS,它们是Intel SGX SDK的一部分。当uRTS和tRTS中发生断点时,调试器无法显示任何特征,并且按钮
step out
也不起作用了。要修复这个问题,请在uRTS和tRTS之外手动添加一个断点。
Intel SGX调试器只支持本地C/C++代码。它不能调试托管代码或本机/托管代码混合模式。如果Enclave是混合模式下使用,您可以使用调试器附加功能来调试它。(什么玩意,等搞了远程调试可能就懂了吧)
附加到正在运行的通用Windows应用程序中的Encalve并对其进行调试
一个通用Windows平台(UWP)应用程序中的Enclave只能通过attach模式进行调试,因为Intel SGX调试器不能直接启动UWP应用程序。
Enclalve内存测量工具
Enclave是一个独立的环境。Intel SGX SDK提供sgx_emmt来测量Enclave运行时受保护的内存的真正使用情况。
目前,Enclave内存测量工具提供以下作用:
- 获取Enclave的栈峰值使用值。
- 获取Enclave的堆峰值使用值。
-
获取Enclave的保留内存峰值使用值。
该工具以KB为单位报告内存使用值。一旦你获取了精确的内存使用值,你可以基于此信息重做Enclave配置文件,以充分利用受保护的内存。
该工具是Windows OS下的一个独立应用程序。要度量一个Enclave所消耗的受保护内存,可以利用此工具启动一个测试程序,该程序返回来加载Enclave。对sgx_emmt使用以下语法:
sgx_emmt [–-enclave=<enclave list>] application_name <application args>
参数:
–-enclave
这是一个可选择的参数。它遵循<enclave list>指定的度量目标。如果你不提供这个参数,工具就会选择受保护内存使用信息所给的每一个可以测量的Enclave。如果有多个Enclave需要测量,所有的Enclave名都要在<enclave list>中用逗号(,)隔开,没有空格。
application _name:
这个参数是说明测试应用程序的名字的。应用程序参数在<application args>中提供(如果有的话)。
举例:
假设一个测试应用程序叫myAPP(这个程序咋写?),它有两个输入参数。这个测试应用程序管理三个Enclave,分别叫做:myEnclave1,myEnclave2,myEnclave3。
1.测试所有的Enclaves:
sgx_emmt myApp.exe app_arg1 app_arg2
2.测试两个Enclave目标:
sgx_emmt –-enclave=myEnclave1.signed.dll,myEnclave2.signed.dll myApp.exe app_arg1 app_arg2
注意:Enclave内存测量工具的工作原理是基于这样的假设:测量目标是可测量的Enclave,并且在默认情况下可以找到测量的标识文件。一个可测量的Enclave应符合以下要求:
1.该Enclave应该是可调试的Enclave。这意味着<DisableDebug>中的配置参数应该是0.
2.这个需要Enclave调试信息。该Enclave模块需要在构建时生成调试信息(/Zi/ZI/Z7和/DEBUG)。
3.Enclave应该在调试模式下启动。为了在调试模式下启动,当调用sgx_create_enclave函数去加载Enclave时,需要设置调试flag为1.
要在默认情况下启用标识文件,请定位生成标识文件的位置或将标识文件放置在当前工作目录中。
其实我实验的结果是(先继续下去吧):
E:\SGX\SGX\bin\x64\Release>sgx_emmt.exe --enclave=D:\HelloWorld\Project1\Simulation\Enclave1.signed.dll D:\HelloWorld\Project1\Simulation\Project1.exe
The command line is: "D:\HelloWorld\Project1\Simulation\Project1.exe ".
The enclave "D:\HelloWorld\Project1\Simulation\Enclave1.signed.dll" does not exist.
CPUSVN配置工具
CPUSVN表示CPU的安全版本号,它影响密钥派生和报告生成过程。CPUSVN不是一个数字概念,将随着硬件升级/降级而升级/降级。为了在不修改硬件的情况下模拟CPUSVN升级/降级,Intel SGX SDK提供了CPUSVN配置工具,供你配置CPUSVN。CPUSVN配置工具仅适用于Intel SGX仿真模式,可以作为命令行工具或GUI工具启动。这取决于你的输入。
命令行语法
为了运行Intel SGX CPUSVN配置工具,使用下列语法:
sgx_config_cpusvn [Command]
CPUSVN配置工具命令
-upgrade | 模拟CPUSVN升级 |
-downgrade | 模拟CPUSVN降级 |
-reset | 恢复CPUSVN的默认值 |
如果省略[Command],则该工具将作为GUI工具启动,并显示以下对话框。然后,你可以通过单击响应的按钮来模拟CPUSVN升级/降级/重置。
如有误,请指正!感激!