[vbox-dev] Creating Handler Pointers in R0 and RC contexts

Adam Pridgen adam.pridgen at thecoverofnight.com
Mon Oct 29 23:36:55 GMT 2012


Hello,

I know my questions have been alittle complex or non-sensical, but
hopefully this one makes more sense sense.  I am attempting to
register a write access callback with PGMR3HandlerPhysicalRegister.
Currently, my R0 handler function's symbol cannot be found by the
PDMR3LdrGetSymbolR0, and I get the following assertion error:

PGMR3ChangeMode: Guest mode: Protected -> AMD64
VBox.Main.Foo: SetRCPhysHandler, The address of FooRCPhysWriteHandler:
0x7f0f770736ce
HWR0: 0020:00348FE9 ESP=00183C74 IF=0 IOPL=0 CR0=80000011 CR4=220 EFER=500
PGMR3ChangeMode: Guest mode: AMD64 -> Protected
HWR0: 0020:00348FBE ESP=00183CBC IF=0 IOPL=0 CR0=11 CR4=220 EFER=100

!!Assertion Failed!!
Expression: RT_SUCCESS_NP(rc)
Location  : /research_data/code/svn/vbox/src/VBox/VMM/VMMR3/PDMLdr.cpp(808)
int PDMR3LdrGetSymbolR0(PVM, const char*, const char*, PRTR0PTR)
PGMR3ChangeMode: Guest mode: Protected -> Real
Couldn't find symbol 'FooR0PhysWriteHandler' in module 'VMMR0.r0'
HMR3PagingModeChanged missed Protected->Real transition (prev Real)
HWR0: 0050:000008A0 ESP=0000146A IF=0 IOPL=0 CR0=10 CR4=220 EFER=0



So I was wondering two things:

1) How do I include my handlers (e.g. FooR0PhysWriteHandler or
FooRCPhysWriteHandler) so that they can be found by
PDMR3LdrGetSymbolR0/PDMR3LdrGetSymbolRC at runtime?  Do I need to
place the source files somewhere in the VMMR0 directory?  Do I need to
export symbols somewhere?

2) How do I copy my user/R3 objects or addresses into the HMA?
Specifically, I am trying to create structures that can be accessed
from an R3 context outside of the hypervisor and from within the
hypervisor when my handlers are called.


Right now, I am using the pgmR3PhysRomWriteHandler in
src/VBox/VMM/VMMR3/PGMPhys.cpp as an example handler function, but I
am not sure how it makes itself accessible in the HMA.  Also for
handler registration, I am  using pgmR3PhysRomRegister in the same
file as an example of how to register PFNPGMR*PHYSHANDLERs.

Thanks in advance for any help or feedback,

-- Adam




More information about the vbox-dev mailing list