アンドロイド以外のLinuxマシンでapkから取得したx86共有ライブラリを実行したいとします。Bionicとlibcのスタブの実装
これはアンドロイドのlibcとリンクしていますので、アンドロイドのndkからlibc.so
を手に入れました。 はしばらくの間、セグメンテーション違反をデバッグした後、私は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
が含まれていますが、どのようにこれらをロードし、libc.soのnop機能をオーバーライドするプロセスを手に入れますか? また、アンドロイドがこのトリックをやっている理由と、オーバーライドがそこでどのように機能しているかについて、さらに多くのコンテキストに興味があります。