Смещение общих библиотек на Android

В моем проекте после сбоя я получил такой журнал

I/DEBUG   ( 1133):  r0 0000deed  r1 00001234  r2 deedbeed  r3 00000000
I/DEBUG   ( 1133):  r4 befab4c0  r5 00000007  r6 befab548  r7 4214cb20
I/DEBUG   ( 1133):  r8 befab49c  r9 4214cb0c  10 4214caf8  fp 81da5368
I/DEBUG   ( 1133):  ip 80003108  sp befab440  lr 845133d4  pc 844ed8f0  cpsr 60000010
I/DEBUG   ( 1133):  d0  7165722068736175  d1  4320585858585865
I/DEBUG   ( 1133):  d2  006f006900740073  d3  00200030003d0074
I/DEBUG   ( 1133):  d4  4214e9804214e94c  d5  4214e9e84214e9b4
I/DEBUG   ( 1133):  d6  3ce2000000000000  d7  000000424214ea84
I/DEBUG   ( 1133):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   ( 1133):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   ( 1133):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   ( 1133):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   ( 1133):  d16 4050800000000000  d17 4050800000000000
I/DEBUG   ( 1133):  d18 4018000000000000  d19 3fe00000000000b4
I/DEBUG   ( 1133):  d20 3ff0000000000000  d21 8000000000000000
I/DEBUG   ( 1133):  d22 0000000000000000  d23 ff00000000000000
I/DEBUG   ( 1133):  d24 ff00000000000000  d25 ff00000000000000
I/DEBUG   ( 1133):  d26 0100010001000100  d27 0100010001000100
I/DEBUG   ( 1133):  d28 0100010001000100  d29 3ff0000000000000
I/DEBUG   ( 1133):  d30 0000000000000000  d31 3ff0000000000000
I/DEBUG   ( 1133):  scr 20000012
I/DEBUG   ( 1133): 
I/DEBUG   ( 1133):          #00  pc 000ed8f0  libmyproject.so
I/DEBUG   ( 1133):          #01  lr 845133d4  libmyproject.so
I/DEBUG   ( 1133): 
I/DEBUG   ( 1133): code around pc:
I/DEBUG   ( 1133): 844ed8d0 e52de004 e24dd014 e58d0004 e58d1000 
I/DEBUG   ( 1133): 844ed8e0 e28d301c e58d300c e59d3004 e5933000 
I/DEBUG   ( 1133): 844ed8f0 e593c238 e59d0004 e59d1000 e59d2018 
I/DEBUG   ( 1133): 844ed900 e59d300c e12fff3c e28dd014 e49de004 
I/DEBUG   ( 1133): 844ed910 e28dd008 e12fff1e e52de004 e24dd00c 
I/DEBUG   ( 1133): 
I/DEBUG   ( 1133): code around lr:
I/DEBUG   ( 1133): 845133b4 e2433013 e58d3024 e59d0024 e3a01c12 
I/DEBUG   ( 1133): 845133c4 e2811034 e59f212c e3a03000 ebff693d 
I/DEBUG   ( 1133): 845133d4 ebff5e4c e1a03000 e3530000 0a000008 
I/DEBUG   ( 1133): 845133e4 ebff5e48 e1a03000 e1a00003 ebfffa85 
I/DEBUG   ( 1133): 845133f4 e1a03000 e3530000 0a000001 e3a03001 
I/DEBUG   ( 1133): 
I/DEBUG   ( 1133): stack:
I/DEBUG   ( 1133):     befab400  00770518  
I/DEBUG   ( 1133):     befab404  0000a000  
I/DEBUG   ( 1133):     befab408  befab4a0  
I/DEBUG   ( 1133):     befab40c  4214cafc  
I/DEBUG   ( 1133):     befab410  0000abe0  
I/DEBUG   ( 1133):     befab414  afd13663  /system/lib/libc.so
I/DEBUG   ( 1133):     befab418  0000ce60  
I/DEBUG   ( 1133):     befab41c  00770518  
I/DEBUG   ( 1133):     befab420  befab548  
I/DEBUG   ( 1133):     befab424  4214cb04  
I/DEBUG   ( 1133):     befab428  0000ce60  
I/DEBUG   ( 1133):     befab42c  00770518  
I/DEBUG   ( 1133):     befab430  befab548  
I/DEBUG   ( 1133):     befab434  81d48eb9  /system/lib/libdvm.so
I/DEBUG   ( 1133):     befab438  e3a07077  
I/DEBUG   ( 1133):     befab43c  ef900077  
I/DEBUG   ( 1133): #00 befab440  00001234  
I/DEBUG   ( 1133):     befab444  0000deed  
I/DEBUG   ( 1133):     befab448  00000007  
I/DEBUG   ( 1133):     befab44c  befab45c  
I/DEBUG   ( 1133):     befab450  4214cb20  
I/DEBUG   ( 1133):     befab454  845133d4  libmyproject.so
I/DEBUG   ( 1133):     befab458  deedbeed  
I/DEBUG   ( 1133):     befab45c  00000000  
I/DEBUG   ( 1133):     befab460  000009f4  
I/DEBUG   ( 1133):     befab464  4462e744  
I/DEBUG   ( 1133):     befab468  000001c7  
I/DEBUG   ( 1133):     befab46c  00000000  
I/DEBUG   ( 1133):     befab470  40532730  
I/DEBUG   ( 1133):     befab474  0000abe0  
I/DEBUG   ( 1133):     befab478  befab4c8  
I/DEBUG   ( 1133):     befab47c  81d68e49 
I/DEBUG   ( 1133):     befab480  40532730  
I/DEBUG   ( 1133):     befab484  0000deed  

однако в моем файле карты нет таких значений, как 0x845133d4. Я предполагаю, что мне нужно знать значение смещения. Где я могу найти это?

ИЗМЕНИТЬ

Я нашел подсказку (http://groups.google.com/group/android-ndk/browse_thread/thread/83012b9a9633a6d6), как найти это смещение, однако мой /proc/maps пуст

ИЗМЕНИТЬ2

на устройстве с привилегиями root adb shell cat /proc/<pid>/maps дает мне:

...
82000000-83665000 r-xp 00000000 b3:02 5603348    libmyproject.so
83665000-836c6000 rwxp 01664000 b3:02 5603348    libmyproject.so
...

Может ли кто-нибудь подтвердить, что это возможно только на рутированных устройствах? Кто-нибудь знает, как это сделать без рута?


person noisy    schedule 23.02.2011    source источник


Ответы (2)


Каждое приложение имеет доступ к файлу /proc/self/maps, и в этом файле находится информация, которую я искал :)

person noisy    schedule 23.02.2011

Следующая процедура работала для меня на нерутированном телефоне:

  1. adb оболочка
  2. Найдите pid вашего приложения в выводе ps
  3. запуск от имени com.myapp.package
  4. В разделе «Запуск от имени» у вас есть доступ к /proc/XXXX/maps.
person Yevgeni Litvin    schedule 01.11.2012