Udostępnij przez


Obiekty pamięci TTD

Opis

Pamięć TTD to metoda, która przyjmuje parametry beginAddress, endAddress i dataAccessMask oraz zwraca kolekcję obiektów pamięci zawierających informacje o dostępie do pamięci.

Parametry

Majątek Opis
beginAddress Początkowy adres obiektu pamięci poprzedzony 0x.
Adres końcowy Końcowy adres obiektu pamięci poprzedzony 0x.
dataAccessMask Maska dostępu do danych zawarta w cudzysłowie podwójnym. Może to być r dla odczytu, w dla zapisu, e do wykonania i c do zmiany.

Dzieci

Przedmiot Opis
Typ Wydarzenia Typ zdarzenia. Jest to "MemoryAccess" dla wszystkich obiektów pamięci TTD.
Identyfikator wątku Identyfikator wątku systemu operacyjnego wątku, który złożył żądanie.
UnikalnyIdentyfikatorWątku Unikatowy identyfikator wątku w całym śledzeniu. Zwykłe identyfikatory wątków mogą być ponownie używane przez cały okres istnienia procesu, ale nie można używać identyfikatorów UniqueThreadId.
Godzina rozpoczęcia Obiekt położenia opisujący położenie, gdy został wykonany dostęp do pamięci.
KoniecCzasu Obiekt położenia opisujący położenie, gdy został wykonany dostęp do pamięci. Zawsze będzie to samo co TimeStart dla obiektów pamięci TTD.
Typ dostępu Typ dostępu — odczyt, zapis lub wykonanie.
IP Wskaźnik instrukcji kodu, który wykonał dostęp do pamięci.
Adres Adres, który został odczytany/zapisany/wykonany i znajdzie się w zakresie [beginAddress, endAddress) z parametrów do .Memory(). Należy pamiętać, że przedział jest półotwarty. Oznacza to, że żadne z zwróconych zdarzeń nie będzie miało zgodnego adresu endAddress, ale mogą istnieć zdarzenia pasujące do endAddress – 1.
Rozmiar Rozmiar odczytu/zapisu/wykonywania w bajtach. Zazwyczaj będzie to 8 bajtów lub mniej. W przypadku wykonywania kodu jest to liczba bajtów w instrukcji, która została wykonana.
Wartość Wartość, która była odczytywana, zapisywana lub wykonywana. W przypadku wykonania zawiera on bajty kodu dla instrukcji. Zwróć uwagę, że bajty instrukcji są wymienione w kolejności MSB przez dezasembler, ale będą przechowywane w wartości w kolejności LSB.

Uwagi

Następujące typy dostępu są dozwolone w TTD. Zapytania dotyczące pamięci:

  • r — odczyt
  • w — zapis
  • rw — odczyt/zapis
  • e — wykonaj
  • rwe — odczyt/zapis/wykonanie
  • ec — wykonaj /zmiana

Należy pamiętać, że jest to funkcja, która wykonuje obliczenia, więc uruchomienie zajmuje trochę czasu.

Przykładowe użycie

W tym przykładzie pokazano siatkę wszystkich pozycji w śladzie, w których nastąpił dostęp do odczytu czterech bajtów pamięci rozpoczynających się od adresu 0x00a4fca0. Kliknij dowolny wpis, aby przejść do szczegółów każdego wystąpienia dostępu do pamięci.

dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")

Zrzut ekranu przedstawiający przykładowe dane wyjściowe siatki obiektu pamięci dx.

Możesz kliknąć pola TimeStart w dowolnym z zdarzeń na ekranie siatki, aby wyświetlić informacje o tym zdarzeniu.

0:000> dx -r1 @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart
@$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart                 : 5D:113 [Time Travel]
    Sequence         : 0x5d
    Steps            : 0x113

Aby przejść do pozycji w śladzie, gdzie wystąpiło zdarzenie, kliknij [Time Travel].

0:000> dx @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart.SeekTo()
@$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")[16].TimeStart.SeekTo()
(27b8.3168): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: 5D:113

eax=0000004c ebx=00dd0000 ecx=00a4f89c edx=00a4f85c esi=00a4f89c edi=00b61046
eip=690795e5 esp=00a4f808 ebp=00a4f818 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
690795e5 ffb604040000    push    dword ptr [esi+404h] ds:002b:00a4fca0=00000000

W tym przykładzie są wyświetlane wszystkie pozycje w śladzie, w których znajdują się cztery bajty pamięci rozpoczynające się od 0x1bf7d0, do których uzyskiwano dostęp do odczytu/zapisu. Kliknij dowolny wpis, aby przejść do szczegółów każdego wystąpienia dostępu do pamięci.

0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")                
    [0x0]           
    [0x1]           
    [0x2]           
    [0x3]           
     ...

W tym przykładzie wymieniono wszystkie pozycje w śladzie, w których cztery bajty pamięci zaczynające się od adresu 0x13a1710 zostały wykonane lub zmienione. Kliknij dowolne wystąpienie, aby uzyskać szczegółowe informacje o każdym wystąpieniu dostępu do pamięci.

0:000> dx -r1 @$cursession.TTD.Memory(0x13a1710,0x13a1714, "ec")[0]
@$cursession.TTD.Memory(0x13a1710,0x13a1714, "ec")[0]                
    EventType        : MemoryAccess
    ThreadId         : 0x1278
    UniqueThreadId   : 0x2
    TimeStart        : 5B:4D [Time Travel]
    TimeEnd          : 5B:4D [Time Travel]
    AccessType       : Execute
    IP               : 0x13a1710
    Address          : 0x13a1710
    Size             : 0x1
    Value            : 0x55

Zobacz też

Debugowanie podróży w czasie – wprowadzenie do obiektów związanych z debugowaniem podróży w czasie

Debugowanie podróży w czasie — omówienie