함수호출에 의한 실행의 이동과 PC
- PC(Program Counter)
-> 다음 명령어의 주소값을 가지고 있음
-> CPU는 PC가 가르키는 주소의 명령어를 실행함
- 함수 호출, 실행의 이동은 PC의 값을 변경하는 것
-> CPU가 순차적으로 실행이 됐다고 느끼게끔 하면서 실행을 이동 시킴
- PC도 SP처럼 PC의 값을 저장하기 위해 LR(Link Regiseter)에 저장하고 LR도 백업을 위해 stack에 저장함
함수 호출 규약
- 어떻게 함수 호출을 정의할 것인지 어떻게 함수를 실행할 것인지 결정하는 요소
- 반환 하는 코드를 어떤 함수에 넣을 지 결정을 함
- 두 함수가 있다면 하나의 함수만 가지고 있어야 함
- 함수가 인자를 전달할 때 어디부터 전달하고 어디부터 채우는지도 맞춰야 함
- Calling Convention : 호출 규약
- Parameter in register : 인자를 레지스터에 저장하는가
-> 레지스터가 명시되어 있는 호출 규약은 해당하는 레지스터에 저장이 되고 레지스터 수보다 인자가 많다면 나머지는 스택에 저장
-> __fastcall은 인자 2개까지는 ecx, edx에 저장하고 나머지는 스택에 저장함. 레지스터를 사용하여 속도가 빨라지기 때문에 fastcall
-> 64bit Windows에서는 8개의 레지스터를 활용해 인자를 저장하는데 그 중 절반에만 저장이 됨
* rcx/xmm0 중 하나에 저장이되고 rdx/xmm1 중 하나에 저장이 되는 방식
-> 64bit Linux에서는 14개의 레지스터를 활용해 인자를 저장
* xmm0-7 : xmm0, xmm1, ... xmm6, xmm7
- Parameter order on stack : 인자 전달방식
-> C : C언어 스타일 => 오른쪽에 전달되는 인자가 먼저 스택에 쌓임
- Stack cleanup by : 스택을 비우는 주체
-> Caller : 호출자가 비움
-> Function : 호출된 함수 내에서 비움
'Programming > System Programming' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 - 11. 쓰레드의 이해(2) (0) | 2020.07.22 |
---|---|
윈도우즈 시스템 프로그래밍 - 11. 쓰레드의 이해(1) (0) | 2020.07.22 |
윈도우즈 시스템 프로그래밍 - 10. 컴퓨터 구조에 대한 세 번째 이야기(2) (0) | 2020.07.21 |
윈도우즈 시스템 프로그래밍 - 10. 컴퓨터 구조에 대한 세 번째 이야기(1) (0) | 2020.07.21 |
윈도우즈 시스템 프로그래밍 - 9. 스케줄링 알고리즘과 우선순위(2) (0) | 2020.07.20 |