2

!objsizeコマンドを使用して、オブジェクトの真の値を取得します。たとえば、以下のコマンドを実行すると、アドレス 00000003a275f218 のオブジェクトのサイズが 18 16 進数で、10 進数で 24 に変換されることがわかります。

0:000> !ObjSize 00000003a275f218 
sizeof(00000003a275f218) = 24 (0x18) bytes 

ここまでは順調ですね。オブジェクトに対して同じコマンドを実行していますが、そのサイズが 16 進数と 10 進数で一致していないようです。 ここに画像の説明を入力

したがって、16 進数のサイズは 0xafbde200 です。calc を使用して 10 進数に変換すると、これは2948456960になりますが、コマンドの出力では 10 進数のサイズが-1346510336と表示されます。サイズに違いがある理由を誰かが理解するのを手伝ってくれますか?

4

2 に答える 2

2

違いは記号です。最初のビット (最初の 16 進バイトが「A」であるため 1) を負の符号として解釈しているようです。それ以外の点では、これら 2 つの数値は同じです。

-1346510336 を calc.exe に貼り付け (プログラマー モード)、Hex に切り替えます。

FFFFFFFFAFBDE200

2948456960 を貼り付け、16 進数に切り替えます。

AFBDE200

于 2016-04-13T02:07:07.900 に答える