コンテンツにスキップ

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 で追跡中)
バージョン
0.1.12
ライセンス
MIT OR Apache-2.0
メンテナンス
活発に開発中

コード例

flip-link をカスタムリンカーとして設定するだけで、ビルド時にメモリレイアウトが自動的に反転されます。cortex-m-rt 0.6.x / 0.7.x と LLD リンカーで動作します。

.cargo/config.toml でリンカーを flip-link に設定
# .cargo/config.toml
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
linker = "flip-link"

関連 Crates