less than 1 minute read

x64 레지스터

alt text

주로 rax … al 류는 자주 사용해서 알고있었는데, rdi 류는 dil 이 1바이트를 표기하는 명칭이라 찾아보게 되었음.

x64 calling convention ( Windows )

x64 binary 에서 함수가 호출되면 스택 프레임은 다음과 같은 방식으로 사용된다.

  • RCX, RDX , R8, R9 레지스터가 각각 첫 네개의 integer argument 들을 담당함.
  • argument 5 부터는 스택에 push됨
  • caller 의 다음 instruction 을 담고있는 return address 는 rsp + 0x0 에 저장되어있음
  • return address 아래로 32바이트는 callee 가 4개의 argument 보다 적게 사용할지라도 항상 RCX, RDX, R8, R9 를 위해 할당된다.
  • 지역변수랑 non-volatile register 들은 return address 보다 위에 저장되어있다.
  • x86 에서와는 다르게 rbp 는 local variable이나 function argument 를 referencing 하는 용도로 사용되지 않는다.
    • alloca 를 사용하는 함수는 예외
  • rsp 가 이제 그 역할을 하고 그래서 function body 에서 변경되지 않는다. push pop 이 epilogue/prologue 를 위해서만 사용된다.

Red Team Notes

참고

koreaner ASP routing

Categories:

Updated: