TTD 메모리 개체
설명
TTD 메모리 는 beginAddress, endAddress 및 dataAccessMask 매개 변수를 사용하고 메모리 액세스 정보를 포함하는 메모리 개체의 컬렉션을 반환하는 메서드입니다.
매개 변수
속성 | 설명 |
---|---|
beginAddress | 앞에 0x가 있는 메모리 개체의 시작 주소입니다. |
endAddress | 앞에 0x가 있는 메모리 개체의 끝 주소입니다. |
dataAccessMask | 큰따옴표에 포함된 데이터 액세스 마스크입니다. 읽기용 r, 쓰기용 w, 실행의 경우 c, 변경의 경우 c일 수 있습니다. |
Children
Object | 설명 |
---|---|
EventType | 이벤트의 유형입니다. 이는 모든 TTD에 대한 "MemoryAccess"입니다. 메모리 개체입니다. |
ThreadId | 요청을 수행한 스레드의 OS 스레드 ID입니다. |
UniqueThreadId | 추적 전체의 스레드에 대한 고유 ID입니다. 일반 스레드 ID는 프로세스의 수명 동안 다시 사용할 수 있지만 UniqueThreadIds는 사용할 수 없습니다. |
TimeStart | 메모리 액세스가 이루어진 위치를 설명하는 위치 개체입니다. |
TimeEnd | 메모리 액세스가 이루어진 위치를 설명하는 위치 개체입니다. 이는 항상 TTD용 TimeStart와 동일합니다. 메모리 개체입니다. |
AccessType | 액세스 유형 - 읽기, 쓰기 또는 실행입니다. |
IP | 메모리 액세스를 만든 코드의 명령 포인터입니다. |
주소 | 읽기/쓰기/실행된 주소이며 매개 변수에서 로의 [beginAddress, endAddress) 범위에 포함됩니다. Memory(). 간격이 반쯤 열려 있습니다. 즉, 반환된 이벤트 중 어느 것도 endAddress와 일치하는 주소를 갖지 않지만 endAddress – 1과 일치하는 이벤트가 있을 수 있습니다. |
크기 | 읽기/쓰기/실행의 크기(바이트)입니다. 일반적으로 8바이트 이하입니다. 코드 실행의 경우 실행된 명령의 바이트 수입니다. |
값 | 읽거나 쓰거나 실행한 값입니다. 실행의 경우 명령에 대한 코드 바이트가 포함됩니다. 명령 바이트는 디스어셈블러에 의해 MSB 순서로 나열되지만 LSB 순서로 값으로 저장됩니다. |
설명
다음 액세스 유형은 TTD에서 허용됩니다. 메모리 쿼리:
- r - 읽기
- w - 쓰기
- rw - 읽기/쓰기
- e - execute
- rwe - 읽기/쓰기/실행
- ec - /change 실행
계산을 수행하는 함수이므로 실행하는 데 시간이 걸립니다.
사용 예제
이 예제에서는 추적에서 0x00a4fca0 시작하는 4바이트의 메모리가 읽기 액세스가 발생한 모든 위치의 그리드 표시를 보여 줍니다. 항목을 클릭하여 메모리 액세스가 발생할 때마다 드릴다운합니다.
dx -g @$cursession.TTD.Memory(0x00a4fca0,0x00a4fca4, "r")
그리드 디스플레이의 모든 이벤트에서 TimeStart 필드를 클릭하여 해당 이벤트에 대한 정보를 표시할 수 있습니다.
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
이벤트가 발생한 추적의 위치로 이동하려면 [시간 이동]을 클릭합니다.
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
이 예제에서는 0x1bf7d0 시작하는 4바이트의 메모리가 읽기/쓰기 액세스된 추적의 모든 위치가 나열됩니다. 항목을 클릭하여 메모리 액세스가 발생할 때마다 드릴다운합니다.
0:000> dx @$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
@$cursession.TTD.Memory(0x1bf7d0,0x1bf7d4, "rw")
[0x0]
[0x1]
[0x2]
[0x3]
...
이 예제에서는 0x13a1710 시작된 4바이트의 메모리가 실행/변경 액세스된 추적의 모든 위치가 나열됩니다. 메모리 액세스의 각 발생에 대한 추가 정보를 보려면 모든 항목을 클릭하여 드릴다운합니다.
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