반응형

응용 프로그램이 비정상 종료하는 경우 덤프 파일을 생성하도록 해 보자.

 

응용 프로그램 크래시 발생시 자동으로 에러 리포트가 작성된다. 하지만 문제 파일, 운영체제 등의 정보만 들어 있어 별 의미가 없다.

 

크래시 발생시 덤프할 파일명으로 레지스트리 키를 만든다.

 

Value Description Type Default Value
DumpFolder 덤프 파일 생성 폴더 REG_EXPAND_SZ %LOCALAPPDATA%\CrashDumps
DumpCount 폴더에 보관할 덤프파일 갯수 REG_DWORD 10
DumpType 덤프 타입
1: 미니 덤프
2: 전체 덤프
RED_DWORD 1

 

응용 프로그램 크래시가 발생하면 레지스트리에 설정한 대로 덤프 파일이 생성된다.

 

위 내용은 응용 프로그램마다 개별적으로 적용하는 경우이고 ...\Windows Error Reporting\LocalDumps 레지스트리에 키 값을 만들어주면 모든 프로그램에 대해 동일한 덤프 세팅을 적용할 수 있다. 기본적으로 C:\Users\XXXX\AppData\Local\CrashDumps에 덤프 파일이 생성되도록 설정되어 있다.

 

※ 참고

Collecting User-Mode Dumps

 

반응형
Posted by J-sean
:
반응형

Windbg로 분석할 수 있도록 덤프 파일을 생성해 보자.

 

디버깅 정보 쓰기 - '커널/전체 메모리 덤프'가 선택되어 있어야 한다.

 

NotMyFault.zip
1.40MB

위 파일을 다운로드하고 압축을 풀어준다.

 

컴퓨터 환경에 맞는 파일을 실행한다.

 

크래시 발생 옵션을 선택하고 Crash 버튼을 클릭한다.

Crash 버튼을 클릭하면 블루 스크린이 나타나고 재부팅 되니 열려있는 작업은 모두 종료한다.

 

메모리 덤프가 생성된다.

 

※ 참고

Generate a kernel or complete crash dump

 

반응형
Posted by J-sean
:
반응형

도스박스에 디버거를 붙여 실행해 보자.

 

일반적으로 도스박스를 실행하면 위 메인 창이 표시된다.

 

dosbox-74-3-debug.zip
1.52MB

위 파일을 다운 받고 압축을 풀어 도스박스가 설치된 폴더에 저장한다. (도스박스 버전은 0.74-3이다)

 

저장한 파일을 실행하면 위와 같이 레지스터, 데이터, 코드 등이 표시되는 디버거 창이 함께 나타난다.

명령어를 실습해 보자. 디버거가 아닌 도스박스 메인 창에서 Alt+Pause키를 누른다. 디버거가 활성화 되면 아래 명령을 입력한다.

memdump 0000:0010 20

 

Output/Input 창 아래에 Memory dump success 메세지가 표시된다.

 

MEMDUMP.TXT 파일이 생성된다.

 

0000:0010 부터 0x20 바이트의 메모리가 덤프되었다.

 

※ 참고

Understanding the DOSBox debug screen

Guide to the DOSBox debugger

 

반응형
Posted by J-sean
:
반응형

x32/x64 디버거에서 심볼파일(pdb)을 불러오자.

 

디버깅할 프로세스를 불러온다.

 

심볼파일을 불러온다.

symload module_name, path

 

심볼파일이 존재하면 완료 메세지가 뜬다.

 

심볼 윈도우에서 모듈을 선택하고 심볼을 확인한다.

만약 프로그램 파일이 존재하는 디렉토리에 심볼파일이 같이 존재하면 자동으로 로드된다.

 

※ 참고

symload/loadsym

symunload/unloadsym

 

반응형
Posted by J-sean
:
반응형

아래 링크를 참조해 WinDbg를 설치한다.

Windows 디버거 설치

 

