2010-11-17 12 views
5

Zajmuję się tworzeniem aplikacji natywnej związanej streamingu, Jestem stoi pewne problemy w moim module c ... i co mam jest jakaś wiadomość od logcatobjdump pliku .so? potrzebują pomocy, aby zrozumieć komunikaty


Oto Logcat komunikat

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 

jest linia, która reprezentuje klasę c które wykorzystać.


jak za komentarze na my previous question Śledziłem URL podany przez Rahul i rzucił mój plik .so do pliku tekstowego.

tutaj jest to, że plik tekstowy

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 jak na post in google groups i specjalnie sugeruje Nicklas Ansman miałem pokazano fragment, który jest wokół mojego pożądanej linii 142e.

Teraz może ktoś tutaj, kto może powiedzieć, co oznacza 47b0 blx r6 oznacza?

Co wiedziałem, to jest coś napisane w języku asemblerowym, którego nie znam. Potrzebuję twojej pomocy w zrozumieniu tej linii.

góry dzięki

+1

FWIW, adres awarii "deadd00d" wskazuje celowe przerwanie VM. Przed przerwaniem maszyna VM zapisuje wyjaśnienie do pliku dziennika; powinieneś to zobaczyć powyżej tego, co tutaj wkleiłeś. – fadden

Odpowiedz

3

blx skacze na adres podany przez argument; tutaj, na adres, który jest aktualnie załadowany do rejestru r6. Również adres powrotu (a mianowicie adres kodu operacji ldr, który znajduje się bezpośrednio po blx) jest zapisany w rejestrze specjalnego przeznaczenia lr (jako "rejestr połączeń").

Odpowiada to połączeniu pośrednim. W C wyglądałoby to jak połączenie za pomocą wskaźnika funkcji. na niektórych platformach z dynamicznym łączeniem proste wywołanie funkcji do funkcji może również stać się czymś podobnym do tego, co tutaj widzisz.

W każdym razie zrzutu rejestru pokazuje r6 na 0 w tym punkcie, a więc na segfault. r6 został załadowany z kodu operacjina adres 1424. To ładuje r6 z tego, co było pod adresem r0 + r1, r1 jest ustawione na 132 tuż powyżej. r0 jest konwencjonalnym rejestrem dla pierwszego argumentu funkcji C.

+0

Wielkie dzięki Thomas, to więcej, niż się spodziewałem. – Prasham

+0

I jeszcze jedno ... Czy istnieje jakiś przewodnik zawierający szczegółową listę wszystkich poleceń montażu z odpowiednim wyjaśnieniem? – Prasham

+1

Możesz uzyskać podręcznik referencyjny architektury ARM ze strony http://infocenter.arm.com/ (musisz się zarejestrować, ale jest za darmo).Będziesz także potrzebował standardowego wywołania procedury (ATPCS lub AAPCS, w zależności od generacji - świat ARM to wielki bałagan): standard wywołania procedury definiuje, w jakich rejestrach są argumenty, w jaki sposób stos jest utrzymywany i wyrównany, a więc na. –

0

Ok znaleźć go z jakimś dziwnym kopania w Google.”

blx oznacza Branch and link with exchange (BLX) i jeśli się nie mylę, jest to podobne do oświadczenia java o typie return withValue.

pomógł mi, aby rozpocząć debugowanie w natywnego kodu również ......

Powiązane problemy