Debug di ms dos (part 1) penulis : mywisdom umur : 26 th spesialiasi: fids programming, webmaster email: antonsoft_2004@yahoo.com artikel ini untuk pemula untuk pengenalan debug.exe di ms dos prompt yang perlu di persiapkan untuk artikel ini: - kacang /camilan / kue / snack - sebotol bir / kopi / aqua botol dari dulu penulis sering banget liat orang make debug ini tapi krn cupu jadi gak bisa2 tapi gapapalah sekali2 penulis coba ketengahkan sedikit tentang permainan asik ini. [b]Menggunakan debug.exe[/b] [img]http://superdecorltd.com/debug.jpg[/img] debug.exe merupakan tool bawaan ms dos untuk debugger, disasembler dan eksekusi bahasa rakitan. Ok langsung aja kita mulai menggunakan debug.exe, caranya buka ms dos prompt lalu ketikkan: debug.exe (sintaks lengkap penggunaan debug:debug [[Drive:][Path] FileName [parameters]]) contoh: [code] Microsoft Windows [Version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. All rights reserved. C:\Users\mywisdom>debug.exe - [/code] Untuk melihat perintah2 yang bisa kita lakukan dari debug.exe ketikkan : ? di console debug.exe lalu enter misal: [code] -? 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 - [/code] langsung aja kita praktek assemble.Ok mari kita rakit sedikit mulai dari offset 100 ketikkan ini di konsole debug: [code] -a 100 mov ah,9 mov dx,0000 int 21 ret db "mywisdom$",13,10 17CB:0113 -a 0102 17CB:0102 mov dx,0108 17CB:0105 -g [/code] contoh di pc penulis: [code] Microsoft Windows [Version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. All rights reserved. C:\Users\mywisdom>debug -a 100 17CB:0100 mov ah,9 17CB:0102 mov dx,0000 17CB:0105 int 21 17CB:0107 ret 17CB:0108 db "mywisdom$",13,10 17CB:0113 -a 0102 17CB:0102 mov dx,0108 17CB:0105 -g mywisdom Program terminated normally - [/code] [img]http://superdecorltd.com/debug2.jpg[/img] Sebelum penulis jelaskan tentang instruksi bahasa rakitan di atas, berikut ini sekilas info (wah kayak acara berita aja yah hehehe) tentang segmen dan offset: a 100 kita akan mulai assemble pada offset 0100 , lalu muncul tampilan seperti ini: 17CB:0100 (ini alamat relatif di pc penulis, di pc anda berbeda) string di atas merupakan segmen dan offset (17cb merupakan segmen, 0100 merupakan offset), segmen sama offset ini merupakan alamat memori di pc ente (format hexadecimal(basis 16)) untuk lebih jelasnya, formatnya adalah sbb: [code] aaaa:bbbb [/code] aaaa -> segmen -> alamat awal bbbb -> offset -> 1 page sebesar 64 kb segmen ini dipakai untuk mengakses memori maks 1 mb. segemen dan offset ini disebut juga sebagai alamat relatif, jika kita lihat segmen dan offset di atas: 17CB:0100, segmen berisi 17cb hexa dan offset berisi 0100 hexa kita bisa konvert ke alamat absolut: [code] (17CB x 10) + 0100 = 17DB0 [/code] alamat absolut memori kita adalah 17DB0 Nah dalam penggunaan debug alamat offset ini kita anggap sebagai nomor baris. Berikut ini adalah penjelasan tentang instruksi asm di atas: 17CB:0100 mov ah,9 -> pada segmen 17cb, offset 0100, kita isi dengan instruksi assembly pengisian register ah dengan nilai 9 hexa 17CB:0102 mov dx,0000 -> di sini karena kita belum tahu alamat offset db kita isi dengan nilai 0000 17CB:0105 int 21 -> interup 21 hexa, memanggil fungsi ms dos int 21 h fungsi 9 hexa untuk print string ke layar 17CB:0107 ret -> return 17CB:0108 db "mywisdom$",13,10 -> pada segmen 17cb,offset ke 0108 kita define byte mywisdom 17CB:0113 ->di sini kita enter -a 0102 ->lalu kita reassemble lagi offset 0102, kita isi register dx dengan offset define byte kita 17CB:0102 mov dx,0108 -> kita isi register dx dengan offset define byte kita pada offset 0108 hexa 17CB:0105 ->enter -g -> perintah ini digunakan untuk menjalankan kode rakitan kita mywisdom Program terminated normally [b]Disassemble[/b] Ok setelah kita eksekusi di atas tadi mari kita coba disassemble mulai dari offset 100 hex dengan mengetik : u 100 [code] -u 100 17CB:0100 B409 MOV AH,09 -> diisi 9 hex merupakan syarat int 21 hexa fungsi 9 hex untuk print string 17CB:0102 BA0801 MOV DX,0108 -> register dx diisi dengan nilai hex 0108 17CB:0105 CD21 INT 21 -> pangil dos service [/code] Secara otomatis jika kita tidak menyebutkan range maka akan didisassemble hinga 31 byte dari pointer IP (instrucion pointer). [b]Melihat dan mengisi register[/b] Untuk mengisi dan melihat isi register kita gunakan perintah : r contoh: [code] C:\Users\mywisdom>debug -r cx CX 0000 -> cx belum diisi nilai masih 0000 hexa di offset 100 hexa :0100 -> ketikkan 0100 untuk mengisi cx dengan nilai 0100 hex -r cx -> melihat isi register cx CX 0100 -> cx berisi nilai 100 hex : [/code] [b]Dump isi memori[/b] untuk melakukan dump (dump di sini anggap aja kita dump isi kolom dari sql inject yah), kita ketikkan : d Misal kita ingin melihat informasi tentang vga card di pc kita biasanya di segmen c000 , offset 0010, contoh di pc penulis: [code] C:\Users\mywisdom\Desktop\debugtut\debug>debug -d c000:0010 C000:0010 30 30 24 22 E9 3D 21 77-40 00 E0 0A 30 30 49 42 00$".=!w@...00IB C000:0020 4D 20 56 47 41 20 43 6F-6D 70 61 74 69 62 6C 65 M VGA Compatible C000:0030 20 42 49 4F 53 2E 20 03-5A 00 6A 00 78 00 8B C0 BIOS. .Z.j.x... C000:0040 50 43 49 52 86 80 02 2A-00 00 18 00 00 00 00 03 PCIR...*........ C000:0050 80 00 00 00 00 80 00 00-93 03 00 C0 00 00 00 00 ................ C000:0060 00 00 00 00 00 00 00 00-74 00 00 C0 00 00 00 00 ........t....... C000:0070 00 00 00 00 1A 00 5C 03-00 C0 00 00 00 00 00 00 ......\......... C000:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 04 00 ................ [/code] [b]Melihat isi semua register dengan debug.exe[/b] Debug bisa digunakan untuk melihat isi register, ketikkan: r misal: [code] C:\Users\mywisdom\Desktop\debugtut>debug -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=17CB ES=17CB SS=17CB CS=17CB IP=0100 NV UP EI PL NZ NA PO NC 17CB:0100 B409 MOV AH,09 - [/code] ok karena terbatasnya waktu, akan saya lanjutkan di part 2 trims mywisdom