μ°μ κΈ°μ΅ νλ κ² λ³΅μ΅.
~cpp
int main(){ return; }
.globl main
.type main, @function
main:
pushl %ebp // νμ¬μ λͺ
λ Ήμ΄ Counterλ₯Ό Stackμ μ μ₯ν¨. μ΄ νλ‘κ·Έλ¨μ΄ λλλ©΄ stackμμ λ€μ κΊΌλ.
movl %esp, %ebp
subl $8, %esp // λΉ μ€ν ν λΉ
andl $-16, %esp
movl $0, %eax // eax = 0
addl $15, %eax // eax = 15
addl $15, %eax // eax = 15 11110(Bin)
shrl $4, %eax // eax = 0xF0000001 11110000000000000000000000000001(bin)
sall $4, %eax // eax = 0x1F 00000000000000000000000000011111(bin)
subl %eax, %esp
movl $0, %eax // return 0;
leave // νλ‘κ·Έλ¨μ μ’
λ£. stackμμ νλ‘κ·Έλ¨ μμ μ μ λͺ
λ Ήμ΄λ₯Ό κΊΌλ΄ %ebpμ μ§μ΄ λ£λ μν .
ret // νλ‘κ·Έλ¨μ΄ μ’
λ£.
push - ret
Windows OSκ° μλ DOS OSλ λ©λͺ¨λ¦¬μ κ΄λ¦¬λ₯Ό Kernel(OSμ Core)μ΄ μλ Programμμ ν΄μ£Όκ² λλ€.
λ°λΌμ νλ‘κ·Έλ¨μ΄ μμνκ³ λκ°λμλ μ΄λμ νλ‘κ·Έλ¨μ μμνκ³ λλλμ§ μμΉλ₯Ό μ μ₯(push)νκ³ κΌ λ°ν(leave)ν΄μΌνλ€.
Windows OSκ° μλ DOS OSλ λ©λͺ¨λ¦¬μ κ΄λ¦¬λ₯Ό Kernel(OSμ Core)μ΄ μλ Programμμ ν΄μ£Όκ² λλ€.
λ°λΌμ νλ‘κ·Έλ¨μ΄ μμνκ³ λκ°λμλ μ΄λμ νλ‘κ·Έλ¨μ μμνκ³ λλλμ§ μμΉλ₯Ό μ μ₯(push)νκ³ κΌ λ°ν(leave)ν΄μΌνλ€.










