objdump einer .so-Datei? brauchen Hilfe, um die Nachrichten zu verstehen
-
25-09-2019 - |
Frage
Ich entwickle eine native Anwendung im Zusammenhang mit Streaming ich einige Probleme in meinem c Modul bin vor ... und was ich habe, ist eine Botschaft von Logcat
Hier ist die Logcat Nachricht
INFO/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'
11-17 12:40:07.550: INFO/DEBUG(28): pid: 5957, tid: 5957 >>> com.mmstwo <<<
11-17 12:40:07.561: INFO/DEBUG(28): signal 11 (SIGSEGV), fault addr deadd00d
11-17 12:40:07.561: INFO/DEBUG(28): r0 00000354 r1 00129100 r2 0000000c r3 deadd00d
11-17 12:40:07.561: INFO/DEBUG(28): r4 00000026 r5 ad07ff50 r6 00000000 r7 fffe72f8
11-17 12:40:07.579: INFO/DEBUG(28): r8 afe3bdfc r9 4509f020 10 00000000 fp 00135a40
11-17 12:40:07.590: INFO/DEBUG(28): ip ad080160 sp bef28f90 lr afe14cf7 pc ad035452 cpsr 20000030
11-17 12:40:07.840: INFO/DEBUG(28): #00 pc 00035452 /system/lib/libdvm.so
11-17 12:40:07.850: INFO/DEBUG(28): #01 pc 00027a98 /system/lib/libdvm.so
11-17 12:40:07.869: INFO/DEBUG(28): #02 pc 00027bba /system/lib/libdvm.so
11-17 12:40:07.879: INFO/DEBUG(28): #03 pc 0002d98e /system/lib/libdvm.so
11-17 12:40:07.901: INFO/DEBUG(28): #04 pc 0000142e /data/data/com.mmstwo/lib/libnstreamer.so
Das ist die Linie, die die c-Klasse darstellt, die ich verwende.
als pro Kommentar zu meinem vorherige Frage i-uRL gefolgt von Rahul gegeben und kippte meine .so-Datei in eine Textdatei.
hier ist, dass Textdatei
141e: 4a2d ldr r2, [pc, #180] (14d4 <Java_com_mmstwo_NativeParser_stringFromJNI+0x408>)
1420: 4b2d ldr r3, [pc, #180] (14d8 <Java_com_mmstwo_NativeParser_stringFromJNI+0x40c>)
1422: 2184 movs r1, #132
1424: 5846 ldr r6, [r0, r1]
1426: 18aa adds r2, r5, r2
1428: 18eb adds r3, r5, r3
142a: 4651 mov r1, sl
142c: 1c38 adds r0, r7, #0
142e: 47b0 blx r6
1430: 4b2a ldr r3, [pc, #168] (14dc <Java_com_mmstwo_NativeParser_stringFromJNI+0x410>)
1432: 4669 mov r1, sp
, um per Eintrag in Google Gruppen und speziell von Nicklas Ansman schlug ich das snippet gezeigt hatte, die meine gewünschte Linie 142e
ist um.
Jetzt kann hier jemand, der sagen kann, was 47b0 blx r6
Mittel tut?
Was ich wusste, es ist etwas in Assembler geschrieben ist, dass ich weiß nicht. Also ich brauche Ihre Hilfe diese Linie zu verstehen.
Vielen Dank im Voraus
Lösung
springt blx
an die Adresse durch das Argument gegeben; hier, an die Adresse, die derzeit im Register r6 geladen wird. Auch die Absenderadresse (nämlich die Adresse des ldr
Opcode, die unmittelbar nach dem blx
befinden) in dem Sonderregister lr (als „Link-Register“) geschrieben.
Dies entspricht einem indirekten Aufruf. In C würde es wie ein Anruf über einen Funktionszeiger aussehen. auf einigen Plattformen mit dynamischen Verknüpfung, eine einfache Funktion Aufruf einer Funktion kann auch etwas sein wie das, was Sie hier sehen.
Wie auch immer, R 6 die Register Dump zeigt 0 an diesem Punkt sein, daher den segfault. r6 wurde aus dem ldr
Opcode auf Adresse 1424 aus diesen Lasten r6 geladen, was bei der Adresse r0 + R1, R1 knapp über 132 eingestellt wird. r0 ist das herkömmliche Register für das erste Argument einer Funktion C.
Andere Tipps
Ok es mit einigen Freak Graben auf Google herausfinden. "
blx
mittlere Branch and link with exchange (BLX)
und wenn ich mich nicht falsch ist es ähnlich wie return withValue
Art von Java-Anweisung.
es half mir auch das Debuggen in nativen Code zu starten ......