Windows

64비트 알아두어야할 점

우와해커 2020. 1. 15. 10:20

AMD에서 32비트와 호환되는 AMD64를 만들었고 이것을 INTEL이 라이센스를 사들여 INTEL64로 바꾸게 됨

 

1. 64비트 레지스터

64비트에서는 R8~R15레지스터가 추가됨.
기존비트에서 32비트 더 확장되어 RAX, RBX로 사용됨.
세그먼트 레지스터는 사용하지 않으며 32비트 호환용으로만 제공됨.

 

 

2. 함수호출 규약

32비트에서는 cdecl, stdcall, fastcall 등이 존재했지만
64비트에서는 변형된 fastcall 하나로 만들어졌다. (INTEL)

64비트에서 파라미터는 RCX, RDX, R8, R9 순서로 들어가게 되며,
실수일 경우 XMM0, XMM1, XMM2, XMM3 순으로 들어가게 된다.

파라미터가 5개가 넘어가는 경우 5번째부터 스택에 저장시켜 전달한다.

 

AMD는 RDI, RSI, RDX, RCX, R8, R9 순으로 전달되는 것으로 됨

첫 파라미터 6개까지 전달, 그이상은 스택에 저장시켜서 전달 

 

 

3. 스택 / 스택프레임

32비트 프로그램에서는 PUSH POP과 같은 명령어들이 많이 나타나지만
64비트 프로그램에서는 PUSH POP 명령어들이 거의 보이지 않는다.

스택프레임을 구성하는데도 RBP레지스터를 이용하지 않고 RSP 레지스터를 이용하여 구현한다.

'Windows' 카테고리의 다른 글

[WIKIBOOKS] Calling Conventions  (0) 2020.07.30
RVA + 이미지 베이스 = 섹션이 로드될 가상 주소  (0) 2020.06.24