関数Aが関数Bを呼び出した後、Bのコードは、Aのローカル変数に影響を与えることなく、すべてのレジスタ(スタックポインタとBのパラメータを保持するレジスタを除く)を破棄できますか?したがって、関数Bが関数Aに戻った後、関数Aはすべてのローカルをスタックからポップバックしますか(関数Bの実行中にレジスタの状態が変更された可能性があるため)?
グローバル変数はどうですか?関数Bは、グローバル変数の状態に影響を与えるレジスタ操作についてまったく心配する必要がありますか?
(私がこれを尋ねる主な理由は、実行時に配列を実行可能にするためにを使用して関数Bとしてマシンコードを挿入しmprotect
、次に配列ポインターを関数ポインターにキャストして呼び出すことを実験したいと思うからです。上記の質問で私は願っていますBの遊び場の範囲を把握するため。)