2010-11-17 34 views
5

Tôi đang phát triển một ứng dụng bản địa liên quan đến trực tuyến, tôi đang phải đối mặt với một số vấn đề trong mô-đun c của tôi ... và những gì tôi có là một số tin nhắn từ Logcatobjdump của tệp .so? cần sự giúp đỡ để hiểu được thông điệp


Dưới đây là Logcat nhắn

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 

này là dòng đại diện cho lớp c mà tôi sử dụng.


theo nhận xét trên my previous question tôi đã theo dõi url do rahul cung cấp và kết xuất tệp .so của tôi vào tệp văn bản.

ở đây là tập tin văn bản

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 

để theo post in google groups và đặc biệt được đề xuất bởi Nicklas Ansman tôi đã cho thấy đoạn đó là xung quanh dòng mong muốn của tôi 142e.

Bây giờ bất kỳ ai ở đây có thể biết 47b0 blx r6 có nghĩa là gì?

Điều tôi biết là nó được viết bằng ngôn ngữ lắp ráp mà tôi không biết. Vì vậy, tôi cần sự giúp đỡ của bạn trong việc hiểu được dòng đó.

Cảm ơn trước

+1

FWIW, địa chỉ lỗi "deadd00d" biểu thị một máy chủ bị hủy cố ý. Trước khi hủy bỏ VM, hãy viết một lời giải thích cho tệp nhật ký; bạn sẽ thấy nó ở trên những gì bạn dán ở đây. – fadden

Trả lời

3

blx nhảy đến địa chỉ được đưa ra bởi lập luận; ở đây, đến địa chỉ hiện đang được nạp trong thanh ghi r6. Ngoài ra, địa chỉ trả lại (cụ thể là địa chỉ của mã vạch ldr được đặt ngay sau blx) được ghi vào sổ đăng ký chuyên dụng lr (dưới dạng "đăng ký liên kết").

Điều này tương ứng với cuộc gọi gián tiếp. Trong C nó sẽ giống như một cuộc gọi thông qua một con trỏ hàm. trên một số nền tảng có liên kết động, một hàm gọi đơn giản tới một hàm cũng có thể trở thành một thứ giống như những gì bạn thấy ở đây.

Dù sao, kết xuất đăng ký cho thấy r6 là 0 tại thời điểm đó, do đó là segfault. r6 được tải từ mã vạch ldr trên địa chỉ 1424. Tải này r6 từ địa chỉ ở r0 + r1, r1 được đặt thành 132 ngay trên. r0 là thanh ghi thông thường cho đối số đầu tiên cho hàm C.

+0

Cảm ơn rất nhiều Thomas, đó là nhiều hơn tôi đã mong đợi. – Prasham

+0

Và một điều nữa ... Có hướng dẫn nào có sẵn có danh sách chi tiết của tất cả các lệnh lắp ráp với giải thích thích hợp không? – Prasham

+1

Bạn có thể lấy Cẩm Nang Tham Khảo Kiến Trúc ARM từ http://infocenter.arm.com/ (bạn phải đăng ký nhưng nó hoàn toàn miễn phí).Bạn cũng sẽ cần tiêu chuẩn gọi thủ tục (ATPCS hoặc AAPCS, tùy thuộc vào thế hệ - thế giới ARM là một mớ hỗn độn lớn): tiêu chuẩn gọi thủ tục xác định trong thanh ghi nào là đối số, cách ngăn xếp được duy trì và căn chỉnh, và như vậy trên. –

0

Ok tìm hiểu bằng cách khai thác một số quái vật trên google. '

blx có nghĩa là Branch and link with exchange (BLX) và nếu tôi không sai, nó tương tự như return withValue loại câu lệnh java.

nó đã giúp tôi để bắt đầu gỡ lỗi trong mã nguồn gốc cũng ......

Các vấn đề liên quan