WinDbg를 실행하고 Settings를 클릭한다.

 

Debugging settings - Debugging paths - Default symbol path:에 위와같이 세팅한다.

심볼 파일이 디버깅 할 파일과 같은 경로에 있거나 path에 지정한 경로(I:\windbgsymbols)에 있으면 된다.

※ 기본 심볼 서버: https://msdl.microsoft.com/download/symbols

※ 기본 캐시 폴더: C:\ProgramData\dbg

 

Symbol path for Windows debuggers

 

디버깅할 파일을 로드하면 관련 심볼 파일도 로드된다.

 

심볼파일(.pdb)을 로드할 때 WinDbg는 타임 스템프 등을 고려한 버전 체크를 하는데 버전이 맞지 않으면 로드하지 않는다. 아래 명령을 사용하면 심볼파일의 버전에 관계없이 로드할 수 있다.

[한 모듈의 심볼파일만 로드]

.reload /i Module_Name

ex) .reload /i myapp.exe

[모든 모듈의 심볼파일 로드]

.reload /i

 

2023.07.02 - [Reverse Engineering] - WinDbg 버전(타임스템프) 일치하지 않는 심볼파일 로드하기

 

반응형
Posted by J-sean
:

RadASM Debugging 디버깅

Assembly 2023. 2. 2. 15:33 |
반응형

RadASM으로 어셈블리 소스를 디버깅 해 보자.

 

소스를 입력한다.

 

Project - Project Options를 클릭한다.

 

Debug를 선택한다.

 

빌드한다. Make - Build

 

 

원하는 위치에 브레이크 포인트를 설치한다. Make - Debug - Toggle Breakpoint

 

디버깅을 시작한다. Make - Debug - Run

 

레지스터등 디버깅 정보가 표시되고 브레이크 포인트에서 실행이 정지된다.

 

Run, Break, Stop, Step Into, Step Over등을 사용하여 디버깅 한다.

 

반응형
Posted by J-sean
:
반응형

특정 코드를 레퍼런스하는 명령을 찾아보자.

 

한 화면에 들어오는 가까운 거리에서는 CPU창 왼쪽 화살표로 레퍼런스를 확인할 수 있다.

 

레퍼런스가 멀리 있거나 여러 개 라면 해당 명령(주소)에서 우클릭 - Find references to - Selected Address(es)를 클릭한다.

 

References 창에 레퍼런스가 표시된다.

 

레퍼런스를 좀 더 편하게 확인하고 싶다면 CPU 창에서 우클릭 - Analysis - Analyze module을 클릭한다.

 

 

레퍼런스를 확인하고 싶은 명령에서 우클릭 - xrefs... 를 클릭한다.

 

레퍼런스 창 안의 레퍼런스를 선택하면 그 레퍼런스로 바로 이동할 수 있다. Cancel 버튼을 클릭하면 명령으로 돌아간다.

 

반응형
Posted by J-sean
:
반응형

유니티와 Visual Studio를 이용해 디버깅 해 보자.

 

Cube를 하나 생성하고 스크립트를 추가한다.

 

매 프레임마다 X축으로 1 이동하는 스크립트를 작성한다.

 

이동하는 코드에 브레이크 포인트를 설정한다. (F9)

 

디버깅을 시작한다. (Attach to Unity 버튼을 클릭하거나 F5를 누른다)

 

 

유니티에 C# 디버거가 연결되었다는 창이 뜬다. 'Enable debugging for this session' 버튼을 클릭한다.

 

오른쪽 하단에 'Debugger Attached' 표시(파란색 벌레)가 나타난다. Play 버튼을 클릭한다.

 

브레이크 포인트에서 실행이 멈춘다.

 

디버거와 유니티를 확인하며 디버깅을 진행한다.

 

 

유니티 실행시 처음부터 디버깅이 가능하게 설정할 수 도 있다. (Code Optimization On Startup을 Debug로 바꾼다)

 

반응형
Posted by J-sean
: