2016-04-13 41 views
2

Bir nesnenin gerçek değerini elde etmek için ! Objsize komutunu kullanıyorum. Örneğin, aşağıdaki komutu çalıştırdığımda, 00000003a275f218 adresindeki nesnenin boyutunun ondalık olarak 24'e çeviren 18 hex olduğunu söyler.Onaltılık ve ondalık cinsinden! Objsize cinsinden tutarsızlık

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

Şimdiye kadar çok iyi. Bir nesnede aynı komutu çalıştırıyorum ve boyutunun onaltılık ile ondalık arasında bir uyumsuzluğu var gibi görünüyor. Bu nedenle, onaltılık boyut 0xafbde200'dir. Kalbimi kullanarak ondalık sayıya dönüştürdüğümde, bu olurken, komut çıktısı ondalık büyüklükte -1346510336 olmalıdır. Birisi bana neden boyutlarda fark olduğunu anlamama yardımcı olabilir mi?

cevap

3

O SOS bir hata var . Eğer source code bakarsak bu çıkışı olarak aşağıdaki biçimi kullanır

DECLARE_API(ObjSize) 

gibi, sen yöntem ilan bulacaksınız

ExtOut("sizeof(%p) = %d (0x%x) bytes (%S)\n", SOS_PTR(obj), size, size, methodTable.GetName()); 

Ne olduğunu biçim belirteci olarak %d kullanır görebileceğiniz gibi imzalı ondalık tamsayılar için. Bunun yerine, işaretsiz ondalık tamsayılar için %u olmalıdır, çünkü negatif bellek kullanan nesneleriniz olamaz.

Git'i nasıl kullanacağınızı biliyorsanız, bir yama sağlayabilirsiniz.

0:000> ? 0xafbde200 
Evaluate expression: 2948456960 = 00000000`afbde200 
+0

Mükemmel, kaynağı kontrol etmek için zaman ayırdığınız için teşekkür ederiz! –

2

Fark, işarettir. İlk biti (ilk hex baytından beri 1 olan "A") negatif bir işaret olarak yorumluyor gibi görünüyor. Bu iki sayı başka türlü aynıdır. Hex calc.exe (programcı modu), anahtar üzerinde

Yapıştır -1346510336:

FFFFFFFFAFBDE200

Yapıştır 2948456960, Hex geçin:

AFBDE200

+0

yüzden bu nesnenin gerçek boyutu nedir:

Sen imzasız değerini görmek için WinDbg ? kullanabilirsiniz. Onaltılık veya ondalık değerde güvenmem gerekir mi? – BKS

+2

Olumlu değeri alırdım, bir nesne işlevinin gerçekten negatif –

+0

anlamına gelmesi için bir neden görmüyorum, yani +1346510336 nesnesinin boyutu veya 2948456960 olarak alacağınız anlamına mı geliyor? – BKS