Ini adalah alat untuk debuging program, unassembling dan cracking, dan membaca area memori "tersembunyi" seperti sektor boot, dan banyak lagi.
Masuk ke DOS dan ketik "debug", Anda akan mendapatkan prompt seperti ini:
-
Kemudian ketik "?" ( tanpa tanda petik ) untuk melihat perintah-perintah yang dapat digunakan.
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
Mari kita lalui masing-masing perintah:
-A
107A: 0100
Pada titik ini Anda dapat mulai merakit beberapa program, seperti menggunakan sebuah assembler. Namun debug assembler sangat terbatas. Mari kita mencoba untuk memasukkan program yang sederhana:
-A
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-G
A
Program dihentikan biasanya
Perhatikan bagaimana kalian menjalankan program yang baru saja kalian masukkan dengan "g", dan juga perhatikan bagaimana bagian set-up tidak ada? Itu karena debug hanya terlalu terbatas untuk mendukung itu.
Hal lain yang dapat kalian lakukan dengan assembler adalah menentukan alamat di mana Anda ingin memulai, secara default ini adalah 0100 karena itulah di mana semua file COM.
Bandingkan memakan waktu 2 blok memori dan menampilkan mereka berdampingan, byte untuk byte. Mari kita lakukan contoh. Cukup keluar dari debug jika kalian belum sudah menggunakan "q". Sekarang ketik
"debug c: \ command.com"
-C 0100 l 8 0200
10A3: 0100 7A 06 10A3: 0200
Perintah ini di-compare dengan offset 0100 0200 untuk panjang 8 byte. Debug menanggapi dengan lokasi yang BERBEDA. Jika 2 lokasi adalah debug, sama hanya akan menghilangkan mereka, jika semua adalah sama debug hanya akan kembali ke prompt tanpa tanggapan.
Dump:
Dump akan dump segmen memori tertentu. Untuk menguji ini, kode program assembly lagi:
C: \ debug>
-A
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-D l 8 0100
107A: 0100 B4 02 B2 41 CD 21 CD 20
... A.!.
The "B4 02 B2 41 CD 21 CD 20" adalah program yang baru saja dibuat dalam bahasa mesin.
B4 02 MOV AH =, 02
B2 41 MOV DL =, 41
CD 21 = INT 21
CD 20 = INT 20
The "... A.!." bagian merupakan program kalian dalam ASCII. The "." merupakan karakter non-printable. Perhatikan A di sana.
Ini adalah salah satu perintah keras. Dengan itu kalian dapat memasukkan / mengubah area memori tertentu. Mari kita ubah program kami sehingga mencetak B bukannya suatu A.
-E 0103 <- mengedit program di segmen 0103
107A: 0103 41,42 <- perubahan 41-42
-G
B
Program dihentikan biasanya
-
Bukankah itu menakjubkan?
Perintah ini cukup berguna, tapi siapa yang tahu ....
Perintah ini mengisi jumlah tertentu memori dengan data tertentu. Mari kita misalnya membersihkan semua memori dari segmen 0100-0108, yang kebetulan program kami.
-F 0100 l 8 0 <- file offset 0100 untuk panjang 8 byte dengan 0
-D 0100 l 8 <- memverifikasi bahwa hal itu berhasil
107A: 0100 00 00 00 00 00 00 00 00 .......
Yap, itu berhasil.
Sejauh ini kami menggunakan Go (g) untuk memulai program baru saja kita buat. Tapi Go dapat digunakan untuk banyak lagi. Sebagai contoh, katakanlah kita ingin mengeksekusi program di 107B: 0100:
-R CS <- mengatur CS mendaftar untuk menunjuk ke 107B
CS 107A
: 107B
-G = 100
Kalian juga dapat mengatur breakpoints.
-A <- masukkan program asli kita sehingga kita memiliki sesuatu
107A: 0100 MOV AH, 02 untuk bekerja dengan
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-G 102 <- menyiapkan jalur istirahat di 107A: 0102
Pada titik ini program akan berhenti, menampilkan semua register dan instruksi saat ini.
Hex:
Hal ini dapat sangat berguna. Ini mengurangi dan menambahkan dua nilai heksadesimal:
-H 2 1
0003 0001 <- 2h + 1 + = 3h dan 2h - 1h = 1h
Hal ini sangat berguna untuk menghitung panjang program, karena kalian akan lihat nanti.
input:
Ini adalah salah satu perintah yang lebih maju, dan saya memutuskan untuk tidak membicarakannya terlalu banyak untuk saat ini. Ini akan membaca byte data dari komputer kalian port I / O (keyboard, mouse, printer, dll).
-I 3FD
60
-
Data anda mungkin berbeda.
Jika kalian ingin tahu, 3FD adalah Com port 1, juga dikenal sebagai Asynchronous Pertama Adapter.
Load:
Perintah ini memiliki 2 format. Hal ini dapat digunakan untuk memuat nama file tertentu dengan perintah nama (n), atau dapat memuat sektor tertentu.
-N c: \ command.com
-L
Hal ini akan memuat command.com ke debug. Ketika sebuah program yang valid dimuat semua register akan dibentuk dan siap untuk melaksanakan program.
Metode lainnya adalah sedikit lebih rumit, tetapi potensial juga lebih berguna. Perintahnya adalah
L <address> <sector> letter/> <drive <amount untuk load>
-L 100 2 10 20
Hal ini akan memuat dimulai pada 0100 offset dari drive C (0 = A, 1 = B, 2 = C, dll), sektor 10h 20h sektor. Hal ini dapat berguna untuk memulihkan file Anda dihapus.
Pindah:
Pindahkan mengambil byte dari alamat awal dan bergerak ke alamat tujuan. Hal ini sangat baik untuk memindahkan data sementara ke daerah bebas, dari pada memanipulasi tanpa harus khawatir tentang mempengaruhi program asli. Hal ini terutama berguna jika digunakan bersama dengan perintah r yang saya akan mendapatkan nanti. Mari kita mencoba sebuah contoh:
-A <- masukkan program asli kita sehingga kita memiliki sesuatu
107A: 0100 MOV AH, 02 untuk bekerja dengan
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-M 107A: 0100 L 8 107B: 0100 <- lebih 8 byte mulai dari 107A: 0100 menjadi 107B: 0100
E-107B: 0103 <- edit 107B: 0103
107B: 41,42 0103 <- dan mengubahnya 42 (
-D 107A: 0100 L 8 <- pastikan itu berhasil
107A: 0100 B4 02 B2 41 CD 21 CD 20 ... A.!.
-D 107B: 0100 L 8
107A: 0100 B4 02 B2 42 CD 21 CD 20 ... B.!.
-M 107B: 0100 L 8 107A: 0100 <- mengembalikan program asli karena kita menyukai perubahan.
Nama:
Ini akan mengatur debug dengan sebuah nama berkas digunakan untuk I / O perintah. Anda harus menyertakan ekstensi file, dan kalian dapat menggunakan perintah tambahan:
-N c: \ command.com
Output:
Tepatnya apa yang kalian pikirkan. Output mengirimkan barang ke port I / O. Jika kalian memiliki modem eksternal dengan lampu yang keren di atasnya, kalian dapat menguji hal ini. Cari tahu apa port modem kalian aktif dan menggunakan nomor hex yang sesuai di bawah ini:
Com 1 = 3F8 - 3FF (3DF untuk tambang)
Com 2 = 2F8 - 2FF
Com 3 =??? -??? (Jika seseorang tahu, tolong beritahu saya)
Sekarang giliran pada bit (Data Terminal Ready) DTA dengan mengirimkan 01h untuk itu:
-O XXX 1 <- XXX adalah port com dalam hex
Segera setelah kalian tekan enter, lihat di modem Anda, kalian akan melihat lampu menyala. Anda bisa bersenang-senang bahkan lebih dengan perintah output. Katakanlah seseorang meletakkan salah satu password BIOS pada komputer "kalian". Biasanya kalian akan harus mengambil baterai untuk menyingkirkan, tapi sekarang tidak lagi:
MI / AWARD BIOS
-O 70 17
-O 71 17
QPHOENIX BIOS
-O 70 FF
-O 71 17
QGENERIC
-O 70 2E
-O 71 FF
Perintah-perintah ini akan menghapus BIOS memori, sehingga melumpuhkan password.
Hasil dalam pelaksanaan program, biasanya digunakan bersama-sama Trace menganjal, yang saya akan mencakup nanti. Seperti pergi perintah, kalian dapat menentukan alamat dari mana untuk memulai
menggunakan alamat =
-P 2
Debug akan merespon dengan register dan perintah saat ini akan dieksekusi.
Cukup:
Ini harus menjadi fitur yang paling maju dari debug, itu keluar debug!
-Q
Pendaftaran:
Perintah ini dapat digunakan untuk menampilkan nilai saat ini dari semua register, atau mengaturnya secara manual. Hal ini sangat berguna untuk menulis file-file karena anda akan lihat nanti.
-R AX
AX: 011B
: 5
-
Perintah lain yang sangat berguna. Hal ini digunakan untuk mencari terjadinya byte tertentu, atau serangkaian byte di segmen. Data untuk mencari bisa dengan baik karakter, atau nilai hex. nilai Hex dimasukkan dengan spasi atau koma di antara mereka, dan karakter yang diapit dengan tanda kutip (tunggal atau ganda). kalian juga dapat mencari hex dan karakter dengan string yang sama:
-Nc: \ command.com <- load command.com sehingga kita memiliki beberapa data untuk mencari di
-L
-S 0 l 0 "MS-DOS" <- search seluruh blok memori untuk "MS-DOS"
10A3: 39E9 <- menemukan string di 10A3: 39E9
CATATAN: pencarian kasus sensitif!
Trace:
Ini adalah fitur yang benar-benar besar debug. Ini akan menelusuri melalui instruksi satu program pada satu waktu, menampilkan instruksi dan register setelah masing-masing. Seperti pergi perintah Anda dapat menentukan di mana untuk memulai eksekusi dari, dan untuk berapa lama.
-A <- ya, hal ini lagi
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-T = 0100 8
Jika kalian meninggalkan jumlah instruksi yang Anda ingin melacak, Anda dapat menggunakan dilanjutkan (p) untuk melanjutkan pelaksanaan selama Anda inginkan.
Unassemble:
Unassembles blok kode. Bagus untuk debugging (dan cracking)
-U 100 L 8 <- unassembles 8 byte dimulai pada offset 100
107A: 0100 MOV AH, 02 <- respon debut's
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
Perintah ini bekerja sangat mirip dengan Load. Ia juga memiliki 2 cara dapat beroperasi: menggunakan nama, dan dengan menentukan lokasi yang tepat. Lihat kembali ke Load untuk informasi lebih lanjut
dimana sumbernya gan belajar machine langauage..?
ReplyDelete