함수 호출 규약: 함수의 호출 및 반환에 대한 약속
- 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동
- 호출한 함수가 반환하면 다시 원래의 함수로 돌아와 기존의 실행 흐름대로
- 함수 호출 시 반환 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 함
- 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때 반환 값을 전달받아야 함
- CPU 아키텍처에 따라, 컴파일러에 따라 호출 규약이 다를 수 있음
- x86-64 아키텍처에서는 MSVC(컴파일러)는 MS x64 호출 규약 적용, gcc는 SYSTEM V 호출 규약 적용
x86-64 호출 규약: SYSV
1. 6개의 인자를 RDI, RSI, RDX, RCX, R8, R9에 순서대로 저장하여 전달, 더 많은 인자는 스택에 저장
2. Caller에서 인자 전달에 사용된 스택 정리
3. 함수 반환 값은 RAX로 전달
'보안' 카테고리의 다른 글
[시스템해킹] Background: Library (0) | 2024.04.23 |
---|---|
[시스템해킹] NX & ASLR (0) | 2024.04.23 |
[시스템해킹] Background: x86 Assembly (0) | 2024.04.23 |
[시스템해킹] Background: Linux Memory Layout (0) | 2024.04.23 |
[시스템해킹]Background: 컴퓨터 구조, 레지스터, ... (0) | 2024.04.22 |