| |
 |
การใช้โปรแกรมดีบัก (Debug program) |  |
| |
ปรับปรุง : 2551-09-02 (ปรับคำสั่ง)
|
มีเรื่องเล่าว่า เครื่องคอมพิวเตอร์ในอดีต ทำงานผิดปกติ เมื่อนักคอมพิวเตอร์ตรวจสอบโดยละเอียด
ก็พบว่าเหตุของปัญหาเกิดจาก แมลง (Bug) เข้าไปอยู่ในเครื่องคอมพิวเตอร์ เมื่อนำแมลงออกมา ระบบต่าง ๆ ก็ทำงานได้ตามปกติ
ปัจจุบันจึงเรียกการแก้ปัญหาที่เกี่ยวกับเครื่องคอมพิวเตอร์ว่าการดีบัก (Debug)
ดีบัก (Debug) คือ โปรแกรมที่พัฒนาเพื่อแก้ไขปัญหาพื้นฐานในระบบปฏิบัติการดอส (DOS = Disk Operation System)
เป็นโปรแกรมสำหรับแก้ไขแฟ้มอย่างง่าย เป็นคำสั่งภายนอก (External Command) ของดอส (DOS)
ที่นิยมใช้งานในกลุ่มนักพัฒนามาตั้งแต่ยุคระบบปฏิบัติการดอส
|
|
? คือการแสดงคำสั่งที่ใช้งานได้ของ debug
|
| |
C:\>debug
-?
assemble A [address]
compare C range address
dump D [range]
enter E address [list]
fill F range list
go G [=address] [addresses]
hex H value1 value2
input I port
load L [address] [drive] [firstsector] [number]
move M range address
name N [pathname] [arglist]
output O port byte
proceed P [=address] [number]
quit Q
register R [register]
search S range list
trace T [=address] [value]
unassemble U [range]
write W [address] [drive] [firstsector] [number]
allocate expanded memory XA [#pages]
deallocate expanded memory XD [handle]
map expanded memory pages XM [Lpage] [Ppage] [handle]
display expanded memory status XS
-
|
| |
C:\>debug
-t
AX=0000 BX=0000 CX=0000 DX=0011 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AE8 ES=0AE8 SS=0AE8 CS=0AE8 IP=0102 NV UP EI PL NZ NA PO NC
-
|
|
EXAMPLE :: ตัวอย่างการใช้ SHL
|
| |
- SHL คือย้ายบิท เข้าไปทางซ้าย
- DFFD = 1101 1111 1111 1101
- BFFA = 1011 1111 1111 1010
C:\>debug
-a 100
0B24:0100 mov dx,dffd
0B24:0103 shl dx,1
0B24:0105
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=01B8
DS=0B24 ES=0B24 SS=0B24 CS=0B24 IP=0103 OV UP EI PL NZ NA PE CY
0B24:0103 D1E2 SHL DX,1
-t =cs:100 2
AX=0000 BX=0000 CX=0000 DX=DFFD SP=FFEE BP=0000 SI=0000 DI=01B8
DS=0B24 ES=0B24 SS=0B24 CS=0B24 IP=0103 OV UP EI PL NZ NA PE CY
0B24:0103 D1E2 SHL DX,1
AX=0000 BX=0000 CX=0000 DX=BFFA SP=FFEE BP=0000 SI=0000 DI=01B8
DS=0B24 ES=0B24 SS=0B24 CS=0B24 IP=0105 NV UP EI NG NZ NA PE CY
0B24:0105 D1E2 SHL DX,1
-
|
|
โปรแกรมนี้แสดงการเขียน assembly ใน DOS และการสั่งประมวลผลด้วยคำสั่ง g
การเขียนโปรแกรมนี้ได้ต้องเข้าใจว่า int 20 คืออะไร int 21 ใช้อย่างไร และ 41 คืออักษรอะไร และที่สำคัญต้องเข้าใจว่า debug มีคำสั่งอะไรให้ใช้บ้าง
|
C:\>debug
-a
106F:0100 mov ah,02
106F:0102 mov dl,41
106F:0104 int 21
106F:0106 int 20
106F:0108
-g
A
Program terminated normally
- n x.com
- rcx
: 8
- w
- q
C:\>x
A
C:\>
|
สรุปคำสั่ง debug เลขที่ใช้คือ 0000 หมายถึงเลขฐาน 16 จำนวน 4 หลัก สูงสุดคือ ffff
a :: Assemble แปลภาษา aassembly ไปแปลเป็นภาษาเครื่อง (enter 2 ครั้งเมื่อจบ)
C:\assembly>debug
-n i.com
-a cs:100
106F:0100 mov ah,08
106F:0102 int 21
106F:0104 mov ah,4c
106F:0106 int 21
106F:0108
-rcx
CX 0000
:8
-w
Writing 00008 bytes
-q
c :: Compare เปรียบเทียบ
-c cs:100 102 ds:1a0
1090:0100 B4 1E 1090:01A0
1090:0101 08 B4 1090:01A1
1090:0102 CD 52 1090:01A2
-
d :: Dump แสดงข้อมูล
-d cs:100 200
-d cs:100 107 (แสดงเพียง 7 ตัวอักษรจากตำแหน่ง 100 - 107)
-d cs:100
e :: Enter แก้ไขข้อมูล
-e cs:4a5 41 42 43
f :: Fill เติมลงในช่องที่กำหนด
-f cs:100 107 "abc" (ทำให้ทั้งแฟ้มมีแต่ abc)
-f cs:103 105 "d" (ทำให้ตัวที่ 4 ถึง 6 เป็นอักษร d)
g :: Go สั่งประมวลผล
-g
-g 102 ประมวลผลไปถึง address ที่ต้องการ
h :: Hexarithmatic คำนวณเลขฐาน 16
-h f 8
0017 0007 (ผลลัพธ์คือผลบวก และผลต่าง)
-h 111 110
0221 0001 (ผลลัพธ์คือผลบวก และผลต่าง)
i :: Input อ่านข้อมูลจาก port ที่กำหนด
-i 2f8
l :: Load เรียกข้อมูลจาก disk ใหม่ ถ้าเคย Load มาแล้วก็หมายถึง Load มาทับของเดิมในหน่วยความจำ
-n inkey.com
-l
m :: Move ย้ายข้อมูล 6 อักษรไปเริ่มทับตำแหน่งที่ 130 เป็นต้นไป
คัดลอกจาก 100 ไปถึง 106 รวม 6 byte ไปตำแหน่งที่ 130
-m cs:100 106 130
n :: Name กำหนดชื่อแฟ้มที่จะ load หรือ write
-n inkey.com
o :: Output ส่งข้อมูลออกทาง port ที่กำหนด
-o 2f8
p :: Proceed สั่งประมวลผล แต่ต้องมีโปรแกรมที่ทดสอบได้นะครับ
-p =100
-p
q :: Quit เลิกการทำงาน
-q
r :: Register เรียกดู หรือแก้ไขค่าใน register
ค่าของ IP จะไม่เลื่อนเหมือนการใช้ t ที่ประมวลผล และทำให้ตำแหน่งของ IP เลื่อนไป แต่คำสั่ง r จะแสดงค่าเดิมทุกครั้ง
-r
-r ax (แล้วกรอกค่าที่ต้องการ)
s :: Search ค้นหา
-s cs:100 110 41
t :: Trace ประมวลผล แล้วแสดงผลทีละคำสั่ง ตัวอย่างนี้ทำเพียง 3 บรรทัดคำสั่ง
ค่าของ IP จะเลื่อนไป IP ถัดไป ไม่เหมือนคำสั่ง r ที่แสดงค่าเหมือนเดิมทุกครั้ง
-t =cs:100 3
-t
u :: Unassemble แปลจากภาษาเครื่องมาเป็น assembly
-u
1091:0100 B408 MOV AH,08
1091:0102 CD21 INT 21
1091:0104 B44C MOV AH,4C
1091:0106 CD21 INT 21
-
w :: Write เขียนข้อมูลจากหน่วยความจำลง disk
-w
|
- รับอักษร ด้วยบริการ AH=8 แบบไม่แสดงผล
- แสดงอักษร ด้วยบริการ AH=02
- ตัวอย่างนี้ผู้ทดสอบกด a หนึ่งครั้ง จะแสดงอักษร a มา 3 ครั้ง
C:\>debug
-n x.com
-a
0AEA:0100 mov ah,08
0AEA:0102 int 21
0AEA:0104 mov dl,al
0AEA:0106 mov ah,02
0AEA:0108 int 21
0AEA:010A int 21
0AEA:010C int 21
0AEA:010E int 20
0AEA:0110
-rcx
CX 0000
:10
-w
Writing 00010 bytes
-g
aaa
Program terminated normally
-
|
")
if(url == "www.yonok.a") document.write("")
if(url == "www.thaiall") document.write("")
if(url == "www.perlphp") document.write("")
if(url == "thaiall.kor") document.write("")
-->