objdump z .so souboru? potřebují pomoc, aby pochopili zpráv

hlasů
5

Jsem rozvoj nativní aplikace vztahující se k streaming, já jsem čelí některé problémy v mém c modul ... a to, co mám, je nějaké zprávy z Logcat


Zde je zpráva 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

to je čára, která reprezentuje třídu C, která i použití.


podle vyjádření k mé předchozí otázce i následovaný URL daný Rahul a hodili mé .so soubor do textového souboru.

Zde je to, že textový soubor

 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

tak dle post v google skupinách a speciálně navrženo Nicklas Ansman i ukázal úryvek, který je kolem mého požadovaný řádek 142e.

Nyní může někdo, kdo může říct, co 47b0 blx r6znamená?

To, co jsem věděl, že je to něco, co je napsáno v assembleru, že nevím. Takže potřebuji vaši pomoc při pochopení tohoto řádku.

Díky předem

Položena 17/11/2010 v 09:32
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
3

blxskoky na adresu uvedenou argument; Zde, na adresu, která je v současné době vloženého do registru R6. Také zpáteční adresa (konkrétně adresa ldropcode, která se nachází bezprostředně po blx) je napsán v účelový registru LR (jako „odkaz registr“).

To odpovídá nepřímé volání. V jazyce C by to vypadalo volání prostřednictvím ukazatel funkce. Na některých platformách s dynamickým linkování, jednoduché funkce volání funkce se také může stát něco podobného, ​​co vidíte tady.

Mimochodem, skládka registr ukazuje R6 být 0 na tom místě, proto segfault. r6 byl načítány z ldroperačního kódu na adresu 1424. To načte R6 z toho, co bylo na adrese r0 + r1, r1 je nastavena na 132 těsně nad. r0 je běžný registr pro první argument pro funkci C.

Odpovězeno 17/11/2010 v 13:48
zdroj uživatelem

hlasů
0

Ok si to s nějakou bizarní kopání na Googlu.‘

blxznamenat, Branch and link with exchange (BLX)a pokud se nemýlím, že je to podobný return withValuetyp java prohlášení.

to mi pomohlo spustit ladění v nativním kódu i ......

Odpovězeno 17/11/2010 v 12:47
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more