解体転送観察C言語のサブルーチンジャンプとパラメータ
Cは、高レベルの言語である、我々は彼らのジャンプやサブルーチンパラメータの転送の原則を知らない時間を使用し、我々は今で道を分解して、スタックに解体、原則及び手続後にコードの実行を見てください。
次のCコードは、4つのパラメータの加算を実施します。
テキスト
アームのlinux-gnueabi-GCC -S sum.c得られたコンパイルされたコード:テープは、その後分解機能、コマンドの入力です。以下
高エネルギーアセンブリコードの警告
パラメータの数が4未満である場合、最初のサブ関数は直接四つのパラメータに割り当てられた急速エンジェルR0、R1、R2、R3に、、が、パラメータの数がより大きければ:そこいくつかのポイントこのコンパイルを超えています4、スタックプッシュ動作パラメータの使用に関する。
アセンブリコードを分析する簡単以下、最初のパラメーターは、4つのパラメータが渡され、
次に、ジャンプ接続でジャンプ、BL合計。サブルーチンへの合計ジャンプ、サブルーチンレジスタR0に加算され、保存され、その後、メインサブルーチン関数に出て、BX LRを通じ、
パラメータ横4~6パラメータのパラメータから、増加します。
このようなパラメータの数が、それはスタック上のパラメータの前6、以前の分析と同様、パラメータの数が増加する5つ以上に増加させます。次のように再び観測された分解:
あなたは、以下に示すように、最初の4つ又は、元の第五及び第六のパラメータは、スタックを行う、引き続き発生する変更を確認できます。
オールド・9人の・アカデミーのメンバーが作成します
著者:ハッピーミラー