いくつかのアセンブリコードを理解しようとしていて、数行を除いてそのほとんどを処理することができました。私は内部で起こっていることのほとんどを理解することができますが、コードの始めと終わりに何が起きているのか(そしてなぜそれが)起こっているのかを完全に理解することはできません。誰かがこれにいくつかの光を当てることができますか?一部のアセンブリステートメントの目的の理解
int main() {
int a, b;
a = 12;
b = 20;
b = a + 123;
return 0;
}
逆アセンブルバージョン:
8048394:8d 4c 24 04 lea 0x4(%esp),%ecx ; ??
8048398:83 e4 f0 and $0xfffffff0,%esp ; ??
804839b:ff 71 fc pushl -0x4(%ecx) ; ??
804839e:55 push %ebp ; Store the Base pointer
804839f:89 e5 mov %esp,%ebp ; Initialize the Base pointer with the stack pointer
80483a1:51 push %ecx ; ??
80483a2:83 ec 4c sub $0x4c,%esp ; ??
80483a5:c7 45 f8 0c 00 00 00 movl $0xc,-0x8(%ebp) ; Move 12 into -0x8(%ebp)
80483ac:c7 45 f4 14 00 00 00 movl $0x14,-0xc(%ebp) ; Move 20 into -0xc(%ebp)
80483b3:8b 45 f8 mov -0x8(%ebp),%eax ; Move [email protected](%ebp) into eax
80483b6:83 c0 7b add $0x7b,%eax ; Add 123 to [email protected]
80483b9:89 45 f4 mov %eax,-0xc(%ebp) ; Store the result into [email protected](%ebp)
80483bc:b8 00 00 00 00 mov $0x0,%eax ; Move 0 into eax
80483c1:83 c4 10 add $0x10,%esp ; ??
80483c4:59 pop %ecx ; ??
80483c5:5d pop %ebp ; ??
80483c6:8d 61 fc lea -0x4(%ecx),%esp ; ??
スタックのどこにあるのかを描画すると便利です。 –
コメント内のオペコードの英語名を書くだけではあまり役に立ちません。それらをもっと「高いレベル」にしてみてください。そして、あなたが実際に解体から何かを学びたいなら、コンパイラのものではなく人間のコードを試してみてください。 – ruslik
通常、最初と最後のものは一般的なスタック設定コードです。割当と整列など。 – zdav