Unicorn: a lightweight multi-platform, multi-architecture CPU emulator framework
unicorn-engine.org
unicorn-engine.org
From the sample snippet, it looks like Unicorn Engine provides an interface that will help at reverse engineering tasks and building other tools that require the translation+execution of certain functions or blocks of instructions of another architecture (it reminds me to the disassembly framework 'Capstone Engine' in that regard). In the other hand, QEMU's goal is rather the emulation of an entire system and different audio/video hardware (basically, a virtual machine).
Then, there is the question of what does Unicorn Engine do at user-level with instructions like syscall on x86_64 or sc in ppc64. I see no references to any of this in the site. If your target is "high-level emulating" the underlying operating system (like WINE does), being able to specify native handlers for such instructions is a must.
If both conditions are satisfied then it should be doable for most applications: Load the binary, replace calls to dynamically linked system libraries with native implementations that match the specifications (on undocumented systems this means lots of reverse engineering) and ensure that any syscall/sc/etc. instruction results in a behaviour the application expects. From here you could take care of the rest yourself: Multiple threads could be handled by multiple host threads running each a Unicorn Engine instance with separate CPU register states, but sharing the entire virtual address space. The target application's stdin/stdout could be redirected from the host's emulator stdin/stdout. And so on... :-)
Disclaimer: I'm just guessing what could be done if they provide a decent binary translator and the API cares about high-level-emulation. But I'm not sure if that's even a goal for them by looking at their site.
https://www.blackhat.com/us-15/briefings.html#unicorn-next-g...
- Does it support unaligned access hardware exceptions for ARM, MIPS, and Sparc?
- Documentation and download links are broken. Are you going to fix it?
It seems to me that enormous performance gains could be attained by JIT-compiling the assembly instructions to native assembly instructions.
they will release the code after their BlackHat USA talk.
Would it be gratuitously negative of me to point out that I wish projects would stop doing this?
And there's also the Unicorn Control Software: http://www.gelifesciences.com/webapp/wcs/stores/servlet/Cate...
The reality is that if you choose an existing word, chances are it's already being used.