GCCでコンパイルされたいくつかのx86アセンブリコードを逆アセンブルしています。
はすぐに関数を呼び出す前に、私が持っている:プッシュした後
$esp = 0xffffdbcc
:(push
が前であっても)を与えると呼ばれる関数の最初の行にブレークポイントを設定
$esp = 0xffffdbd0
:
$esp = 0xffffdbc8
なぜ$esp
がlそれ?理論的には、関数に移動するだけでスタックポインタが変更されることはなく、push
の後に変更されますか?どうしたの?
私はアライメントと関係があり、何とか何らかの形でアライメントが行われていることを、call
とpush
アセンブリの説明書で確認しています。しかしそれは推測です。何も思いつきません。
誰かが知っていることができますか?
x86命令セットについて学んでください。インテルとAMDのCPUマニュアルには、各命令の内容についての詳細な説明が含まれています。 –
うん。 。 。私はそれに取り組んでいます。 – imallett