리눅스 x64 호출규약

2019년 10월 31일

x64 Linux Calling Convention

예를 통해 직접 과정을 따라가보는 것이 가장 이해하기 좋다.

단순하게 두 수를 더해서 다른 변수에 저장하는 c코드를 작성해보았다:

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;
}

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

gcc -m64 add.c -o add
gdb add

그러면 아래와 같은 어셈블리 코드를 볼 수 있는데 main의 시작 지점부터 어셈블리 instruction을 한 단계씩 실행시켜서 메모리와 레지스터 정보를 확인하면 아래와 같은 과정을 그려볼 수 있다. 모바일 환경에서는 잘려서 보이니 데스크탑 환경으로 보자.

관련된 Assembly Instructions