[Assembly] arm64 레지스터의 종류

김민석·2023년 3월 12일
0

Assembly

목록 보기
1/1

범용 레지스터

각자 역할은 주어져 있지만, 주어진 역할 외의 목적으로도 사용할 수 있는 레지스터

  • rax : 함수의 변환값
  • rbx : arm64에서는 사용 목적 X
  • rcx : 반복문의 반복 횟수
  • rdx : arm64에서는 사용 목적 X
  • rsi : 옮기려는 데이터의 원본을 가르키는 포인터
  • rdi : 옮기려는 데이터의 목적지를 가르키는 포인터
  • rsp : 프로세스의 stack segment start 지점을 가르키는 포인터
  • rbp : 프로세스의 stack segment bottom 지점을 가르키는 포인터
  • r8 ~ r15 : 일반 목적 레지스터

syscall의 인자

SYSTEM V ABI C언어에서 syscall을 이용하려면 syscall() 함수 안에 원하는 인자를 넣으면 된다.
하지만 어셈블리어에서는 C언어에서 처럼 쉽게 인자를 넣을 수 없다.
어셈블리어를 통해 syscall을 사용하려면 지정된 레지스터에 인자를 넣어야 한다.

rax : 어떤 syscall을 사용할지 나타내는 번호
ex) read = 0x01, write = 0x02, open = 0x03

RDI, RSI, RDX, RCX, R8, R9

위의 순서대로 C언어의 syscall에 해당하는 인자를 넣어주면 된다.

세그먼트 레지스터

프로세스의 segment를 가르키는 포인터를 저장하는 레지스터

  • cs : code segment를 가르키는 포인터
  • ds : data segment를 가르키는 포인터
  • ss : stack segment를 가르키는 포인터

명령어 포인터 레지스터

실행시킬 어셈블리어 명령어를 가르키는 포인터를 저장하는 레지스터

  • rip

플래그 레지스터

CPU의 상태(flag)를 저장하는 레지스터
크기는 64비트이지만 20여개의 bit만 사용한다.

  • RFLAGS

profile
명품개발자지망생

0개의 댓글