리눅스 x86 호출규약

2019년 10월 30일

32비트 리눅스의 호출 규약Calling Convention에 대해서 알아보자.

int add(int a, int b){
    return a+b;
}

int main(){
    int a,b,c;
    a = 3;
    b = 7;
    c = add(a, b);
    return 0;
}

를 다음과 같이 32비트 컴파일을 하고 gdb로 확인해보자.

gcc -m32 add.c -o add
gdb add

add를 실행하는 과정을 쪼개서 과정을 표현해보았다(가로가 긴 화면에서 보는 것을 권장한다). 메모리를 한 열이 4바이트인 표로 그렸다. eip는 레지스터 표가 아닌 왼쪽에 어셈블리 코드에 화살표로 나타냈고, esp와 ebp는 메모리 표에 위치를 나타낼 수 있을 때 메모리에 표시했다.

관련된 Assembly Instructions