Notice
Recent Posts
관리 메뉴

Hacking Arts

64비트 calling convention + stack frame 본문

System/ETC

64비트 calling convention + stack frame

Rakehell 2015. 10. 22. 03:28

64bit Calling Convention


64비트는 리눅스와 윈도우의 인자 전달 방식이 나뉘어 집니다.

이를 적응 하느라 꽤 시간이 걸렸는데 


우선 리눅스는 파라미터를 전달할 때 6개의 레지스터를 사용합니다.


RDI : 첫번째 인자

RSI : 두번째 인자

RDX : 세번째 인자

RCX : 네번째 인자

R8 : 다섯번째 인자

R9 : 여섯번째 인자


이렇게 6개의 레지스터를 사용하고 인자가 7개 이상일 경우부터는 스택을 같이 사용합니다.


윈도우는 그에비해 파라미터를 전달할 때 레지스터를 4개까지 사용합니다.


RCX : 첫번째 인자

RDX : 두번째 인자

R8 : 세번째 인자

R9 : 네번째 인자


이렇게 4개의 레지스터를 사용하고 인자가 4개이상일 경우에는 스택을 같이 사용합니다.



64bit stack frame


64비트 OS에서는 스택과 스택 프레임을 사용하는 방식이 변경되었는데 우선 함수에서 실제 필요한 크기보다

훨씬 크게 스택을 미리 확보합니다. 서브함수를 호출할 때는 push 명령을 썼던 기존과는 달리 미리 확보한 스택에 mov 명령을 통해 전달해줍니다. 또한 스택 프레임을 구성할 때도 RBP 레지스터를 이용하는 것이 아니라 RSP 레지스터를 이용하여 구현합니다.


출처 : http://xer0s.tistory.com/47
64bit에서 바뀐 방식을 가장 간단하게 잘 표현해논 글같아서 퍼왔습니다.


'System > ETC' 카테고리의 다른 글

VMware + ida remote debuging  (0) 2015.12.14
메모리 보호기법  (0) 2015.12.03
fork bomb  (0) 2015.10.22
How does the Linux boot process work?  (0) 2015.10.22
linux 메모리 보호 옵션  (0) 2015.09.29