Great!
I’ve done a test breaking in the target running an exe (Testlimit.exe -d)
nt!RtlpBreakWithStatusInstruction:
804e3b25 cc int 3
switching to the interesting program context
kd> .process 82227da0
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800001,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=138, PacketId=80800001,
READ: Received Type 2 data packet with id = 80800001 successfully.
KdReadVirtual(80550850, 100) returns 00000000, 100
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800000,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=40, PacketId=80800000,
READ: Received Type 2 data packet with id = 80800000 successfully.
KdReadVirtual(804e389a, 8) returns 00000000, 8
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800001,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=3c, PacketId=80800001,
READ: Received Type 2 data packet with id = 80800001 successfully.
KdReadVirtual(82227db8, 4) returns 00000000, 4
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800000,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=40, PacketId=80800000,
READ: Received Type 2 data packet with id = 80800000 successfully.
KdReadVirtual(8055ab20, 8) returns 00000000, 8
Implicit process is now 82227da0
WARNING: .cache forcedecodeuser is not enabled
dump a virtual address in this context
kd> dd 00a30000
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800001,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=38, PacketId=80800001,
READ: Received Type 2 data packet with id = 80800001 successfully.
KdReadVirtual(00a30000, 80) returns 8007001e, 0
00a30000 ??? ??? ??? ???
00a30010 ??? ??? ??? ???
00a30020 ??? ??? ??? ???
00a30030 ??? ??? ??? ???
00a30040 ??? ??? ??? ???
00a30050 ??? ??? ??? ???
00a30060 ??? ??? ??? ???
00a30070 ??? ??? ??? ???
You can see this address location is invalid; now I use /p option
kd> .process /p 82227da0
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800000,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=3c, PacketId=80800000,
READ: Received Type 2 data packet with id = 80800000 successfully.
KdReadVirtual(82227db8, 4) returns 00000000, 4
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800001,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=40, PacketId=80800001,
READ: Received Type 2 data packet with id = 80800001 successfully.
KdReadVirtual(8055ab20, 8) returns 00000000, 8
Implicit process is now 82227da0
.cache forcedecodeuser done
kd> dd 00a30000
X86VtoP: Virt 00a30000, pagedir 17601000 <---------------------
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800000,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=3c, PacketId=80800000,
READ: Received Type 2 data packet with id = 80800000 successfully.
KdReadPhysical(17601008, 4) returns 00000000, 4
X86VtoP: PDE 17601008 - 17a12047
WRITE: Write type 2 packet
READ: Wait for ACK packet
PacketType=4, ByteCount=0, PacketId=80800001,
READ: Received correct ACK packet.
READ: Wait for type 2 packet
PacketType=2, ByteCount=3c, PacketId=80800001,
READ: Received Type 2 data packet with id = 80800001 successfully.
KdReadPhysical(17a128c0, 4) returns 00000000, 4
X86VtoP: PTE 17a128c0 - 0084f080
X86VtoP: PTE not present, pagefile 0:84f000
00a30000 ??? ??? ??? ???
00a30010 ??? ??? ??? ???
00a30020 ??? ??? ??? ???
00a30030 ??? ??? ??? ???
00a30040 ??? ??? ??? ???
00a30050 ??? ??? ??? ???
00a30060 ??? ??? ??? ???
00a30070 ??? ??? ??? ???
The arrow refers to x86 virtual->physical translation
kd> .cache
Max cache size is : 1048576 bytes (0x400 KB)
Total memory in cache : 48 bytes (0x1 KB)
Number of regions cached: 1
1 full reads broken into 1 partial reads
counts: 0 cached/1 uncached, 0.00% cached
bytes : 0 cached/0 uncached, 0.00% cached
** User virtual addresses are translated to physical addresses before access
** Prototype PTEs are implicitly decoded
Here you can see the translation is actually performed before target memory is accessed. Anyway because the page is in pagefile it can not be accessed.
Do you think that for transition pages (RAM resident in either stanby or modified list) it would be possibile anyway access them ?