#intel-sgx #backtrace #sgx-sdk #confidential-computing #applications #write #run-time

nightly no-std sgx_backtrace

Rust SGX SDK 提供了在 Rust 编程语言中编写 Intel SGX 应用程序的能力

3 个稳定版本

1.1.1 2020年4月3日
1.1.0 2019年12月19日
1.0.9 2019年9月16日

#1790 in 硬件支持

自定义许可证

775KB
14K SLoC

Rust 9K SLoC // 0.1% comments C 4K SLoC // 0.2% comments Shell 1.5K SLoC // 0.1% comments M4 119 SLoC // 0.4% comments Automake 106 SLoC // 0.4% comments GNU Style Assembly 29 SLoC // 0.5% comments Bazel 5 SLoC AWK 2 SLoC

注意

请访问我们的 主页 了解用法。谢谢!


lib.rs:

用于在运行时获取堆栈跟踪的库

此库旨在补充标准库对 RUST_BACKTRACE=1 的支持,允许程序在运行时获取堆栈跟踪。此库生成的堆栈跟踪不需要解析,例如,并暴露了多个后端实现的函数。

实现

此库使用多种策略来实际获取堆栈跟踪。例如,Unix 默认使用 libgcc 的 libunwind 绑定来获取堆栈跟踪,但 MacOS 使用 coresymbolication 或 dladdr 来获取符号名称,而 Linux 使用 gcc 的 libbacktrace。

当使用此库的默认功能集时,将选择当前平台“最合理”的默认设置,但也可以更精细地控制激活的功能。

API 原则

此库试图尽可能灵活,以适应获取堆栈跟踪的不同后端实现。因此,目前导出的函数是基于闭包的,而不是可能预期的基于迭代器的版本。这是由于底层 API 使用的限制。

用法

首先,将此添加到您的 Cargo.toml 中

[dependencies]
sgx_backtrace = "1.0.8"

然后

extern crate sgx_backtrace;

fn main() {
    sgx_backtrace::set_enclave_path("enclave.signed.so");
    sgx_backtrace::trace(|frame| {
        let ip = frame.ip();
        let symbol_address = frame.symbol_address();

        // Resolve this instruction pointer to a symbol name
        sgx_backtrace::resolve_frame(frame, |symbol| {
            if let Some(name) = symbol.name() {
                // ...
            }
            if let Some(filename) = symbol.filename() {
                // ...
            }
        });

        true // keep going to the next frame
    });
}

依赖关系

~2MB
~42K SLoC