|
과정
|
설명
|
C:\asmtest>debug pgm1_1.exe
- |
debug 구동 |
-u
3170:0000 B87131 MOV AX,3171
3170:0003 8ED8 MOV DS,AX
3170:0005 A10400 MOV AX,[0004]
3170:0008 03060600 ADD AX,[0006]
3170:000C A30800 MOV [0008],AX
3170:000F B8004C MOV AX,4C00
3170:0012 CD21 INT 21
3170:0014 0200 ADD AL,[BX+SI]
3170:0016 050007 ADD AX,0700
3170:0019 000C ADD [SI],CL
3170:001B 8E064E55 MOV ES,[554E]
3170:001F 32C9 XOR CL,CL
-
|
pgm1_1.exe 를 unassemble 한다.
3170:0000 에서 3170은 segment address 0000 은 offset
address 이다.
|
| -t
AX=3171 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000
SI=0000 DI=0000
DS=3160 ES=3160 SS=3172 CS=3170 IP=0003 NV
UP EI PL NZ NA PO NC
3170:0003 8ED8 MOV DS,AX
- |
trace 명령으로 한스템 수행한다.
수행후 각 레지스터의 값 및 다음수행할 명령어가 보인다. |
| -t
AX=3171 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000
SI=0000 DI=0000
DS=3171 ES=3160 SS=3172 CS=3170 IP=0005 NV
UP EI PL NZ NA PO NC
3170:0005 A10400 MOV AX,[0004] DS:0004=0002
-
|
trace 명령으로 한스템 수행한다.
이제 DS 가 초기화된다.
이때 DS 는 3171 이 되었다. |
-d 3171:0004
3171:0000 02 00 05 00-07 00
0C 8E 06 4E 55 32
|
변수 A 의 값이 DS:0004 에 있음으로 메모리의 내용을 보니
02 00 으로 되어있다.
이는 0002 를 의미한다.
DS:0006 에는 변수 B의 값이 들어있다. 05 00 임으로0005
이다.
이는 프로그램에서 초기화시켜준 값과 같다.
|
| -t
AX=0002 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=3171 ES=3160 SS=3172 CS=3170 IP=0008 NV
UP EI PL NZ NA PO NC
3170:0008 03060600 ADD AX,[0006]
DS:0006=0005
|
trace 명령으로 한스템 수행한다.
MOV AX,[0004]에 의하여 AX 내용이 0002 로 바뀌어 있다.
다음 명령은 ADD AX,[0006] 이다
|
| -t
AX=0007 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000
SI=0000 DI=0000
DS=3171 ES=3160 SS=3172 CS=3170 IP=000C NV
UP EI PL NZ NA PO NC
3170:000C A30800 MOV [0008],AX
DS:0008=0007
|
trace 명령으로 한스템 수행한다.
이제 [0006]의 5와 AX 에 있던 2 가 더해져서 AX의 내용이
7이 되었다.
|
| -t
AX=0007 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000
SI=0000 DI=0000
DS=3171 ES=3160 SS=3172 CS=3170 IP=000F NV
UP EI PL NZ NA PO NC
3170:000F B8004C MOV AX,4C00
|
trace 명령으로 한스템 수행한다.
MOV [0008], AX 명령이 수행되었다.
결국 3171:0008의 내용이 0007이 된다.
|
| -g
프로그램이 정상적으로 종료되었습니다
|
프로그램을 끝까지 실행한다. |
| -t
AX=3171 BX=0000 CX=0018 DX=0000 SP=0100 BP=0000
SI=0000 DI=0000
DS=3160 ES=3160 SS=3172 CS=3170 IP=0003 NV
UP EI PL NZ NA PO NC
3170:0003 8ED8 MOV DS,AX
|
처음부터 다시 trace 한다.
|
-e 3171:0004
3171:0004 02.10
|
변수 A 값에 강제로 10을 할당한다 |
| -g
프로그램이 정상적으로 종료되었습니다
|
프로그램을 끝까지 실행한다. |
-d 3171:0004
3171:0000 10 00 05 00-15 00
0C 8E 06 4E 55 32
|
3171:0004 에는 10이 들어있고 결과에는 0015 가 들어있다. |
-a 0005
3170:0005 mov ax, [0002]
3170:0008
|
0005 번지의 어셈블 명령을 mov ax, [0004] 에서 mov ax,
[0002] 로 바꾸었다.
|
-u 0
3170:0000 B87131 MOV AX,3171
3170:0003 8ED8 MOV DS,AX
3170:0005 A10200 MOV AX,[0002]
3170:0008 03060600 ADD AX,[0006]
|
프로그램이 빠뀌어 있음을 보았다.
|