我正在尝试加固项目中的一些可执行文件。为了测试,我使用了一个Hello World程序,并使用checksec进行检查,报告称没有堆栈保护。我对Rust非常陌生,而Google上缺乏信息让我觉得可能是我错过了什么明显的东西。
使用GCC很简单,只需要一个编译器标志:
使用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,以防相关。
test.rust
— 顺便提一下,扩展名是.rs
。 - Shepmaster