본문 바로가기
Reversing/Reversing

64bit환경의 인자값 전달 방식

by bbolmin 2013. 12. 15.



64bit 파라미터 전달



[windows - PE]


Parameter 1 – RCX

Parameter 2 – RDX

Parameter 3 – R8

Parameter 4 – R9




[Linux - ELF]


Parameter 1 - rdi

Parameter 2 - rsi

Parameter 3 - rdx

Parameter 4 - rcx

Parameter 5 - r8

Parameter 6 - r9

Parameter 7 - (%rsp)

Parameter 8 - 0x8(%rsp)

system call - %rax








[*] ARM 레지스터 추가



 레지스터

APCS 

역활 

 r0

 a1

 함수 인자1/결과 값 전달

범용 스크레치 레지스터

 r1

 a2

 함수 인자2/범용 스크래치 레지스터

 r2

 a3

 함수 인자3/범용 스크래치 레지스터

 r3

 a4

함수 인자4/범용 스크레치 레지스터

 r4

 v1

변수용 레지스터 1

 r5

 v2

변수용 레지스터 2

 r6

 v3

변수용 레지스터 3

 r7

 v4

변수용 레지스터 4

 r8

 v5

변수용 레지스터 5

 r9

 v6/sb

변수용 레지스터 6

RWPI로 컴파일할 때 베이스 주소 저장

 r10

 v7/sl

변수용 레지스터 7

스택 리미트 체크 스택의 리미트 주소 저장

 r11

 fp

이전 버전의 ARM 컴파일러에서 프레임 포인터로사용

 r12

 ip

범용 스크래치 레지스터

 r13

 sp

스택의 현재 위치를 저장하고 있는 레지스터

 r14

 lr

링크 레지스터, 복귀할 주소를 저장하고 있는 레지스터

 r15

 pc

프로그램 카운터