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 |