2016-03-20 14 views
0

Wenn ich versuche, meine .so-Datei auf Android 6 ich diese Nachricht erhalten laufen: verstehe ich kannWie finden Sie Textverlagerungen in .so Datei?

Loading Native Audio Library... 
03-20 15:07:55.182 19446 19446 : Cannot Load Native Library !!! 
03-20 15:07:55.182 19446 19446 : java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.myapp.android.sdk-1/lib/arm/myso.so: has text relocations 

Von der Nachricht, dass ich Text Verlagerungen in meiner .so-Datei haben. Kompilieren mit -fPIC hilft nicht, da die Textverlagerungen in Assemblierungsdateien sind, die ich zur Optimierung einiger Berechnungen verwende. Woher wissen Sie, wo sich die Textumsetzungen im Quellcode genau befinden?

+0

Nun, die Verschiebung der Tabelle selbst ist trivial mit etwas wie readelf oder objdump - Fragen Sie, wie diese Offsets zurück zu Orten im Quellcode zu beziehen? – Notlikethat

+0

@Notlikethat, ich frage, wie man die GOT-Tabelle liest und wie man die Offsets wieder auf meinen Quellcode bezieht. – VitalyD

Antwort

1

Um die genaue Position des Textes finden Sie relocs scanelf -T

Hier ist der Gentoo Anleitung, wie man Text Verlagerungen beheben können in Ihrem binary: https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide

dies eine Warnung für eine lange war Zeit und Android Linker haben damit begonnen, dies in Marshmallow für Apps zu implementieren, die auf die sdk-Version> = 22 (für lp32-Plattformen wie arm/x86/mips) abzielen. Und die Unterstützung für lp64 (arm64/x86_64/mips64) existierte von Anfang an nicht.