解体転送観察C言語のサブルーチンジャンプとパラメータ

解体転送観察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人の・アカデミーのメンバーが作成します

著者:ハッピーミラー

おすすめ

転載: www.cnblogs.com/ljxt/p/11579865.html