함수가 실행된 후 리턴값을 저장 하기 위해 쓰인다. 어떤 함수의 실행이 종료되고 나면 해당 함수의 결과값이 반환될 때 이 rax 레지스터에 담겨 반환된다. 그러나 rax가 리턴값을 위해서만 쓰이는 것은 아니다. 함수가 반환되기 전까지 범용 레지스터로 자유롭게 사용되다가, 종료 후 리턴값을 반환하기 위한 레지스터로는 rax만이 사용된다.
rcx, rdx, r8, r9
x64의 범용 레지스터들 중에서는 함수가 실행될 때 필요한 인자들을 저장하는 용도로 사용하는 레지스터
Windows 64bit에서 함수를 호출할 때 필요한 인자들을 순서대로 저장한다.
첫번째 인자는 rcx에, 두번째 인자는 rdx에, 세번째 인자는 r8에, 네번째 인자는 r9에 하는 방식으로 인자를 레지스터에 담아 함수를 호출한다.
rsp
16개의 범용 레지스터들 중 하나로 분류되지만, 다른 범용 레지스터들과 달리 용도가 정해져 있다.
rsp는 스택 포인터(Stack Pointer)로, 스택의 가장 위쪽 주소를 가리킨다. 스택은 함수가 사용할 지역 변수들(local variables)을 저장하기 위해 준비해놓는 공간이다
rip
명령어포인터이다. 다음에 실행될 명령어가 위치한 주소를 가리키고 있다. 즉 프로그램의 실행 흐름과 관련된 중요한 레지스터이므로, 범용으로 사용되지 않는 레지스터이다.
시스템 호출시 범용 레지스터 표 표현
시스템 호출 번호
rax
함수의 systemcall번호 갖는다.
반환주소
rcx
systemcall 호출했던 응용프로그램의 return주소 갖는다. systemcall 끝난후에 return 주소를 rcx값으로 채운다.