5 votes

objdump d'un fichier .so ? besoin d'aide pour comprendre les messages

Je développe une application native liée au streaming, je rencontre quelques problèmes dans mon module c... et ce que j'ai est un message de Logcat


Voici le message 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

c'est la ligne qui représente la classe c que j'utilise.


selon les commentaires sur ma question précédente j'ai suivi l'url donnée par rahul et j'ai transféré mon fichier .so dans un fichier texte.

Voici le fichier texte

 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

Ainsi, conformément à la publier dans les groupes Google et spécialement suggéré par Nicklas Ansman j'ai montré le snippet qui est autour de ma ligne désirée 142e .

Maintenant, est-ce que quelqu'un ici qui peut dire ce que fait 47b0 blx r6 signifie ?

Ce que je sais, c'est que c'est quelque chose écrit en langage assembleur que je ne connais pas. J'ai donc besoin de votre aide pour comprendre cette ligne.

Merci d'avance

3voto

Thomas Pornin Points 36984

blx saute à l'adresse donnée par l'argument ; ici, à l'adresse qui est actuellement chargée dans le registre r6. De plus, l'adresse de retour (c'est-à-dire l'adresse de la fonction ldr qui est situé immédiatement après le blx ) est écrit dans le registre spécial lr (comme "registre de liaison").

Cela correspond à un appel indirect. En C, cela ressemblerait à un appel par le biais d'un pointeur de fonction. Sur certaines plates-formes avec liaison dynamique, un simple appel de fonction à une fonction peut également devenir quelque chose comme ce que vous voyez ici.

Quoi qu'il en soit, le vidage de registre montre que r6 est à 0 à ce moment-là, d'où le défaut de segmentation. r6 a été chargé à partir de l'unité ldr opcode sur l'adresse 1424. Cela charge r6 à partir de ce qui se trouvait à l'adresse r0+r1, r1 étant réglé à 132 juste au-dessus. r0 est le registre conventionnel pour le premier argument d'une fonction C.

0voto

Prasham Points 2424

Ok, trouvez-le avec quelques recherches bizarres sur google.

blx moyenne Branch and link with exchange (BLX) et si je ne me trompe pas c'est similaire à return withValue type de déclaration java.

cela m'a aidé à commencer à déboguer en code natif aussi......

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X