🔹 C语言代码
int add(int a, int b) {
int result = a + b;
return result;
}
int main() {
int x = 10;
int y = 20;
int sum = add(x, y);
return 0;
}
🔹 通用寄存器
EAX
0x00000000
EBX
0x00000000
ECX
0x00000000
EDX
0x00000000
🔹 x86汇编代码
08048400main:
0804840055push ebp
0804840189 e5mov ebp, esp
0804840383 ec 10sub esp, 16
08048406c7 45 fc 0a 00 00 00mov DWORD PTR [ebp-4], 10
0804840dc7 45 f8 14 00 00 00mov DWORD PTR [ebp-8], 20
080484148b 45 f8mov eax, DWORD PTR [ebp-8]
0804841750push eax
080484188b 45 fcmov eax, DWORD PTR [ebp-4]
0804841b50push eax
0804841ce8 2f 00 00 00call add
0804842183 c4 08add esp, 8
0804842489 45 f4mov DWORD PTR [ebp-12], eax
08048427b8 00 00 00 00mov eax, 0
0804842cc9leave
0804842dc3ret
08048450add:
0804845055push ebp
0804845189 e5mov ebp, esp
0804845383 ec 04sub esp, 4
080484568b 45 08mov eax, DWORD PTR [ebp+8]
0804845903 45 0cadd eax, DWORD PTR [ebp+12]
0804845c89 45 fcmov DWORD PTR [ebp-4], eax
0804845f8b 45 fcmov eax, DWORD PTR [ebp-4]
08048462c9leave
08048463c3ret
🔹 堆栈状态
ESP → 栈顶指针
堆栈为空
🔹 特殊寄存器
ESP
0x7fff1004
EBP
0x7fff0000
ESI
0x00000000
EDI
0x00000000
EIP
0x08048400
EFLAGS
0x00000000