x64
-
[리버싱 핵심원리 study] 40장 64비트 디버깅Reverse Engineering 2021. 2. 8. 18:51
이번 장에서는 동일한 소스코드를 x86와 x64 환경으로 컴파일했을 때, 어셈블리 코드가 어떻게 달라지는지 비교해본다. 책이 집필될 당시에는 x64dbg가 없어서 그런지 64bit 프로그램을 디버깅할 때 WinDbg를 이용한다. 단순 실행파일의 디버깅이 목적이라면 x64dbg가 편리할 것 같지만 이후에 커널 디버깅 등을 할 때는 WinDbg를 이용하므로, 익숙해질 겸 이번 포스팅에서도 책에서와 같이 WinDbg를 이용해보겠다. 1. 소스코드(WOW64Test.cpp) #include "stdio.h" #include "windows.h" #include "Shlobj.h" #include "tchar.h" #pragma comment(lib, "Shell32.lib") int _tmain(int argc..
-
[리버싱 핵심원리 study] 37장 x64 프로세서 이야기Reverse Engineering 2021. 2. 1. 19:11
1. x64에서 추가/변경된 사항 (1) 64비트 메모리 주소가 64bit(8byte)로 표현된다. 마찬가지로 레지스터와 스택의 기본 단위도 64bit로 증가하였다. (2) 메모리 가상 메모리의 크기가 2^64 = 16TB로 증가하였으며, User 영역 및 kernel 영역이 각각 8TB의 크기를 갖는다. (이론상 그러하며 실제로 사용되는 영역은 이보다 적다.) (3) 범용 레지스터 레지스터들이 64bit로 확장되었으며, R8 ~ R15 레지스터가 추가되었고, R로 시작한다. (ex. EAX->RAX로 변경, RAX의 하위 32bit가 EAX) (4) CALL/JMP Instruction 똑같은 기능을 하는 다음 두 명령어를 살펴보자. - x86 => Addresss : 00401000 FF1500504..