Elf
ELF 的堆棧大小元數據有什麼用途?
我正在閱讀 Rust 不穩定的書,我看到了一個新功能
emit-stack-sizes
,rustc 標誌
-Z emit-stack-sizes
使 LLVM 發出堆棧大小的元數據。它繼續說
**注意:此 LLVM 功能僅支持 LLVM 8.0 起的 ELF 對象格式。**將此標誌與使用其他對象格式(例如 macOS 和 Windows)的目標一起使用將導致它被忽略。
它似乎正在使用的 LLVM 功能是
EmitStackSizeSection
選項。知道堆棧大小的目的是什麼?工具使用這個嗎?這是 ELF 的官方功能嗎?如果是,核心是否會使用它?這似乎記錄在ELF 元數據中的部分.stack_sizes
、、.rel.stack_sizes
和.rela.stack_sizes
這在原始 RFC 中有所概述,“$$ eRFC $$添加
-Z emit-stack-sizes
“最終目標是**啟用對堆棧使用的整個程序分析,以證明在編譯時不存在堆棧溢出。**這種屬性在缺少 MMU / MPU 並且堆棧溢出會損壞記憶體的系統中很重要。在具有堆棧溢出保護的系統中,此類證明可用於選擇退出執行時檢查(例如堆棧探測器或 MPU)。
在這篇博文中,“實現一個靜態堆棧使用分析工具”。可在此處獲得用於此的工具(帶有鏽跡)