跳转至主要内容
支持知识库

在 Linux* 中使用sgx_emmt工具时无法看到围圈的堆使用情况

内容类型: 错误讯息   |   文章 ID: 000058606   |   上次审核日期: 2024 年 08 月 02 日

说明

  • 使用 sgx-gdb 调试了 英特尔® Software Guard Extensions (英特尔® SGX) 应用程序,并使用 sgx_emmt 查看内存使用情况
  • 将显示堆栈使用情况,但不显示峰值堆和已提交的预留内存:
    [Peak stack used]: 7 KB
    [Can't get peak heap used]: You may use version script to control symbol export. Please export 'g_peak_heap_used' in your version script.
    [Can't get peak committed reserved memory]: You may use version script to control symbol export. Please export 'g_peak_rsrv_mem_committed' in your version script.

解决方法

根据 Linux* 版英特尔® Software Guard Extensions (英特尔® SGX) 开发人员参考指南的“ 隔区内存测量工具 ”部分,导出安全区版本脚本中g_peak_heap_used和g_peak_rsrv_mem_committed符号,并按如下所述将安全区映像与版本脚本链接。

请参阅 英特尔 SGX SDK 中的 SampleEnclave 以复用其 Makefile 和版本脚本 SampleEnclave/Enclave/Enclave.lds。

  1. 利用 隔区版本脚本的内容创建文件:

    enclave.so

    {

    global:

    g_global_data_sim;

    g_global_data;

    enclave_entry;

    g_peak_heap_used;

    g_peak_rsrv_mem_committed;

    local:

    *;

    };

  2. 将脚本保存在安全区的源目录中为 Enclave.lds。
  3. 将 安全区与版本脚本连接,并在 Makefile 中 定义 符号 __ImageBase ,如下所示:

    $ ld -o enclave.so file1.o file2.o \

    -pie -eenclave_entry -nostdlib -nodefaultlibs –nostartfiles --no-undefined \

    --whole-archive –lsgx_trts --no-whole-archive \

    --start-group –lsgx_tstdc ––lsgx_tservice -lsgx_crypto -

    -end-group \

    -Bstatic -Bsymbolic --defsym=__ImageBase=0 --exportdynamic \

    --version-script=enclave.lds

其他信息:

最新的 英特尔® Software Guard Extensions Linux* 版开发人员参考指南位于 英特尔® Software Guard Extensions SDK for Linux* 最新版本的文档部分。

相关产品

本文适用于 1 产品。

免责声明

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。