본문 바로가기

Debugging

(24)
1.Configuring the remote debugging with a virtual machine 1. VM(Target) 내의 Windows Guest OS에서 Debug Mode 설정 시작 > 실행 > msconfig Boot 탭 > Advanced Options > Debug 선택, Debug port는 COM1 선택, Baud rate는 115200 선택(재부팅 하지 말고) 명령 프롬프트 관리자 권한 실행 bcdedit /set testsigning on 명령어 실행 재부팅 2. Host 에서 Symbol 폴더 생성 C:\Sym 폴더와 C:\Sym\WebSym 폴더 생성 C:\Sym 폴더는 개인적으로 Build한 코드의 symbol 저장 용도 C:\Sym\WebSym 폴더는 Windows public symbol 저장 용도 3. Host 에서 Debugger 설정 시작 > Windows Kit..
0.Setting up an environment for debugging # Windows 10 기준 Step 1: Install Visual Studio 2019 Desktop Development with C++ 선택하고 Optional에서 전부 선택 (Visual Studio가 종료된 것을 확인하고!!) Step 2. 별도로 SDK 설치(Windows 10 SDK, 버전 2004(10.0.19041.0)) https://go.microsoft.com/fwlink/?linkid=2120843 Step 3. 별도로 WDK 설치(windows 10 WDK for Windows 10 version 2004) https://go.microsoft.com/fwlink/?linkid=2128854 마지막에 Extension도 설치해야 함 # Visual Studio에서 driver ..
Calling Convention - 64bit Program 64bit Calling Convention 32bit에서 설명했던 Calling Convention 중 __fastcall과 유사하게 함수 호출 시 전달이 필요한 매개변수를 Register에 저장 다만, Windows와 Linux는 약간의 차이가 있는데 매개변수 전달 시, Windows는 RCX, RDX, R8, R9 Register를 사용하고 나머지 매개변수는 Stack에 보관 Linux는 RDI, RSI, RDX, RCX, R8, R9 Register를 사용하고 나머지 매개변수는 Stack에 보관 위의 예시는 매개변수가 정수형인 경우이고, 실수형인 경우에는 XMM Register 사용 반환값은 정수형의 경우 RAX(하위 64bit), RDX(상위 64bit) 사용, 실수형인 경우 XMM0, XMM1..
Calling Convention - 32bit Programs Stack Frame Stack Frame이란? Stack Frame은 함수 호출 과정에서 지역변수 선언으로 인해 할당되는 블록 예를 들어, int a, int b 선언 시에 Stack Frame에 a와 b가 할당 Stack Frame은 함수가 Return되면 모두 반환 ESP Register(Stack Pointer) Stack에 Data를 쌓거나, 반환하기 위해서는 현재 어느 위치까지 데이터를 저장했는지 알아야 함 함수 종료 시, Stack Frame 단위로 ESP Register 이동 EBP Register(Base/Frame Pointer) Stack에 데이터를 저장할 때에는 데이터의 크기를 알 수 있기 때문에 데이터 크기만큼 이동하면 되지만, 함수가 Return 될 때에는 얼마만큼 ESP Reg..