ELFのスタックサイズメタデータはどのように使用されますか?

ELFのスタックサイズメタデータはどのように使用されますか?

私はRust Unstableの本を読んでいましたが、新機能を見ました。emit-stack-sizes

Rustcフラグは、-Z emit-stack-sizesLLVMがスタックサイズのメタデータをエクスポートできるようにします。

それは言い続ける

注:このLLVM機能は、LLVM 8.0以降、ELFオブジェクトタイプのみをサポートしています。他のオブジェクト型(macOSやWindowsなど)を使用しているターゲットにこのフラグを使用すると、そのフラグは無視されます。

使用しているように見えるLLVM機能はEmitStackSizeSectionオプションです。スタックサイズを知る目的は何ですか?このツールを使用していますか?これがELFの公式機能ですか?それでは、カーネルはそれを使用しますか?これは文書化されているようです.stack_sizesおよびセクション.rel.stack_sizesの下のELFメタデータ.rela.stack_sizes

ベストアンサー1

ここで説明します。オリジナルRFC、「[eRFC]追加済み-Z emit-stack-sizes

究極の目標はコンパイル時にスタックオーバーフローがないことを証明するために、スタック使用量の完全なプログラム分析を有効にします。このプロパティは、MMU / MPUが不足してスタックオーバーフローによってメモリが破損する可能性があるシステムで重要です。スタックオーバーフロー保護を備えたシステムでは、これらの証明を使用してランタイムチェック(スタックナビゲーションやMPUなど)をオプトアウトできます。

そしてさらに、この点でブログエントリ、「分析ツールを使用した静的スタックの実装」。これを行うツールはここで利用できます(錆を含む)。

おすすめ記事