2010-11-17 9 views
5

Estoy desarrollando una aplicación nativa relacionada con el streaming, estoy frente a algunos problemas en mi módulo de c ... y lo que tengo es cierto mensaje de Logcatobjdump de un archivo .so? necesitan ayuda para entender los mensajes


Aquí está la Logcat mensaje

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.


según comentarios sobre my previous question i siguieron URL dada por Rahul y descargar a mi archivo .so a un archivo de texto.

aquí es 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 

así como por la post in google groups y especialmente sugerido por Nicklas Ansman que había mostrado el fragmento que es alrededor de mi línea deseada 142e.

¿Alguien aquí puede decir qué significa 47b0 blx r6?

Lo que sé es que es algo escrito en ensamblador que no sé. Entonces necesito tu ayuda para entender esa línea.

Gracias de antemano

+1

FWIW, la dirección de error "deadd00d" indica un aborto deliberado de VM. Antes de abortar, la VM escribe una explicación en el archivo de registro; deberías verlo arriba de lo que pegaste aquí. – fadden

Respuesta

3

blx salta a la dirección indicada por el argumento; aquí, a la dirección que está actualmente cargada en el registro r6. Además, la dirección de devolución (es decir, la dirección del código de operación 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 parecido a lo que se ve aquí.

De todos modos, el volcado de registro muestra que r6 es 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, siendo r1 a 132 justo arriba. r0 es el registro convencional para el primer argumento de una función C.

+0

Muchas gracias Thomas, es más de lo que esperaba. – Prasham

+0

Y una cosa más ... ¿Hay alguna guía disponible que tenga una lista detallada de todos los comandos de ensamblaje con la explicación adecuada? – Prasham

+1

Puede obtener el Manual de referencia de ARM Architecture en http://infocenter.arm.com/ (debe registrarse pero es gratis).También necesitará el estándar de llamada de procedimiento (ATPCS o AAPCS, dependiendo de la generación - el mundo de ARM es un gran desastre): el estándar de llamada de procedimiento define en qué registros se encuentran los argumentos, cómo se mantiene y alinea la pila, y así en. –

0

Ok encontrar hacia fuera con algo de investigación monstruo en Google.

blx significa Branch and link with exchange (BLX) y si no me equivoco es similar al return withValue tipo de declaración de java.

Me ayudó a iniciar la depuración en código nativo también ......

Cuestiones relacionadas