qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Catching system calls and PIDs in Qemu


From: shu ming
Subject: Re: [Qemu-devel] Catching system calls and PIDs in Qemu
Date: Thu, 03 Nov 2011 13:37:45 +0800
User-agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1

I don't know how to convert the guest virtual address to a guest physical address. But I believe that the guest virtual address to guest physical address mapping table should belong to the guest OS and stay at guest context. So you should know where is the mapping table in the guest OS by guest physical address before you have a way to do the conversion. After the guest physical address of the table is known, cpu_physical_memory_rw() can be used to walking the table and get the guest physical address of the guest virtual address
you want to convert.  The time spending on the walk should be non-trival.

On 2011-11-3 2:25, Ricardo Alves wrote:
Need Help!

I am editing the Qemu source code to be able to catch every system call made by 
the guest OS and which processes do those system calls.

I catch the system calls in the "void do_interrupt(CPUState *env1)" (op_helper.c) 
function by accessing the exception index on the cpu environment (env->exception_index == 
0x80) and inspecting the system call ID in the eax register.

The difficulty resides in finding the process that made the system call. Linux uses 
the thread_info struct to store process information. The method to find this struct 
location is to apply a mask to the esp register and I would get the struct pointer. In 
qemu I would just do this -- target_ulong pos = env->regs[R_ESP]&  0xFFFFE000.

The problem is that I don't know how to access the guest main memory. The qemu 
function I found to access memory was this one -- void 
cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,int len, int 
is_write) (exec.c). But as far as I know (I could be wrong) this function 
receives a guest physical adress and the one I have is a guest virtual adress. 
Can anybody help me convert this guest virtual adress to a guest physical 
adress?

Thank you.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]