[unicorn-engine] Re: Using unicorn to replace houdini on Android

  • From: Michael Goffioul <michael.goffioul@xxxxxxxxx>
  • To: unicorn-engine@xxxxxxxxxxxxx
  • Date: Tue, 22 Oct 2019 23:15:18 -0400

On Tue, Oct 22, 2019 at 12:09 PM Michael Goffioul <
michael.goffioul@xxxxxxxxx> wrote:

On Tue, Oct 22, 2019 at 8:07 AM Nguyen Anh Quynh <aquynh@xxxxxxxxx> wrote:

On Tue, Oct 22, 2019 at 7:19 PM Michael Goffioul
<michael.goffioul@xxxxxxxxx> wrote:

Although I'm interested in the project, I don't think I have enough
expertise to do it on my own. So it would help to get guidance and
contributions to build the initial skeleton/plumbing.

I've looked at it more closely yesterday. First thing was to compile
the unicorn library for Android (I limited emulation to ARM, as that's the
only thing I'm interested in), compile the ARM samples and run them on the
target platform. This seems to work.

Then I looked at the AndroidNativeEmu project, as it seems to do partly
what I want to achieve. I'm thinking about re-using some concepts from it
and implementing them in C++ (also found the elfio C++ library, which could
simplify loading and processing binaries). The required bridge interface is
defined here:
https://android.googlesource.com/platform/system/core/+/refs/tags/android-10.0.0_r6/libnativebridge/include/nativebridge/native_bridge.h#172

The core parts are:
- loading a shared library (loading deps, relocations...)
- building trampoline stubs for a given function

Let me know if you're interested.

yes i am interested, but i have no spare time for it.

keep me updated. i may help a bit here & there.


First step: support compilation with Android-x86 (could be improved, but
does the job for the time being)
https://github.com/goffioul/unicorn/tree/q-x86


I've also created a repo for the native bridge layer:
https://github.com/goffioul/android_nativebridge_x86
It's mostly some initial plumbing at the moment (most of it coming from
AndroidNativeEmu). The thing I will struggle the most at the moment is to
implement symbol table generation and relocations.  The Android app I'm
testing with uses dynamic relocation and that's not part of
AndroidNativeEmu. I would really appreciate if you could give a hand there:
pseudo-code snippets are enough, I'll get the idea.

Other related posts: