visual studio 디버깅시 디스어셈블리 확인하기
Disassembly
Visual Studio를 이용하여 프로그램을 디버깅 하는 경우 필요에 따라 Disaasembly를 파악해야할때가 있습니다.
일반적으로 exe를 디버깅 하는 경우엔 IDA, OllyDbg 등을 이용하지만 개발중에 필요한경우 다음과 같은 설정으로 이용하실 수 있습니다.
1. Visual studio에서 Tools -> Options 에 들어갑니다.
2. Debugging -> General에서 Enable address-level debugging 이 체크가 되어있어야 Disassembly 기능을 사용할 수 있습니다.
설정이 잘 되었는지 테스트를 해보겠습니다.
NOTE
Disassembly를 확인하기 위해선 조건이 필요합니다.
* 현재 Debugging 중이거나 Break Mode 여야 합니다.
TEST CODE는 간단히 작성했습니다.
main 에서 메시지를 출력하는 경우 디스어셈 코드는 어떻게 작성되어있을까요?
위의 조건을 적용하여 printf 를 하는 위치에 F9 키를 눌러 Break Point를 잡아줍니다. (또는 좌측 빨간 동그라미가 있는 공간을 클릭해도 Break Point가 걸립니다.)
이제 실행을 하면 콘솔창만 덩그러니 떠있고 아무것도 안나올겁니다.
이제 디스어셈을 볼 수 있는 별도의 Windows 를 꺼내야하는데요
Debug -> Windows -> Disassembly ( Ctrl + Alt + D ) 를 누르면 아래처럼 새로운 창과 함께 디스어셈블리 코드가 나타납니다.
여러가지로 정말 유용하게 사용할 수 있습니다.
예를들어 printf 를 하려할때 push 0F96B30 를 하고있습니다. 저건 뭘까요?
위의 코드를 보면 당연히 test message 일겁니다.
당연하지만 직접 두 눈으로 봐야겠네요!!
메모리를 따라가보니 test message가 넣어져있네요 정답입니다! 그런데 그 뒤에 또 다른 글자들이 수두룩 합니다.
네 맞습니다 여긴 CODE 영역 입니다.
함수, 제어문, 상수 등은 메모리 영역 중 CODE 영역에 들어가게 되죠.
이처럼 여러가지 방면으로 분석이 가능하고, Visual Studio의 Disassemly 기능을 통하여 Code의 실제 동작을 알 수 있습니다.
해당 내용은 MSDN에도 자세히 나와있으니 부족한 내용은 MSDN을 참고하시기 바랍니다.
'⌨ DEVELOPMENT > Debugging' 카테고리의 다른 글
dump 분석을 위한 windbg 64bit 다운로드 및 설치 (0) | 2019.08.04 |
---|---|
[Debugging] 프로세스 크래시 발생시 덤프 남기기 (0) | 2016.01.22 |
[Assembly] 디버깅을 위한 8086 어셈블리 (0) | 2016.01.17 |
[WinDbg] 특정 프로세스 디버깅하기 (0) | 2016.01.13 |
[WinDbg] DriverEntry부터 디버깅 시작하기 (2) | 2016.01.10 |
[windows] 윈도우 64bit Driver 서명없이 로드하기 (2) | 2016.01.10 |
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기 (0) | 2016.01.06 |
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치! (0) | 2016.01.05 |
댓글
이 글 공유하기
다른 글
-
[WinDbg] DriverEntry부터 디버깅 시작하기
[WinDbg] DriverEntry부터 디버깅 시작하기
2016.01.10 -
[windows] 윈도우 64bit Driver 서명없이 로드하기
[windows] 윈도우 64bit Driver 서명없이 로드하기
2016.01.10 -
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기
2016.01.06 -
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치!
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치!
2016.01.05