Bagikan melalui


Menggunakan Alias

Alias adalah string karakter yang secara otomatis diganti dengan string karakter lainnya. Anda dapat menggunakannya dalam perintah debugger dan untuk menghindari pengetikan ulang frasa umum tertentu.

Alias terdiri dari nama alias dan alias yang setara. Saat Anda menggunakan nama alias sebagai bagian dari perintah debugger, nama secara otomatis digantikan oleh alias yang setara. Penggantian ini terjadi segera, sebelum perintah diurai atau dijalankan.

Debugger mendukung tiga jenis alias:

  • Anda dapat mengatur dan memberi nama alias bernama pengguna.

  • Anda dapat mengatur alias nama tetap, tetapi diberi nama $u 0, $u 1, ..., $u 9.

  • Debugger menetapkan dan menamai alias otomatis.

Mendefinisikan Alias User-Named

Saat menentukan alias bernama pengguna, Anda dapat memilih nama alias dan alias yang setara:

  • Nama alias dapat berupa string apa pun yang tidak berisi spasi kosong.

  • Alias yang setara dapat berupa string apa pun. Jika Anda memasukkannya di keyboard, alias yang setara tidak boleh berisi spasi atau pengembalian ke awal. Atau, Anda dapat mengaturnya sama dengan string dalam memori, nilai ekspresi numerik, konten file, nilai variabel lingkungan, atau output dari satu atau beberapa perintah debugger.

Nama alias dan padanannya sensitif terhadap huruf besar/kecil.

Untuk menentukan atau mendefinisikan ulang alias bernama pengguna, gunakan perintah sebagai (Atur Alias) atau aS (Atur Alias).

Untuk menghapus alias, gunakan perintah iklan (Hapus Alias).

Untuk mencantumkan semua alias bernama pengguna saat ini, gunakan perintah al (Alias Daftar).

Mendefinisikan Alias Fixed-Name

Ada 10 alias dengan nama tetap. Nama alias mereka $u 0, $u 1, ..., $u 9. Alias yang setara dapat berupa string apa pun yang tidak berisi penekanan tombol ENTER.

Gunakan perintah r (Registers) untuk menentukan alias yang setara untuk alias nama tetap. Saat Anda menentukan alias nama tetap, Anda harus menyisipkan titik (.) sebelum huruf "u". Teks setelah tanda sama dengan (=) setara dengan alias. Alias yang setara dapat mencakup spasi atau titik koma, tetapi spasi di depan dan belakang diabaikan. Anda tidak boleh mengapit alias yang ekuivalen menggunakan tanda kutip (kecuali Anda ingin tanda kutip dalam hasilnya).

Nota Jangan bingung dengan menggunakan perintah r (Registers) untuk alias nama tetap. Alias ini bukan register atau pseudoregister, meskipun Anda menggunakan perintah r untuk mengatur padanan alias mereka. Anda tidak perlu menambahkan tanda pada (@) sebelum alias ini, dan Anda tidak dapat menggunakan perintah r untuk menampilkan nilai salah satu alias ini.

Secara default, jika Anda tidak menentukan alias nama tetap, itu adalah string kosong.

Alias Otomatis

Debugger mengatur alias otomatis berikut.

Nama alias Alias setara

$ntnsym

Modul yang paling tepat untuk simbol NT pada arsitektur asli komputer. Alias ini dapat sama dengan ntdll atau nt.

$ntwsym

Modul yang paling tepat untuk simbol NT selama debugging 32-bit yang menggunakan WOW64. Alias ini bisa ntdll32 atau beberapa versi 32-bit lainnya dari Ntdll.dll.

$ntsym

Modul yang paling tepat untuk simbol NT yang cocok dengan mode komputer saat ini. Saat Anda men-debug dalam mode native, alias ini sama dengan $ntnsym. Saat Anda melakukan debug dalam mode non-asli, debugger mencoba menemukan modul yang cocok dengan mode ini. (Misalnya, selama debugging 32-bit yang menggunakan WOW64, alias ini sama dengan $ntwsym.)

$CurrentDumpFile

Nama file cadangan terakhir yang dimuat debugger.

$CurrentDumpPath

Jalur direktori file cadangan terakhir yang dimuat debugger.

$CurrentDumpArchiveFile

Nama file arsip cadangan terakhir (file CAB) yang dimuat debugger.

$CurrentDumpArchivePath

Jalur direktori file arsip cadangan terakhir (file CAB) yang dimuat debugger.

Alias otomatis mirip dengan pseudo-register otomatis, kecuali Anda dapat menggunakan alias otomatis dengan token terkait alias (seperti ${ }), sedangkan Anda tidak dapat menggunakan pseudo-register otomatis dengan token ini.

