s (搜尋記憶體)

s 命令會搜尋記憶體以尋找特定的位元組模式。

請勿將此命令與 ~s(變更目前處理器)~s(設定目前線程)、|s(設定目前進程) || 混淆s (設定目前的系統) 命令。

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

參數

[ 旗標]
指定一或多個搜尋選項。 每個旗標都是單一字母。 您必須將旗標括在單一方括弧 ([]) 中。 除了 nl 與其自變數之外,您無法在括弧之間新增空格。 例如,如果您想要指定 sw 選項,請使用命令 s -[sw]Type Range Pattern。

您可以指定下列一或多個旗標:

s
儲存目前搜尋的所有結果。 您可以使用這些結果稍後重複搜尋。

r
將目前的搜尋限制為上次儲存搜尋的結果。 您無法在相同的命令中使用 sr 旗標。 當您使用 r 時,會忽略 Range 的值,而調試程式只會搜尋先前 命令所儲存的點擊。

點擊數
指定當您使用 s 旗標時要儲存的點擊次數。 預設值為 1024 次點擊。 如果您使用 n 與其他旗標, n 必須是最後一個旗標,後面接著其 Hits 自變數。 nHits 之間的空格是選擇性的,但您無法在括弧內新增任何其他空格。 如果任何稍後使用 s 旗標的搜尋發現次數超過指定的點擊次數, 則會顯示溢位錯誤 訊息,通知您不會儲存所有點擊。

l Length
讓搜尋任意 ASCII 或 Unicode 字串只傳回長度至少 為長度 長度的字串。 默認長度為 3。 此值只會影響使用 -sa-su 旗標的搜尋。

w
只搜尋可寫入的記憶體區域。 您必須以方括弧括住 「w」。

1
只會在搜尋輸出中顯示搜尋相符項目的位址。 如果您使用 .foreach 令牌將命令輸出管線傳送至另一個命令的輸入,這個選項會很有用。

類型
指定要搜尋的記憶體類型。 在 Type 前面新增連字元 (-) 。 您可以使用下列 其中一個 Type 值。

類型 描述

b

位元組 (8 位)

w

WORD (16 位)

DWORD (32 位)

q

QWORD (64 位)

a

ASCII 字串 (不一定是 Null 終止的字串)

u

Unicode 字串 (不一定是 Null 終止的字串)

如果您省略 Type,則會使用位元元組值。 不過,如果您使用 Flags,則無法省略 Type

sa
搜尋包含可列印 ASCII 字串的任何記憶體。 使用 l Length 旗標來指定這類字串的最小長度。 預設的最小長度為 3 個字元。


搜尋包含可列印 Unicode 字串的任何記憶體。 使用 l Length 旗標來指定這類字串的最小長度。 預設的最小長度為 3 個字元。

範圍
指定要搜尋的記憶體區域。 除非您使用 L? 語法,否則此範圍不能超過 256 MB。 如需此語法的詳細資訊,請參閱 地址和地址範圍語法

模式
指定要搜尋的一或多個值。 根據預設,這些值是位元元組值。 您可以在 Type指定不同類型的記憶體。 如果您指定 WORD、DWORD 或 QWORD 值,視選取的其他選項而定,您可能需要以單引弧括住搜尋模式(例如 '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.......`..@....

如果您指定字串,請使用 ascii 類型,以雙引弧括住它(例如 “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
搜尋與指定 之 Object 相同類型的物件

物件
指定物件的位址或物件的指標位址。 然後調試程式會搜尋與 Object 所指定之物件相同類型的物件

Environment

項目 說明
模式 使用者模式、核心模式
目標 即時、損毀傾印
平台 全部

其他資訊

如需記憶體操作和其他記憶體相關命令描述的詳細資訊,請參閱 讀取和寫入記憶體

備註

如果調試程式找到您指定的位元組模式,調試程式會在找到模式的 Range 記憶體區域中顯示第一個記憶體位址。 調試程式會顯示記憶體的摘錄,其開頭為符合指定 之 Type 記憶體類型的格式。 如果 Typeu,則會顯示記憶體內容和對應的 ASCII 或 Unicode 字元。

除非您指定不同的 Type 值,否則您必須將 Pattern 參數指定為一系列的位元組。 您可以輸入位元組值作為數值或 ASCII 字元:

  • 數值會解譯為目前基數中的數位(16、10 或 8)。 若要變更預設的基數,請使用 n (Set Number Base) 命令。 您可以指定 0x 前置詞(十六進位)、0n 前置詞(十進位)、0t 前置詞(八進位),或 0y 前置詞 (binary) 來覆寫預設的基數。 注意 當您使用C++表達式時,預設基數的行為會有所不同。 如需這些表達式和基底的詳細資訊,請參閱 評估表達式

  • 您必須以單引弧括住 ASCII 字元。 您無法使用 C 樣式逸出字元(例如 '\0' 或 '\n')。

如果您指定多個字節,則必須以空格分隔它們。

s-as-u 命令會分別搜尋指定的 ASCII 和 Unicode 字串。 這些字串不一定是 Null 終止。

s-sas-su 命令會搜尋未指定的 ASCII 和 Unicode 字串。 如果您要檢查記憶體範圍,以查看它是否包含任何可列印的字元,這些都很有用。 旗標選項可讓您指定要尋找的字串長度下限。

範例:下列命令會尋找範圍中長度 >為 =3 的 ASCII 字串,範圍從0000000140000000開始,之後結束 400 個字節。

s-sa 0000000140000000 L400

下列命令會尋找範圍中長度 >為 =4 的 ASCII 字串串,從0000000140000000開始,並在稍後結束 400 個字節

s -[l4]sa 0000000140000000 L400

下列命令會執行相同的動作,但它會將搜尋限製為可寫入的記憶體區域。

s -[wl4]sa 0000000140000000 L400

下列命令會執行相同的動作,但只會顯示相符項目的位址,而不是位址和值。

s -[1wl4]sa 0000000140000000 L400

s-v 命令會搜尋與 Object 物件相同的數據類型物件。 只有當所需的物件是C++類別或與虛擬函式數據表 (Vtables) 相關聯的另一個物件時,才能使用此命令。 s-v 命令會搜尋 Range 記憶體區域,以尋找此類別 Vtables 的位址。 如果此類別中有多個 Vtable,搜尋演算法會尋找所有這些指標值,並以適當的位元組數目分隔。 如果找到任何相符項目,調試程式會傳回物件的基位址和此物件的完整資訊,類似於 dt (Display Type) 命令的輸出。

範例:假設目前的基度為16。 下列三個命令都會執行相同的動作:搜尋記憶體位置 0012FF40 到 0012FF5F for “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" 

這些命令會找出 「Hello」 的每個外觀,並傳回每個這類模式的位址,也就是字母 「H」 的位址。

調試程式只會傳回完全包含在搜尋範圍中的模式。 正確找到重疊模式。 (換句話說,“QQQQ”模式在 “QQQQQ” 中找到三次。

下列範例顯示使用 Type 參數的搜尋。 此命令會搜尋雙字 'VUTS' 的記憶體位置 0012FF40 到 0012FF5F:

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

在小端計算機上,'VUTS' 與位元組模式 'S' 'T' 'U' 'V' 相同。 不過,搜尋 WORD、DWORD 和 QWORD 只會傳回正確位元組對齊的結果。