我正在努力强化我正在进行的项目中的一些可执行文件.为了测试,我正在使用一个hello world程序,并使用checksec检查它,它报告没有金丝雀.我对Rust很陌生,谷歌缺乏信息让我觉得我错过了一些明显的东西.
使用GCC,它是一个简单的编译器标志:-fstack-protector-all.我发现的最接近LLVM的是安全堆栈.但是,当我尝试将其传递给LLVM时,Rust编译器似乎没有认识到这一点.例如:
rustc -C llvm-args="-fsanitize=safe-stack" -C link-arg="-fsanitize=safe-stack" test.rust
Run Code Online (Sandbox Code Playgroud)
结果是
rustc:未知的命令行参数'-fsanitize = safe-stack'.试试:'rustc -help'sugcc:你的意思是'-spp-no-call'?
我正在使用Rust 1.23.0.我试图不仅在x86_64上添加这些金丝雀,而且在armeabi-v7a上添加这些金丝雀,以防相关.
目前,不支持此功能:
我们更新了LLVM,因此在我们的LLVM中支持这个[安全堆栈属性],我认为默认情况下启用此功能可能需要一些调查,可能还需要RFC,所以我现在要关闭它.
- alexcrichton https://github.com/rust-lang/rust/issues/26612
我无法找到此功能的RFC.
您现在无法使用LLVM的SafeStack.
-fsanitize=safe-stack是一个Clang命令行选项,不一定是LLVM命令行选项.这可能解释了为什么你会收到你所犯的错误.
SafeStack支持最初是在问题26612中提出的,但启用它可以推迟到可以进行更多调查.
由于SafeStack是一种消毒剂,接下来要做的就是问题39699,这是更多消毒杀菌剂的跟踪问题.目前仅支持少数消毒杀菌剂和平台.将它添加到列表并创建PR以启用它可能就像"简单"一样.
话虽这么说,我相信Rust确实有一定的堆栈保护.例如,最近的这个问题讨论了glibc即将发生的一些变化将如何影响Rust的堆栈保护计算.
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |