Android 以外の Linux マシンで apk から取得した x86 共有ライブラリを実行したいと考えています。
Android libc に対してリンクされているためlibc.so
、Android ndk から取得しました。しばらくセグメンテーション違反をデバッグした後、これlibc.so
は「チート」であり、多くのライブラリ関数の nop 実装しか含まれていないことがわかりました。
$ objdump -d libc.so | grep memalign -A 8
0000bf82 <memalign>:
bf82: 55 push %ebp
bf83: 89 e5 mov %esp,%ebp
bf85: 5d pop %ebp
bf86: c3 ret
現在、ndk にlibc.a
はこれらの関数の実際の実装を含む a も含まれていますが、プロセスでこれらをロードして libc.so の nop 関数をオーバーライドするにはどうすればよいですか? Androidがこのトリックを実行している理由と、オーバーライドがそこでどのように機能するかについて、さらにいくつかのコンテキストにも興味があります。