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

War es hilfreich?

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 ......

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top