티스토리 뷰
Calling Convention과 Stack
콜링 컨벤션과 스택
[ Calling Convention ]
Calling Convention
: 내부 및 외부 함수 호출을 위한 규칙.
: 세부적인 정보는 시스템에 따라 다름.
[ Procedure Call ]
· Caller : Callee를 호출.
· Callee : Caller를 통해 호출당한 함수.
: 항상 복귀가 필요. → 복귀 주소를 항상 Stack에 저장.
( 이 Stack을 Call Stack 또는 Run-time Stack이라고 한다. )
( jmp instruction과의 차이 : 조건문, 반복문 등에서 사용되던 jmp는 복귀가 강제되지 않았다. )
: Caller와 Callee는 같은 Register를 사용.
void bfs() // callee
{
...
}
int main()
{
bfs(); // caller
}
[ Stack ]
Run-time Stack
: Procedure를 관리하기 위한 Memory 공간.
: Stack Frame의 집합을 저장.
※ Stack Frame이란 스택 영역에 함수를 구분하기 위해 생성되는 공간을 말한다.
함수 호출 시 같이 생성되고, 함수가 종료되면 소멸된다.
: 2개의 스택 포인터를 필요로 함.
1) Base Pointer(Frame Pointer) : %rbp. 현재 Stack Frame의 처음 부분을 가리킴. 선택적 요소.
2) Stack Pointer : %rsp. Stack의 Top을 가리킴. (LIFO 구조의 특성 상 가장 아랫부분) 필수적 요소.
Stack Operation
· pushq src : 소스에 있는 data를 stack의 top에 추가. → %rsp - 8
· popq dst : top에 있는 data를 dst에 저장. → %rsp + 8
: 16진수 표기이고, 포인터는 8byte이므로 %rsp의 첫 번째 자리는 무조건 0 또는 8이 나온다.
Stack Frame
· Caller's Stack Frame : 1~6번째 파라미터는 레지스터에, 이후에는 Stack Frame에 저장
( 역순으로 Push가 이루어짐. → 낮은 순번의 Parameter가 먼저 나오도록 하기 위함 )
· Callee's Stack Frame
- Return Address
- Old Frame Pointer : 이전에 수행한 함수의 Stack Frame 주소. 선택적 요소.
- Saved Register Context
- Local Variable : 지역 변수
- Argument Build Area : 파라미터가 6개 이상일 때 이용.
'컴퓨터 공학 이론 > 시스템 프로그래밍' 카테고리의 다른 글
[시스템 프로그래밍] Status Register (0) | 2022.12.04 |
---|---|
[시스템 프로그래밍] File Structure & I/O (0) | 2022.12.03 |
[시스템 프로그래밍] Signal (0) | 2022.12.03 |
[시스템 프로그래밍] Process의 생성과 종료 (0) | 2022.12.02 |
[시스템 프로그래밍] Process와 Context Switching (0) | 2022.11.30 |