Raindog wrote: > On 12/15/2009 3:39 PM, Jan Kiszka wrote: >> Raindog wrote: >> > Hello, >> > >> > I am researching KVM as a malware analysis platform and had some >> > questions about debugging the guest OS. In my case I intend to use >> > windows guests. So my questsions are as follows: >> > >> > Questions: >> > >> > 1. What instrumentation facilities are their available? >> > >> > 2. Is it possible to extend the debugging interface so that >> debugging is >> > more transparent to the guest OS? IE: there is still a limit of 4 HW >> > breakpoints (which makes me wonder why a LIST is used for them...) >> >> In accelerated KVM mode, the x86 architecture restricts us to 4 break- >> or watchpoints that can be active at the same time. If you switch to >> emulation mode, there are no such limits. Actually, I just made use of >> this for debugging a subtle stack corruption in a guest, and I had more >> than 70 watchpoints active at the same time. It's just "slightly" slower >> than KVM... >> > > Ok, is there anything special that needs to be done to enable additional > watchpoints as they are being called? How are these set btw? Is it > accomplished transparently through gdb? IE: if you set a watchpoint at a > specific address, under emulation mode, they simulate HW bps in that no > code is modified via the injection of an int 3? Yes, break- and watchpoints are transparent to the guest in emulation mode. In KVM mode, hardware breakpoints do not require int 3, but they are limited and the guest my notice that its own breakpoints have no effect as long as the host injected some. > >> > >> > 3. I'm not finding any published API for interfacing with >> KVM/KQEMU/QEMU >> > at a low level, for example, for writing custom tracers, etc. Is there >> > one? Or is there something similar? >> >> KVM provides tracepoints for the Linux ftrace framework, see related >> documentation of the kernel. > > I found this http://lxr.linux.no/#linux+v2.6.27/Documentation/ftrace.txt > but that can hardly be accused of being called documentation. I don't > think something like this: > http://www.pintool.org/tutorials/asplos08/slides/PinTutorial.pdf is > unreasonable. 2.6.27 is too old anyway. There should be at least one LWN.net article on this, and also quite a few presentations and paper, just ask your favorite search engine. > >> If you extend your guest > Windows is by design not extensible. Depends on where and how you want to hook into it. Of course, its kernel is out of reach. But if you are interested e.g. in marking specific I/O requests, you could write your own driver and hook into the stack. > >> to issue certain >> events that the hypervisor sees and traces (e.g. writes to pseudo I/O >> ports), you can also trace things inside the guest that are otherwise >> invisible to the host. I once hacked up an ad-hoc tracing by means of >> hypercalls (required some kvm patching). That also worked from guest >> userspace - and revealed that even more hypercalls could be called that >> way (that's fixed in KVM now). >> >> > >> > >> > Bugs: >> > >> > 1. I hit a bug w/ instruction logging using a RAM based temp >> folder. If >> > I ran w/ the following command line: >> > (Version info: QEMU PC emulator version 0.10.50 (qemu-kvm-devel-88)) >> > >> > qemu-system-x86_64 -hda debian.img -enable-nesting -d in_asm >> >> -d only works in emulation mode as it relies on dynamic code translation >> (TCG). For qemu-kvm, you need to switch to emulation via -no-kvm (for >> upstream QEMU, it's the other way around). >> > > Hence why running w/out admin rights enables the logging. I was confused > because the logfile is still created w/ the kvm module disabled. It's created but remains empty for obvious reasons in KVM mode. Jan
Attachment:
signature.asc
Description: OpenPGP digital signature