Hello, while I didn't work so much for GSoC after my last mail, because it were the last weeks of my semester and everybody wanted a project finished and exam written, I started diving into different ARM emulators and disassemblers last week.
QEMU I just inspected briefly. While they do have the user mode for emulating single processes and a mechanic to invalidate entries in their code cache, the sheer amount of options and code seems like an unnecessary obstacle, given that the goal is to emulate single instructions, up to some dozens, and inspect the processor state afterwards. I wasn't able to build skyeye on my system (Win7), so I didn't look further into that.
The GNU Armulator is quite badly documented, but small. You can find it in the gdb code base (/sim/arm). All the HowTos mention that it can be called with 'target sim', but that didn't work for me, neither in Windows nor in Linux. I managed to build it as a stand-alone program, but it didn't give meaningful output using a practically empty ARM-binary. It just finished after quite some computation time (~1min). Nevertheless, the code is well structured and I'm optimistic that I will be able to emulate some binary chunks tomorrow evening. I already succeeded in writing a printcpu.c for their processor data-structure.
As a disassembler, we decided to use the one which is shipped with gdb. That is the libopcodes[1] library which is also used in GNU binutils. Just like the emulator, it suffers from lack of documentation. For configuring it with different architectures, use e.g. './configure --enable-targets=arm-linux,i386-linux', the compile it. I extracted an example code snippet showing how to use it from another library, which tries to build an interface for libopcodes[2].
Once I am able to execute some code on the emulator, I will start writing the VM-plugin.
Enjoy your Sunday, Lars
[1] http://sourceware.org/gdb/onlinedocs/gdbint/Support-Libraries.html#Support-L... [2] http://mkfs.github.com/content/opdis/
vm-dev@lists.squeakfoundation.org