如何向Rust可执行文件添加栈保护机制?

8
我正在尝试加固项目中的一些可执行文件。为了测试,我使用了一个Hello World程序,并使用checksec进行检查,报告称没有堆栈保护。我对Rust非常陌生,而Google上缺乏信息让我觉得可能是我错过了什么明显的东西。
使用GCC很简单,只需要一个编译器标志:-fstack-protector-all。对于LLVM,我找到的最接近的东西是safe stack。然而,当我尝试将其传递给LLVM时,Rust编译器似乎无法识别它。例如:
rustc -C llvm-args="-fsanitize=safe-stack" -C link-arg="-fsanitize=safe-stack" test.rust

结果为

rustc: 未知命令行参数'-fsanitize=safe-stack'。请尝试:'rustc -help' rustc:您的意思是'-spp-no-call'吗?

我正在使用Rust 1.23.0。我正在尝试在x86_64和armeabi-v7a上添加这些canaries,以防相关。


2
test.rust — 顺便提一下,扩展名是.rs - Shepmaster
2个回答

7

6

目前您无法使用LLVM的SafeStack。

-fsanitize=safe-stack是一个Clang命令行选项,不一定是LLVM选项。这可能解释了为什么会出现错误。

SafeStack支持最初在问题26612中提出,但启用它被推迟,直到可以进行更多调查。

由于SafeStack是一种sanitizer,接下来需要跟进的是问题39699,这是更多sanitizer的跟踪问题。目前仅支持少数sanitizer和平台。这可能像“简单”添加到列表并创建PR以启用它那样。


话虽如此,我相信Rust确实有一些堆栈保护。例如,这个最近的问题讨论了一些即将到来的对glibc的更改将如何影响Rust的堆栈保护计算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接