2018. 3. 29. 21:24

DOSBOX Heavy Debugger 관련 간략한 포스팅을 합니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

일전에 Debugger 관련되서 포스팅을 했습니다.

계속 예제로 사용하는건,  hellow.exe 이며, 이 프로그램은 쉽게 입력받은 1개의 문자를,

a,b,c 그리고 나머지키 로 비교 하는 로직입니다.

그래서 내부적으로 ASM 으로 구현된거는 입력된 값 과 미리 프로그램에 심어진 상수

‘a’,’b’,’c’ 를 비교 하는 로직이 반드시 흘러갈꺼다란 생각을 했고,

 

제 생각을 Heavy Debugge가 보여줬기에 해당 내용을 토대로 포스팅을 합니다.

 

참고로 Heavy Debugger를 사용하는 방법은 따로 정리 해드리고,

오늘은 간략히 해당 결과만 보여드리겠습니다.

image

보시면 아시겠지만, CPU에 실행되는 binary를 ASM으로 풀어 쓴 내용이며,

 

우측에 있는 EAX, EBX, ECX..는 CPU의 레지스터 입니다.

자세한 내용은 아래에 있습니다.

image

위의 내용중 위에 CMP 명령어가 있는데요. 보시면 EA64 란 값과 비교 하고 jne (Jump Not Zero) 란 명령어가 나옵니다.

cmp  byte [bp-01],61            ss:[FFDD]=EA64

위의 내용은 ASCII 에서 61값(‘a’) 값과 입력된 값 64(‘d’)를 비교 하여,

zero flag를 비교 하여 Jump 아니면 다음행 실행 을 하는 로직이며..

‘a’ 와 'd’는 같은 값이 아니므로 점프 하여 0000021E 주소로 점프 하는 로직입니다.

 

이렇게 해서 ‘d’ 입력시, 61,62,63(‘a’,’b’,’c’)값을 순차로 비교하여 점프 시키고 모든경우에 해당되지 않으면,

else  구문을 실행 하는 형태 입니다.

 

이렇게 분석이 된다면, 여러모로 실행되는 프로그램의 흐름 순서를 바꿀수 있습니다.

 

추후 관련 예제를 연구하게 되면 보여드리겠습니다.

 

감사 합니다.