[Rev] 3. Function call and calling convention

KBC·2024년 8월 26일

리버싱

목록 보기
4/11

1. Stack

  • Stack 메모리 영역: 메모리 영역 중 하나로 함수의 지역변수를 저장하는 데 사용된다.
  • 레지스터:
    • rsp: 스택 포인터 레지스터.
    • rbp: 베이스 포인터 레지스터.
    • rip: 명령어 포인터 레지스터.
  • 스택 연산:
    • push: 값을 스택에 추가하고 rsp 감소.
    • pop: 값을 스택에서 제거하고 rsp 증가.

2. 함수 프롤로그와 에필로그

함수 프롤로그

  • 스택프레임 생성: 함수가 호출될 때 스택에 새로운 스택프레임이 생성된다.
  • RET (return address): 함수 호출 시, 반환 주소가 스택에 저장된다.

함수 에필로그

  • 레지스터 정리: rax 레지스터에 반환값을 설정하고, rsprbp를 복구.
  • 명령어:
    • mov rsp, rbp
    • pop rbp
    • leave
    • ret

3. 함수 호출 규약 (Calling Convention)

  • 인자 전달: 함수 호출 시 인자를 레지스터를 통해 전달.

  • 규약 종류:

    비트규약설명
    32bitcdecl기본 호출 규약, 인자를 오른쪽에서 왼쪽 순서로 push하고, 호출자가 스택을 정리
    32bitstdcall함수 내에서 스택 정리, ret 명령으로 스택 정리
    64bitfastcall인자를 레지스터에 전달
  • 인자 전달 레지스터 (64bit):

    인자 순서LinuxWindows
    1번째rdircx
    2번째rsirdx
    3번째rdxr8
    4번째rcxr9
    5번째r8-
    6번째r9-
profile
AI, Security

0개의 댓글