All of lore.kernel.org
 help / color / mirror / Atom feed
* The address in xen
@ 2008-03-17 10:35 张琳
  2008-03-17 13:44 ` weiming
  0 siblings, 1 reply; 2+ messages in thread
From: 张琳 @ 2008-03-17 10:35 UTC (permalink / raw)
  To: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 3229 bytes --]

It seems that the address in xen has three layer: the virtual address , the pesurdo-physical address and the machine address.

I obtained some addresses of kernel symbols by parsing the system.map file.
I think this address is virtual address.Is it correct?
Then I want to calculate the hash value of memory area start from those addresses. So I have to access the corresponding machine address.

Then problem came.
How to translate the virtual address to machine address?

First, I want to translate the virtual address to pesurdo-physical address by traversing page table tree. But segmentation fault always occurs.

I put my code in the following~~~
Can anyone tell me that what is wrong?

unsigned long VAtoPA(unsigned long VirtualAddress)
{
  /*This variable is used for storing the address of    
     the Page Directory.*/
  unsigned long PDAddress; 

  /*This variable is a pointer pointing to the entry 
     in the page directory which contains the address   
     of the Page Table.*/
  unsigned long* pPTAddress;

  /*This variable is used for storing the address of  
     the Page Table.*/
  unsigned long PTAddress;

  /*This variable is a pointer pointing to the entry 
    in the page table which contains the address of 
    the physical page.*/
  unsigned long* pPPAddress;
  
  /*This variable is used for storing the address of 
    the physical page.*/
  unsigned long PPAddress;
  
  /*This is physical address for the corresponding  
     virtual address.*/
  unsigned long PhysicalAddress;

  /*Get the address of the Page Directory from CR3*/
  int xc_handle = xc_interface_open();
  if(xc_handle == -1)
    {
      printf("Sorry! Cannot open an interface on xen 
                hypervisor, please check that whether 
                the xen is running or not!\n");
      exit(1);
    }

  vcpu_guest_context_t context;
  int result = xc_vcpu_getcontext(xc_handle, 
                                         1, 0, &context);
  if(result == -1)
    {
      printf("Sorry! Cannot get the context of the 
                virtual CPU-1 in domain-1, please check 
                that whether the domain-1 is running or 
                not!\n");
      exit(1);
    }
    PDAddress = context.ctrlreg[3] & 0xFFFFF000;
 
  int index;
  /*Get the index number in Page Directory.*/
  index = VirtualAddress >> 22;
  /*Get the address of the entry which contains the 
     address of the Page Table.*/
  pPTAddress = PDAddress + (index << 2);
  /*Get the address of the Page Table*/
  PTAddress = (*pPTAddress) & 0xFFFFF000;
  /*Get the index number in Page Table.*/
  index = (VirtualAddress >> 12) & 0x000003FF;
  /*Get the address of the entry which contains the 
     address of the physical page.*/
  pPPAddress = PTAddress + (index << 2);
  /*Get the address of the physical page.*/
  PPAddress = (*pPPAddress) & 0xFFFFF000;

  PhysicalAddress = PPAddress + (VirtualAddress & 0x00000FFF);


  result = xc_interface_close(xc_handle);
  if(result == -1)
    {
      printf("Sorry! Cannot close the special 
                interface on xen hypervisor!\n");
      exit(1);
    }

  return PhysicalAddress;
} 

 


[-- Attachment #1.2: Type: text/html, Size: 6648 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-03-17 13:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-17 10:35 The address in xen 张琳
2008-03-17 13:44 ` weiming

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.