2016-06-25 14 views
0

シンプルな機能を持つシンプルなプログラムを逆アセンブルしようとしています。このプログラムは32ビットx86ターゲット用にgccでコンパイルされています。 関数は呼び出し命令経由で呼び出されます。 関数の最後にはret命令がありますが、それは正常ですが、leave命令もあります。プログラムはどこにでも入力命令はありません。 私はleaveとretの違い

答えて

1

ままに....この休暇の機能を何疑問に思って:スタック領域を残し 。 このままにしておくと入力できます。したがって、Enter stack areaによる研究者が解放されます。

のRet: 手順から戻ります。 Retはプロシージャの実行を終了し、呼び出し元のプログラムに制御の流れを転送します。 Retにはオプションのオペランドがあります。リターンアドレスがスタックから取り出された後に、スタック上で削除したいバイト数を示します。

+0

ありがとうございますが、私の機能には入力命令はありません。しかし、関数 "push ebp"と "mov%esp、%ebp"のトップが表示されます。それらの2行は、入力と同等かもしれませんか? – Bob5421

1

類似しているが、等しくない。 最初に読み取る Enter vs Push

入力: 、スタック領域の予約。 "Enter"を押すと、スタックの特定のメモリ領域が予約されます。これはパラメータの受け渡しに必要です。 operandという語は、スタックに割り当てるバイト数を指定します。 Byteoperandは、現在のプロシージャのネストを表します。 Byteオペランド0の場合、EBPはスタックに配置されます。その後、ESPの値はEBPにコピーされ、ESPはワードオペランドによって減分されます。

関連する問題