如何通过/proc文件系统访问Android应用程序的可执行文件



我有我的Android应用程序,我需要从我的"无根";装置我正在尝试通过/proc访问进程内存空间。我通过/proc/self/maps 得到以下结果

5e59c72000-5e59c9b000 r--p 00000000 fd:03 509                            /system/bin/toybox
5e59c9b000-5e59cde000 --xp 00029000 fd:03 509                            /system/bin/toybox
5e59cde000-5e59ce2000 rw-p 0006c000 fd:03 509                            /system/bin/toybox
5e59ce2000-5e59ce6000 r--p 00070000 fd:03 509                            /system/bin/toybox
5e59ce6000-5e59ceb000 rw-p 00000000 00:00 0 
715a800000-715b000000 rw-p 00000000 00:00 0                              [anon:libc_malloc]
715b10b000-715b10d000 r--p 00000000 fd:03 2578                           /system/lib64/libnetd_client.so
715b10d000-715b10f000 --xp 00002000 fd:03 2578                           /system/lib64/libnetd_client.so
715b10f000-715b110000 rw-p 00004000 fd:03 2578                           /system/lib64/libnetd_client.so
715b110000-715b111000 r--p 00005000 fd:03 2578                           /system/lib64/libnetd_client.so
715b111000-715b112000 rw-p 00000000 00:00 0                              [anon:.bss]
715b161000-715b1c5000 rw-p 00000000 00:00 0                              [anon:linker_alloc]
715b1c5000-715b1cc000 r--p 00000000 fd:03 2454                           /system/lib64/libcutils.so
715b1cc000-715b1d4000 --xp 00007000 fd:03 2454                           /system/lib64/libcutils.so
715b1d4000-715b1d5000 rw-p 0000f000 fd:03 2454                           /system/lib64/libcutils.so
715b1d5000-715b1d7000 r--p 00010000 fd:03 2454                           /system/lib64/libcutils.so
715b1d7000-715b1d8000 rw-p 00000000 00:00 0                              [anon:.bss]
715b223000-715b229000 r--p 00000000 fd:03 2539                           /system/lib64/liblog.so
715b229000-715b237000 --xp 00006000 fd:03 2539                           /system/lib64/liblog.so
715b237000-715b238000 rw-p 00014000 fd:03 2539                           /system/lib64/liblog.so
715b238000-715b239000 r--p 00015000 fd:03 2539                           /system/lib64/liblog.so
715b239000-715b23a000 rw-p 00000000 00:00 0                              [anon:.bss]
715b249000-715b252000 r--p 00000000 fd:03 2406                           /system/lib64/libbase.so
715b252000-715b25b000 --xp 00009000 fd:03 2406                           /system/lib64/libbase.so
715b25b000-715b25c000 rw-p 00012000 fd:03 2406                           /system/lib64/libbase.so
715b25c000-715b25d000 r--p 00013000 fd:03 2406                           /system/lib64/libbase.so
715b25d000-715b25e000 rw-p 00000000 00:00 0                              [anon:.bss]
715b295000-715b296000 r--p 00000000 07:20 92                             /apex/com.android.runtime/lib64/bionic/libdl.so
715b296000-715b297000 --xp 00001000 07:20 92                             /apex/com.android.runtime/lib64/bionic/libdl.so
715b297000-715b298000 r--p 00002000 07:20 92                             /apex/com.android.runtime/lib64/bionic/libdl.so
715b298000-715b299000 rw-p 00000000 00:00 0                              [anon:.bss]
715b2c7000-715b2d9000 r--p 00000000 07:20 93                             /apex/com.android.runtime/lib64/bionic/libm.so
715b2d9000-715b2fd000 --xp 00012000 07:20 93                             /apex/com.android.runtime/lib64/bionic/libm.so
715b2fd000-715b2fe000 rw-p 00036000 07:20 93                             /apex/com.android.runtime/lib64/bionic/libm.so
715b2fe000-715b2ff000 r--p 00037000 07:20 93                             /apex/com.android.runtime/lib64/bionic/libm.so
715b2ff000-715b300000 rw-p 00000000 00:00 0                              [anon:.bss]
715b304000-715b344000 r--p 00000000 07:20 91                             /apex/com.android.runtime/lib64/bionic/libc.so
715b344000-715b3eb000 --xp 00040000 07:20 91                             /apex/com.android.runtime/lib64/bionic/libc.so
715b3eb000-715b3ee000 rw-p 000e7000 07:20 91                             /apex/com.android.runtime/lib64/bionic/libc.so
715b3ee000-715b3f5000 r--p 000ea000 07:20 91                             /apex/com.android.runtime/lib64/bionic/libc.so

我想知道我们是否可以从这些信息中获得加载可执行文件的内存地址。谢谢

发布我在这里学到的关于解决问题的知识。下面需要一个根设备。Android(5之后(使用JIT编译,因此实际上没有创建任何odex文件(至少对于小型应用程序(。当关闭JIT编译并重新编译应用程序时(按照下面的命令进行(,odex文件内存位置确实可以在/proc/self/maps中找到。

adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
adb shell cmd package compile -m speed -f com.example.myapplication

似乎我们不能在没有根的情况下使用shell启动、shell停止命令。所以不确定我们是否可以在非根设备中停止JIT编译。然而,并没有odex文件是由于上述原因。

相关内容

最新更新