Bagikan melalui


s (Memori Pencarian)

Perintah s mencari melalui memori untuk menemukan pola byte tertentu.

Jangan bingungkan perintah ini dengan ~s (Ubah Prosesor Saat Ini), ~s (Atur Utas Saat Ini), |s (Atur Proses Saat Ini), atau ||s (Atur Sistem Saat Ini) perintah.

s [-[[Flags]Type]] Range Pattern 
s -[[Flags]]v Range Object 
s -[[Flags]]sa Range 
s -[[Flags]]su Range 

Parameter

[ Bendera ]
Menentukan satu atau beberapa opsi pencarian. Setiap bendera adalah satu huruf. Anda harus mengapit bendera dalam satu set tanda kurung siku ([]). Anda tidak dapat menambahkan spasi di antara tanda kurung siku, kecuali antara n atau l dan argumennya. Misalnya, jika Anda ingin menentukan opsi s dan w , gunakan perintah s -[sw]Type Range Pattern.

Anda dapat menentukan satu atau beberapa bendera berikut:

s
Menyimpan semua hasil pencarian saat ini. Anda dapat menggunakan hasil ini untuk mengulangi pencarian nanti.

r
Membatasi pencarian saat ini ke hasil dari pencarian terakhir yang disimpan. Anda tidak dapat menggunakan bendera s dan r dalam perintah yang sama. Saat Anda menggunakan r, nilai Rentang diabaikan, dan debugger hanya mencari hit yang disimpan oleh perintah s sebelumnya.

n Hits
Menentukan jumlah temuan yang akan disimpan saat Anda menggunakan bendera s . Nilai defaultnya adalah 1024 temuan. Jika Anda menggunakan n bersama dengan bendera lain, n harus menjadi bendera terakhir, diikuti oleh argumen Hits-nya. Spasi antara n dan Hits bersifat opsional, tetapi Anda tidak dapat menambahkan spasi lain dalam tanda kurung. Jika ada pencarian nanti yang menggunakan bendera s menemukan lebih dari jumlah hit yang ditentukan, pesan kesalahan Luapan ditampilkan untuk memberi tahu Anda bahwa tidak semua temuan sedang disimpan.

Panjang l
Menyebabkan pencarian string ASCII atau Unicode arbitrer hanya mengembalikan string yang setidaknya panjang karakter Panjang . Panjang defaultnya adalah 3. Nilai ini hanya memengaruhi pencarian yang menggunakan bendera -sa atau -su .

w
Hanya mencari wilayah memori yang dapat ditulis. Anda harus mengapit "w" dalam tanda kurung.

1
Hanya menampilkan alamat kecocokan pencarian dalam output pencarian. Opsi ini berguna jika Anda menggunakan token .foreach untuk menyalurkan output perintah ke input perintah lain.

Jenis
Menentukan tipe memori yang akan dicari. Tambahkan tanda hubung (-) di depan Tipe . Anda bisa menggunakan salah satu nilai Tipe berikut ini.

Tipe Deskripsi

b

Byte (8 bit)

w

WORD (16 bit)

d

DWORD (32 bit)

q

QWORD (64 bit)

a

String ASCII (belum tentu string yang dihentikan null)

u

String Unicode (belum tentu string yang dihentikan null)

Jika Anda menghilangkan Jenis, nilai byte akan digunakan. Namun, jika Anda menggunakan Bendera, Anda tidak dapat menghilangkan Jenis.

Sa
Mencari memori apa pun yang berisi string ASCII yang dapat dicetak. Gunakan bendera Panjang l untuk menentukan panjang minimum string tersebut. Panjang minimum default adalah 3 karakter.

Su
Mencari memori apa pun yang berisi string Unicode yang dapat dicetak. Gunakan bendera Panjang l untuk menentukan panjang minimum string tersebut. Panjang minimum default adalah 3 karakter.

Lingkup
Menentukan area memori yang akan dicari. Rentang ini tidak boleh lebih dari 256 MB kecuali Anda menggunakan sintaks L? . Untuk informasi selengkapnya tentang sintaks ini, lihat Sintaks Alamat dan Rentang Alamat.

Pola
Menentukan satu atau beberapa nilai yang akan dicari. Secara default, nilai-nilai ini adalah nilai byte. Anda dapat menentukan berbagai jenis memori dalam Jenis. Jika Anda menentukan nilai WORD, DWORD, atau QWORD, bergantung pada opsi lain yang dipilih, Anda mungkin perlu mengapit pola pencarian dalam tanda kutip tunggal (misalnya, 'H').

0:000> s -d @rsp L1000000 'H'  
0000003f`ff07ec00  00000048 00000000 500c0163 00000000  H.......c..P....
0000003f`ff07ec50  00000048 00000000 00000080 00000000  H...............
0000003f`ff07efc0  00000048 00000000 400c0060 00000000  H.......`..@....

Jika Anda menentukan string, menggunakan jenis ascii, sertakan dalam tanda kutip ganda (misalnya, "B7").

