Intel SGX开发者参考书(三)—— 使用Intel SGX SDK工具(二)

  • Post author:
  • Post category:其他


@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



Intel SGX Debugger Enabling

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内存测量工具提供以下作用:

  1. 获取Enclave的栈峰值使用值。
  2. 获取Enclave的堆峰值使用值。
  3. 获取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升级/降级/重置。

CPUSVN配置工具Dialog

如有误,请指正!感激!



版权声明:本文为weixin_41598390原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。