Elf

ELF 的堆棧大小元數據有什麼用途?

  • June 1, 2022

我正在閱讀 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)。

在這篇博文中,“實現一個靜態堆棧使用分析工具”。可在此處獲得用於此的工具(帶有鏽跡)

引用自:https://unix.stackexchange.com/questions/704212