0:000> s -a @rsp L10000000 "B7"  
0000003f`ff07ef0a  42 37 ff 7f 00 00 90 38-4e c2 6c 01 00 00 7d 26  B7.....8N.l...}&
0000003f`ff0ff322  42 37 ff 7f 00 00 f8 5d-42 37 ff 7f 00 00 20 41  B7.....]B7.... A
0000003f`ff0ff32a  42 37 ff 7f 00 00 20 41-42 37 ff 7f 00 00 98 59  B7.... AB7.....Y

-v
Mencari objek dengan jenis yang sama dengan Objek yang ditentukan.

Benda
Menentukan alamat objek atau alamat penunjuk ke objek. Debugger kemudian mencari objek dengan jenis yang sama dengan objek yang ditentukan Objek .

Lingkungan

Item Deskripsi
Mode Mode pengguna, mode kernel
Target Live, crash dump
Platform Semua

Informasi Tambahan

Untuk informasi selengkapnya tentang manipulasi memori dan deskripsi perintah terkait memori lainnya, lihat Membaca dan Menulis Memori.

Keterangan

Jika debugger menemukan pola byte yang Anda tentukan, debugger menampilkan alamat memori pertama di area Memori rentang tempat pola ditemukan. Debugger menampilkan kutipan memori yang dimulai di lokasi tersebut dalam format yang cocok dengan jenis memori Jenis yang ditentukan. Jika Jenis adalah atau u, konten memori dan karakter ASCII atau Unicode yang sesuai ditampilkan.

Anda harus menentukan parameter Pola sebagai serangkaian byte, kecuali Anda menentukan nilai Jenis yang berbeda. Anda dapat memasukkan nilai byte sebagai karakter numerik atau ASCII:

  • Nilai numerik ditafsirkan sebagai angka dalam radix saat ini (16, 10, atau 8). Untuk mengubah radix default, gunakan perintah n (Atur Basis Angka). Anda dapat mengganti radiks default dengan menentukan awalan 0x (heksadesimal), awalan 0n (desimal), awalan 0t (oktal), atau awalan 0y (biner). Catatan Radix default bereaksi berbeda saat Anda menggunakan ekspresi C++. Untuk informasi selengkapnya tentang ekspresi ini dan radix, lihat Mengevaluasi Ekspresi.

  • Anda harus mengapit karakter ASCII dalam tanda kutip lurus tunggal. Anda tidak dapat menggunakan karakter escape gaya C (seperti '\0' atau '\n').

Jika Anda menentukan beberapa byte, Anda harus memisahkannya menurut spasi.

Perintah s-a dan s-u mencari string ASCII dan Unicode tertentu. String ini tidak harus dihentikan null.

Perintah s-sa dan s-su mencari string ASCII dan Unicode yang tidak ditentukan. Ini berguna jika Anda memeriksa berbagai memori untuk melihat apakah berisi karakter yang dapat dicetak. Opsi bendera memungkinkan Anda menentukan panjang minimum string untuk ditemukan.

Contoh: Perintah berikut menemukan string ASCII dengan panjang >=3 dalam rentang yang dimulai pada 0000000140000000 dan mengakhiri 400 byte nanti.

s-sa 0000000140000000 L400

Perintah berikut menemukan string ASCII dengan panjang >=4 dalam rentang yang dimulai pada 0000000140000000 dan mengakhiri 400 byte nanti

s -[l4]sa 0000000140000000 L400

Perintah berikut melakukan hal yang sama, tetapi membatasi pencarian ke wilayah memori yang dapat ditulis.

s -[wl4]sa 0000000140000000 L400

Perintah berikut melakukan hal yang sama, tetapi hanya menampilkan alamat kecocokan, bukan alamat dan nilai.

s -[1wl4]sa 0000000140000000 L400

Perintah s-v mencari objek dengan tipe data yang sama dengan objek Objek. Anda dapat menggunakan perintah ini hanya jika objek yang diinginkan adalah kelas C++ atau objek lain yang terkait dengan tabel fungsi virtual (Vtables). Perintah s-v mencari area Memori rentang untuk alamat Vtable kelas ini. Jika beberapa Vtable ada di kelas ini, algoritma pencarian mencari semua nilai penunjuk ini, dipisahkan oleh jumlah byte yang tepat. Jika ada kecocokan yang ditemukan, debugger mengembalikan alamat dasar objek dan informasi lengkap tentang objek ini--mirip dengan output perintah dt (Jenis Tampilan).

Contoh: Asumsikan radix saat ini adalah 16. Tiga perintah berikut semuanya melakukan hal yang sama: cari lokasi memori 0012FF40 hingga 0012FF5F untuk "Hello".

0:000> s 0012ff40 L20 'H' 'e' 'l' 'l' 'o' 
0:000> s 0012ff40 L20 48 65 6c 6c 6f 
0:000> s -a 0012ff40 L20 "Hello" 

Perintah ini menemukan setiap kemunculan "Hello" dan mengembalikan alamat setiap pola tersebut--yaitu, alamat huruf "H".

Debugger hanya mengembalikan pola yang sepenuhnya terkandung dalam rentang pencarian. Pola yang tumpang tindih ditemukan dengan benar. (Dengan kata lain, pola "QQQ" ditemukan tiga kali dalam "QQQQQ".)

Contoh berikut menunjukkan pencarian yang menggunakan parameter Jenis . Perintah ini mencari lokasi memori 0012FF40 hingga 0012FF5F untuk kata ganda 'VUTS':

0:000> s -d 0012ff40 L20 'VUTS' 

Pada komputer little-endian, 'VUTS' sama dengan pola byte 'S' 'T' 'U' 'V'. Namun, pencarian WORD, DWORD, dan QWORD hanya mengembalikan hasil yang selaras dengan byte dengan benar.