flip-link — Crate 詳細
flip-link
Stable
ARM Cortex-M 向けのゼロコスト・スタックオーバーフロー保護リンカーラッパー。RAM メモリレイアウトを反転させ、スタックを .bss+.data 領域の下に配置することで、オーバーフロー時に HardFault を発生させて静的変数の破壊を防ぐ。
Zero-cost stack overflow protection for ARM Cortex-M embedded programs by flipping the RAM memory layout so the stack grows toward the RAM boundary instead of into static variables.
動作原理
デフォルトの ARM Cortex-M メモリレイアウトでは、スタックは RAM 上部から下方向に伸び、.bss + .data(静的変数)領域と衝突する可能性があります。flip-link はこのレイアウトを反転させ、スタックを RAM の下端方向に配置します。
この反転レイアウトにより、スタックオーバーフロー時には物理 RAM 境界を超えるアクセスが発生し、ARM Cortex-M の HardFault 例外がトリガーされます。これにより、静的変数の不正な上書きによる未定義動作を防止できます。
インストール
cargo install flip-link
ホスト側のバイナリツールとしてインストールします。Cargo.toml の依存に追加するライブラリではありません。
対応環境
- cortex-m-rt v0.6.x / v0.7.x
- Rust ツールチェイン付属の LLD リンカー
- GNU ld / GNU gcc には非対応(issue #1 で追跡中)
コード例
flip-link をカスタムリンカーとして設定するだけで、ビルド時にメモリレイアウトが自動的に反転されます。cortex-m-rt 0.6.x / 0.7.x と LLD リンカーで動作します。
# .cargo/config.toml[target.'cfg(all(target_arch = "arm", target_os = "none"))']linker = "flip-link"