Objdump de un archivo .so? Necesitan ayuda para entender los mensajes

Estoy desarrollando una aplicación nativa relacionada con la transmisión, estoy enfrentando algunos problemas en mi módulo c … y lo que tengo es un mensaje de Logcat


Aquí está el mensaje de 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 

Esta es la línea que representa la clase c que uso.


Como por los comentarios en mi pregunta anterior que seguí url dado por rahul y volcado mi archivo .so a un archivo de texto.

Aquí está ese archivo de texto

  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 

Por lo que por el puesto en los grupos de google y especialmente sugerido por Nicklas Ansman i había mostrado el fragmento que está alrededor de mi línea deseada 142e .

Ahora puede alguien aquí que puede decir lo que hace 47b0 blx r6 significa?

Lo que yo sabía es que es algo escrito en lenguaje ensamblador que no sé. Así que necesito su ayuda para entender esa línea.

Gracias por adelantado

2 Solutions collect form web for “Objdump de un archivo .so? Necesitan ayuda para entender los mensajes”

blx salta a la dirección dada por el argumento; Aquí, a la dirección que actualmente está cargada en el registro r6. Además, la dirección de retorno (es decir, la dirección del opcode ldr que se encuentra inmediatamente después del blx ) se escribe en el registro de propósito especial lr (como "registro de enlace").

Esto corresponde a una llamada indirecta. En C parecería una llamada a través de un puntero de función. En algunas plataformas con vinculación dinámica, una llamada de función simple a una función también puede convertirse en algo como lo que ves aquí.

De todos modos, el volcado de registro muestra r6 a ser 0 en ese punto, de ahí la segfault. R6 se cargó desde el código de operación ldr en la dirección 1424. Esto carga r6 desde lo que estaba en la dirección r0 + r1, r1 se establece en 132 justo encima. R0 es el registro convencional para el primer argumento a una función C.

Ok encontrarlo con algunos freak cavar en google.

blx mean Branch and link with exchange (BLX) y si no estoy equivocado es similar a return withValue tipo de declaración java.

Me ayudó a empezar a depurar en código nativo también ……

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.