[vbox-dev] How to access (read) GC physical page/addr?

Knut St. Osmundsen bird at sun.com
Fri May 1 09:33:58 GMT 2009


On Apr 30, 2009, at 16:46, Micha Moffie wrote:

> Hello,
>
> I am trying to read a (guest) physical address (from withing the VMM).
> My guest is windows XP. Using a kernel debugger i am able to verify
> the address has valid content.
>
> I tried using PGMPhysRead to access the memory.
> While this worked for a low memory address, it doesn't work
> for 0x80561358 (__PsActiveProcessHead).
> Using PGMPhysIsGCPhysValid i can see the address is NOT valid.
>
> Why is this address not valid if it can be seen by the guest?
> Should i use a different API?


0x80561358 is a virtual address not a physical one. So you have to use  
an API that takes an guest virtual address as input.

If you're reading from the emulation thread (EMT), you can use any  
PGMPhysSimpleReadGCPtr or PGMPhysReadGCPtr depending on the semantics  
you want. If you are reading from any other thread you have to do the  
following sequence: PGMR3PhysGCPhys2CCPtrExternal, memcpy/whatever and  
PGMPhysReleasePageMappingLock.

Kind Regards,
  knut




More information about the vbox-dev mailing list