#!/usr/bin/env python
import sys,struct
memdump = open(sys.argv[1])
pdb_off = int(sys.argv[2],0)
virt_addr = int(sys.argv[3],0)
pd_offset = ((virt_addr & 0xFFC00000) >> 22)*4
pt_offset = ((virt_addr & 0x003FF000) >> 12)*4
b_offset = (virt_addr & 0x00000FFF)
memdump.seek(pdb_off + pd_offset)
pdemember = struct.unpack('<L', memdump.read(4))[0]
pt_off = ((pdemember & 0xFFFFF000) >> 12)*0x1000
memdump.seek(pt_off + pt_offset)
ptemember = struct.unpack('<L', memdump.read(4))[0]
phys_addr = ((ptemember & 0xFFFFF000) >> 12)*0x1000
print "Physical address: 0x%X" % phys_addr