Domanda

Sto sviluppando un'applicazione nativa legati allo streaming, io sono di fronte alcuni problemi nel mio modulo di c ... e quello che ho è qualche messaggio da Logcat


Ecco il messaggio Logcat

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

questa è la linea che rappresenta la classe c che uso.


come per i commenti su mia domanda precedente i seguito url data dal Rahul e scaricai il mio .so file in un file di testo.

qui è che file di testo

 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

in modo come per il postale di google gruppi e specialmente suggerite da Nicklas Ansman avevo mostrato il frammento che è di circa il mio 142e linea desiderata.

Ora è possibile qualcuno qui chi può dire che cosa significa 47b0 blx r6?

Quello che ho capito è che è qualcosa di scritto in linguaggio assembly che io non lo so. Quindi ho bisogno del vostro aiuto nella comprensione di quella linea.

Grazie in anticipo

È stato utile?

Soluzione

blx salta all'indirizzo indicato dall'argomento; qui, all'indirizzo attualmente caricato nel registro r6. Inoltre, l'indirizzo di ritorno (vale a dire l'indirizzo del codice operativo ldr che si trova subito dopo la blx) è scritto nella lr registro speciale (come "registro di collegamento").

Questo corrisponde ad una chiamata indiretta. In C sarebbe simile a una chiamata tramite un puntatore a funzione. su alcune piattaforme con linking dinamico, una semplice chiamata di funzione per una funzione può anche diventare qualcosa di simile a quello che si vede qui.

Comunque, gli spettacoli discarica registro R6 essere 0 a quel punto, quindi la segfault. r6 è stato caricato dal codice operativo ldr all'indirizzo 1424. Questo carichi r6 da ciò che era in indirizzo r0 + r1, r1 essere impostato a 132 appena al di sopra. r0 è il registro convenzionale per il primo argomento a una funzione C.

Altri suggerimenti

Ok trovare fuori con un capriccio di scavo su google '.

blx Branch and link with exchange (BLX) media e se non sbaglio è simile al tipo di dichiarazione return withValue java.

mi ha aiutato a iniziare il debug in codice nativo anche ......

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top