웬디의 기묘한 이야기

글 작성자: WENDYS
반응형

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을 참고하시기 바랍니다.





반응형