Question

Je développe une application native en rapport avec le streaming, je suis confronté à des problèmes dans mon module c ... et ce que j'ai un certain 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

est la ligne qui représente la classe c qui utilise i.


selon les commentaires sur mon question précédente i suivi url donnée par Rahul et jetai mon fichier .so dans un fichier texte.

Voici ce 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

selon le poste dans google groupes et spécialement suggéré par Nicklas Ansman i avait montré l'extrait qui est autour de ma ligne désirée 142e.

Maintenant, quelqu'un peut-il ici qui peut dire ce que des moyens 47b0 blx r6?

Qu'est-ce que je savais est-il quelque chose d'écrit en langage assembleur que je ne sais pas. Alors j'ai besoin de votre aide pour comprendre cette ligne.

Merci d'avance

Était-ce utile?

La solution

blx saute à l'adresse indiquée par l'argument; ici, à l'adresse qui est actuellement chargé dans r6 registre. En outre, l'adresse de retour (à savoir l'adresse de l'opcode ldr qui est situé immédiatement après la blx) est écrit dans le registre à usage spécial lr (comme « registre de liaison »).

Cela correspond à un appel indirect. En C, il ressemblerait à un appel via un pointeur de fonction. sur certaines plates-formes avec liens dynamiques, un simple appel de fonction à une fonction peut aussi devenir quelque chose comme ce que vous voyez ici.

Quoi qu'il en soit, la décharge de registre montre r6 à 0 à ce moment-là, d'où le segfault. r6 a été chargé de l'opcode ldr sur l'adresse 1424. Cette charge r6 de ce qui était à l'adresse r0 + r1, r1 étant réglé sur 132 juste au-dessus. r0 est le registre classique pour le premier argument d'une fonction C.

Autres conseils

Ok trouver avec quelques recherches sur google monstre.

blx signifie Branch and link with exchange (BLX) et si je ne me trompe pas, il est semblable à return withValue type d'instruction java.

il m'a aidé à démarrer le débogage dans le code natif aussi ......

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top