Menggunakan Alias di Jendela Perintah Debugger

Setelah menentukan alias, Anda dapat menggunakannya dalam entri perintah apa pun. Nama alias secara otomatis diganti dengan alias yang setara. Oleh karena itu, Anda dapat menggunakan alias sebagai ekspresi atau sebagai makro.

Nama alias diperluas dengan benar bahkan jika diapit dalam tanda kutip. Karena alias yang setara dapat mencakup sejumlah tanda kutip atau titik koma, alias yang setara dapat mewakili beberapa perintah.

Alias bernama pengguna hanya dikenali jika namanya dipisahkan dari karakter lain dengan spasi kosong. Karakter pertama dari nama aliasnya harus memulai baris atau mengikuti spasi, titik koma, atau tanda kutip. Karakter terakhir dari nama aliasnya harus mengakhiri baris atau diikuti oleh spasi, titik koma, atau tanda kutip.

Nota Teks apa pun yang Anda masukkan ke jendela Perintah Debugger yang dimulai dengan "as", "aS", "ad", atau "al" tidak menerima penggantian alias. Pembatasan ini mencegah perintah alias menjadi tidak dapat berfungsi. Namun, pembatasan ini juga berarti bahwa perintah yang mengikuti ad atau al di dalam satu baris tidak memiliki aliasnya digantikan. Jika Anda ingin alias diganti dalam baris yang dimulai dengan salah satu string ini, tambahkan titik koma sebelum alias.

Namun, Anda dapat menggunakan token ${ } untuk memperluas alias bernama pengguna bahkan ketika berada di samping teks lain. Anda juga dapat menggunakan token ini bersama dengan sakelar tertentu untuk mencegah alias diperluas atau menampilkan nilai terkait alias tertentu. Untuk informasi selengkapnya tentang situasi ini, lihat ${ } (Penerjemah Alias).

Alias dengan nama tetap berkembang dengan benar dari mana saja di dalam satu baris, terlepas dari bagaimana alias tersebut dibenamkan dalam teks baris.

Anda tidak dapat menggunakan perintah yang hanya tersedia di WinDbg (.open, .write_cmd_hist (Write Command History), .lsrcpath, dan .lsrcfix) dan beberapa perintah tambahan (.hh, .cls, .wtitle, .remote, kernel-mode .restart, dan user-mode .restart) dengan alias.

Menggunakan Alias dalam File Skrip

Saat Anda menggunakan alias dalam file skrip, Anda harus berhati-hati untuk memastikan bahwa alias diperluas pada waktu yang benar. Pertimbangkan skrip berikut:

.foreach (value {dd 610000 L4})
{
   as /x ${/v:myAlias} value + 1
   .echo value myAlias
}

ad myAlias

Pertama kali melalui perulangan, perintah as, aS (Atur Alias) menetapkan nilai ke myAlias. Nilai yang ditetapkan ke myAlias adalah 1 plus 610000 (output pertama dari perintah dd). Namun, ketika perintah .echo (Echo Comment) dijalankan, myAlias belum diperluas, jadi alih-alih melihat 610001, kita melihat teks "myAlias".

0:001> $$>< c:\Script02.txt
00610000 myAlias
00905a4d 0x610001
00000003 0x905a4e
00000004 0x4
0000ffff 0x5

Masalahnya adalah bahwa myAlias tidak diperluas sampai blok kode baru dimasukkan. Entri berikutnya ke perulangan adalah blok baru, sehingga myAlias diekspansi menjadi 610001. Tetapi terlambat: kita seharusnya melihat 610001 pertama kali melalui perulangan, bukan yang kedua kalinya. Kita dapat memperbaiki masalah ini dengan menyertakan perintah .echo (Echo Comment) di blok baru seperti yang ditunjukkan pada skrip berikut.

.foreach (value {dd 610000 L4}) 
{
   as /x ${/v:myAlias} value + 1
   .block{.echo value myAlias}
}

ad myAlias

Dengan skrip yang diubah, kita mendapatkan output yang benar berikut.

0:001> $$>< c:\Script01.txt
00610000 0x610001
00905a4d 0x905a4e
00000003 0x4
00000004 0x5
0000ffff 0x10000

Untuk informasi selengkapnya, lihat .block dan ${ } (Penerjemah Alias).

Menggunakan Token .foreach dalam Alias

Ketika Anda menggunakan token .foreach dalam definisi alias, Anda harus berhati-hati untuk memastikan bahwa token diperluas. Pertimbangkan urutan perintah berikut.

r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {as myAlias Token}
al

