[Dreamhack - System Hacking] STAGE 2 : x86 Assembly : Essential Part(2)

eunee22·2023년 7월 2일

Dreamhack/SystemHacking

목록 보기
7/12

스택 관련 명령어

  • push val : val을 스택 최상단에 쌓음
  • pop reg : 스택 최상단의 값을 꺼내서 reg에 대입

프로시저(procedure)

  • 프로시저 : 특정 기능을 수행하는 코드 조각
    • 함수를 가르키는 말 인듯
  • 장점
    1. 반복되는 연산을 프로시저의 호출로 대체 → 전체 코드 길이 감소
    2. 기능별 코드에 이름을 붙일수 있음 → 가독성 증가
  • 호출(call) : 프로시저를 부르는 행위
    • call addr : addr에 위치한 프로시저 호출

      ; call 명령어 사용시 이루어지는 연산
      push return_address ; retrun add를 스택에 저장후
      jmp addr ; 호출한 주소로 점프
  • 반환(return) : 프로시저에서 돌아오는 것
    • leave : 함수 반환 이후 스택프레임 정리
      - 스택프레임 : 함수 별로 임시 값을 저장하기 위해 스택을 사용하는데, 각 함수의 영역을 구분하기 위해 사용

      ; leave 명령어 사용시 이루어지는 연산
      
      mov rsp, rbp 
      ; rbp는 기존의 스택프레임을 담고 있고, rsp는 top 역할을 함
      ; call 하면 rbp의 주소가 스택에 push 되어 저장됨. 
      ; 새 스택 프레임을 만드려면 rsp를 사용해야 하므로 임시로 rbp를 rsp로 이동
      ; 새 스택 프레임을 할당하고 온 rsp를 rbp 위치로 이동시킴으로써 새 스택프레임 생성전 저장해 뒀던 rsp의 위치로 돌아감.
      pop rbp
      ; 저장해뒀던 기존 스택프레임 주소를 pop

      이 모든 과정을 이해 할때, rsp와 rbp가 주소를 가르키는 포인터 라는 점을 고려하지 않으면 이해하기 힘들다.
      나도 처음에 이 문제를 풀때, rsp와 rbp가 가변적인 포인터가 아니라 고정된 공간이라고 생각을 해서 코드를 해석하는게 어려웠다 ㅠㅠ

  • 반환 주소(Retrun Address) : 프로시저 실행이 끝난 후, 원래의 실행 흐름으로 돌아오기 위해 스택에 저장해놓는 call 다음의 명령어 주소
    • 저장 후에 rip을 프로시저로 이동

    • ret : retrun address로 반환

      ; ret 명령어 사용시 이루어지는 연산
      
      pop rip ; 스택에 저장해 놓았던 retrun add를 pop
      

시스템 콜

  • 운영체제는 연결된 모든 하드웨어와 소프트웨어에 접근하거나 제어가 가능.
    1. 커널 모드 : 운영체제가 전체 시스템 제어를 위해 시스템 소프트웨어에 부여하는 권한
    - 시스템의 모든 부분을 제어 가능
    - 모든 저수준의 작업이 사용자 모르게 진행
    - 파일시스템
    - 입력/출력
    - 네트워크 통신
    - 메모리 관리
    2. 유저 모드 : 운영체제가 사용자에게 부여하는 권한

  • 시스템 콜 : 유저 모드에서 커널 모드의 시스템 소프트웨어에게 특정 동작을 요청하는 함수
    - 소프트웨어의 대부분은 원하는 동작을 수행하기 위해 커널의 도움이 필요
    - 시스템 콜이 일어나면, 커널이 요청받은 동작을 수행해 유저에게 결과 반환
    - syscall 명령어 사용 → x64 기준
    - rax로 무슨 요청인지 나타냄
    - 인자 전달 순서 : rdi → rsi → rdx → rcx → r8 → r9 → stack

    read와 write 등 모든 syscall은 사용자가 아니라 컴퓨터의 입장에서 생각해 보아야 한다. write가 사용자 입력이 아니라 출력인 것을 생각해 보면 좀 더 이해가 쉬울 것이다. 우리 입장에서는 read, print 이지만, 컴퓨터 입장에서는 write 인것이다.
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글