objdump di un file .so? bisogno di aiuto per capire i messaggi
-
25-09-2019 - |
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
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 ......