Perintah pertama menetapkan nilai register pseudo $t 0 menjadi 5. Perintah kedua menghapus nilai apa pun yang mungkin telah ditetapkan sebelumnya ke myAlias. Perintah ketiga mengambil token ketiga dari perintah ?@$t 0 dan mencoba menetapkan nilai token tersebut ke myAlias. Perintah keempat mencantumkan semua alias dan nilainya. Kita akan mengharapkan nilai myAlias menjadi 5, tetapi sebaliknya nilainya adalah kata "Token".

   Alias            Value  
 -------          ------- 
 myAlias          Token 

Masalahnya adalah bahwa perintah as berada di awal baris dari isi perulangan .foreach. Saat baris dimulai dengan perintah as, alias dan token di baris tersebut tidak diekspansi. Jika kita meletakkan titik koma atau spasi kosong sebelum perintah sebagai , maka alias atau token apa pun yang sudah memiliki nilai diperluas. Dalam contoh ini, myAlias tidak diperluas karena belum memiliki nilai. Token diperluas karena memiliki nilai 5. Berikut adalah urutan perintah yang sama dengan penambahan titik koma sebelum perintah sebagai .

r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {;as myAlias Token}
al

Sekarang kita mendapatkan output yang diharapkan.

  Alias            Value  
 -------          ------- 
 myAlias          5 

Alias Rekursif

Anda dapat menggunakan alias nama tetap dalam definisi alias apa pun. Anda juga dapat menggunakan alias yang diberikan oleh pengguna dalam definisi alias nama tetap. Namun, untuk menggunakan alias bernama pengguna dalam definisi alias bernama pengguna lain, Anda harus menambahkan titik koma sebelum perintah as atau aS , atau penggantian alias tidak terjadi pada baris tersebut.

Ketika Anda menggunakan definisi rekursif dari jenis ini, setiap alias diterjemahkan segera setelah digunakan. Misalnya, contoh berikut menampilkan 3, bukan 7.

0:000> r $.u2=2 
0:000> r $.u1=1+$u2 
0:000> r $.u2=6 
0:000> ? $u1 
Evaluate expression: 3 = 00000003

Demikian pula, contoh berikut menampilkan 3, bukan 7.

0:000> as fred 2 
0:000> r $.u1= 1 + fred 
0:000> as fred 6 
0:000> ? $u1 
Evaluate expression: 3 = 00000003

Contoh berikut juga diizinkan dan menampilkan 9.

0:000> r $.u0=2 
0:000> r $.u0=7+$u0 
0:000> ? $u0
Evaluate expression: 9 = 00000009

Contoh Alias

Anda dapat menggunakan alias sehingga Anda tidak perlu mengetik nama simbol panjang atau kompleks, seperti dalam contoh berikut.

0:000> as Short usersrv!NameTooLongToWantToType
0:000> dw Short +8

Contoh berikut mirip dengan contoh sebelumnya tetapi menggunakan alias nama tetap.

0:000> r $.u0=usersrv!NameTooLongToWantToType
0:000> dw $u0+8

Anda dapat menggunakan alias sebagai makro untuk perintah yang sering Anda gunakan. Contoh berikut menambah register eax dan ebx sebanyak dua kali.

0:000> as GoUp r eax=eax+1; r ebx=ebx+1
0:000> GoUp
0:000> GoUp

Contoh berikut menggunakan alias untuk menyederhanakan pengetikan perintah.

0:000> as Cmd "dd esp 14; g"
0:000> bp MyApi Cmd 

Contoh berikut mirip dengan contoh sebelumnya tetapi menggunakan alias nama tetap.

0:000> r $.u5="dd esp 14; g"
0:000> bp MyApi $u5 

Kedua contoh sebelumnya setara dengan perintah berikut.

0:000> bp MyApi "dd esp 14; g"

File Tools.ini

Di CDB (dan NTSD), Anda dapat menentukan alias nama tetap dalam file tools.ini . Untuk menentukan alias nama tetap, tambahkan bidang $u yang Anda inginkan ke entri [NTSD], seperti dalam contoh berikut.

[NTSD]
$u1:_ntdll!_RtlRaiseException
$u2:"dd esp 14;g"
$u9:$u1 + 42

Anda tidak dapat mengatur alias bernama pengguna dalam file Tools.ini.

Alias Fixed-Name vs. Alias User-Named

Alias nama pengguna lebih mudah digunakan daripada alias bernama tetap. Sintaks definisinya lebih sederhana, dan Anda dapat mencantumkannya dengan menggunakan perintah al (Alias Daftar).

Alias dengan nama tetap akan diganti jika digunakan bersamaan dengan teks lain. Untuk membuat alias bernama pengguna diganti ketika berada di samping teks lain, sertakan dalam token ${ } (Penerjemah Alias).

Penggantian alias dengan nama tetap terjadi sebelum penggantian alias yang dinamai oleh pengguna.