ローカル変数のスタックへの割当順について

ある1つのローカル変数をローカル変数がスタック上に割り当てられている領域の中で、最もアドレスが大きい箇所(関数戻りアドレスが格納されている場所に近い方)へ強制的に配置することは可能でしょうか?

使用しているコンパイラはCA78K0Rです。

このローカル変数をチェックすることで、他のローカル変数が他の処理により壊された事を検出したいです。

Parents
  • nomiさん、こんにちは。NoMaYと申します。

    残念ながら、それは出来なかったと記憶しています。(スタック上での変数の割当順をコントロールする仕様は無かったと記憶しています。)

    なお、そのやり方で検出しようとしている不具合は、コンパイラの生成コードを信用する前提では、配列変数のインデックス計算(および同等の操作としてのポインタ演算)に起因するものしかない筈だと思います。なので、配列変数で1つないし2つぐらい要素を余分に確保して、そこに何かしらのシグニチャを書き込んで後でチェックする、という手法と同じレベルの検出能力になるだろうと思うのです。

    その場所に全く関係の無いポインタ変数の誤用によるメモリ破壊は、やりたいと考えていらっしゃるやり方でも、上に書いたやり方でも、どちらでも思うようには検出することが出来ません。

    なので、やりたいと考えておられたやり方の代替手段として、上に書いたやり方も候補かな、と思いました。

  • 回答ありがとうございます。

Reply Children
No Data