Executing cross-compiled program in Android with Runtime.getRuntime()
Android developer newbie here. I am trying to develop a GUI wrapper in Android for a small cross-compiled application that runs from the Android shell (using "adb shell"). The application performs some cryptographic operations and requires the gmp and libpaillier libraries. The application runs as expected when executed from the Android shell. However, when trying to execute it from the Android application layer (Android Activity) with the Runtime.getRuntime().exec("cmd") object, I get the segmentation fault error showed below. It only happens when the cryptographic operations are used (for example, it works fine when just displaying the command line argument options). I will appreciate any advice that could help me to figure out this problem. Thanks.
07-26 14:58:12.633: INFO/DEBUG(10175): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-26 14:58:12.633: INFO/DEBUG(10175): Build fingerprint: 'google/soju/crespo:2.3.4/GRJ22/121341:user/release-keys'
07-26 14:58:12.633: INFO/DEBUG(10175): pid: 12281, tid: 12281 >>> /data/test/mptest <<<
07-26 14:58:12.633: INFO/DEBUG(10175): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c
07-26 14:58:12.633: INFO/DEBUG(10175): r0 00000000 r1 00021180 r2 ffffff1c r3 3fbae818
07-26 14:58:12.633: INFO/DEBUG(10175): r4 afd41504 r5 bec40ad8 r6 80000000 r7 3fbae818
07-26 14:58:12.633: INFO/DEBUG(10175): r8 00000000 r9 00000000 10 00000000 fp bec40c84
07-26 14:58:12.633: INFO/DEBUG(10175): ip 00024188 sp bec40840 lr afd18821 pc afd1a894 cpsr a0000030
07-26 14:58:12.633: INFO/DEBUG(10175): d0 afd46484afd46410 d1 6f427362b606cc00
07-26 14:58:12.633: INFO/DEBUG(10175): d2 0000000000000000 d3 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d4 0000000000000000 d5 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d6 0000000000000000 d7 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d8 0000000000000开发者_如何学Go000 d9 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d10 0000000000000000 d11 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d12 0000000000000000 d13 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d14 0000000000000000 d15 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d16 0000000000000000 d17 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d18 0000000000000000 d19 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d20 0000000000000000 d21 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d22 0000000000000000 d23 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d24 0000000000000000 d25 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d26 0000000000000000 d27 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d28 0000000000000000 d29 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): d30 0000000000000000 d31 0000000000000000
07-26 14:58:12.633: INFO/DEBUG(10175): scr 00000000
07-26 14:58:12.645: INFO/DEBUG(10175): #00 pc 0001a894 /system/lib/libc.so
07-26 14:58:12.649: INFO/DEBUG(10175): #01 lr afd18821 /system/lib/libc.so
07-26 14:58:12.649: INFO/DEBUG(10175): code around pc:
07-26 14:58:12.649: INFO/DEBUG(10175): afd1a874 00000000 4ff0e92d 8b02ed2d f5ad4db5
07-26 14:58:12.649: INFO/DEBUG(10175): afd1a884 46807d17 950f447d 9c0f4615 910e4ab2
07-26 14:58:12.649: INFO/DEBUG(10175): afd1a894 300cf8b8 462c58a1 6808071a d5029095
07-26 14:58:12.649: INFO/DEBUG(10175): afd1a8a4 3010f8d8 4640b963 ffb4f001 f7f7b140
07-26 14:58:12.649: INFO/DEBUG(10175): afd1a8b4 2109fae7 f04f6001 900c30ff b9baf001
07-26 14:58:12.649: INFO/DEBUG(10175): code around lr:
07-26 14:58:12.649: INFO/DEBUG(10175): afd18800 ffffff70 ffffff6c ffffff74 ffffff78
07-26 14:58:12.649: INFO/DEBUG(10175): afd18810 b503b40e f852aa03 92011b04 f82cf002
07-26 14:58:12.649: INFO/DEBUG(10175): afd18820 400ce8bd 4770b003 300cf9b0 4604b510
07-26 14:58:12.649: INFO/DEBUG(10175): afd18830 f7f9b933 2109fb27 f04f6001 e01530ff
07-26 14:58:12.649: INFO/DEBUG(10175): afd18840 68106b02 f104b140 45600c40 f7fbd001
07-26 14:58:12.652: INFO/DEBUG(10175): stack:
07-26 14:58:12.652: INFO/DEBUG(10175): bec40800 00000020
07-26 14:58:12.652: INFO/DEBUG(10175): bec40804 00024224 /data/test/mptest
07-26 14:58:12.652: INFO/DEBUG(10175): bec40808 00000010
07-26 14:58:12.652: INFO/DEBUG(10175): bec4080c 00000020
07-26 14:58:12.652: INFO/DEBUG(10175): bec40810 00024224 /data/test/mptest
07-26 14:58:12.652: INFO/DEBUG(10175): bec40814 00000010
07-26 14:58:12.656: INFO/DEBUG(10175): bec40818 00000010
07-26 14:58:12.656: INFO/DEBUG(10175): bec4081c b0009468 /system/bin/linker
07-26 14:58:12.656: INFO/DEBUG(10175): bec40820 ffffffff
07-26 14:58:12.656: INFO/DEBUG(10175): bec40824 00000000
07-26 14:58:12.656: INFO/DEBUG(10175): bec40828 6b6505b0
07-26 14:58:12.656: INFO/DEBUG(10175): bec4082c e69d3d64
07-26 14:58:12.656: INFO/DEBUG(10175): bec40830 cfcaab85
07-26 14:58:12.656: INFO/DEBUG(10175): bec40834 520fb67e
07-26 14:58:12.656: INFO/DEBUG(10175): bec40838 df002777
07-26 14:58:12.660: INFO/DEBUG(10175): bec4083c e3a070ad
07-26 14:58:12.660: INFO/DEBUG(10175): #00 bec40840 69d2c15d
07-26 14:58:12.660: INFO/DEBUG(10175): bec40844 77929325
07-26 14:58:12.660: INFO/DEBUG(10175): bec40848 feb7d8da
07-26 14:58:12.660: INFO/DEBUG(10175): bec4084c 686a93ac
07-26 14:58:12.660: INFO/DEBUG(10175): bec40850 354e5ebd
07-26 14:58:12.660: INFO/DEBUG(10175): bec40854 84a276b3
07-26 14:58:12.664: INFO/DEBUG(10175): bec40858 56777d01
07-26 14:58:12.664: INFO/DEBUG(10175): bec4085c 43d437cf
07-26 14:58:12.664: INFO/DEBUG(10175): bec40860 c678f383
07-26 14:58:12.664: INFO/DEBUG(10175): bec40864 2d2f7b98
07-26 14:58:12.664: INFO/DEBUG(10175): bec40868 45a2a873
07-26 14:58:12.664: INFO/DEBUG(10175): bec4086c d1230fb5
07-26 14:58:12.664: INFO/DEBUG(10175): bec40870 11ea3141
07-26 14:58:12.668: INFO/DEBUG(10175): bec40874 30b0ae58
07-26 14:58:12.668: INFO/DEBUG(10175): bec40878 00021180 /data/test/mptest
07-26 14:58:12.668: INFO/DEBUG(10175): bec4087c afd41504 /system/lib/libc.so
07-26 14:58:12.668: INFO/DEBUG(10175): bec40880 000001c4
07-26 14:58:12.668: INFO/DEBUG(10175): bec40884 00000001
07-26 14:58:15.652: DEBUG/dalvikvm(7064): GC_EXPLICIT freed 168K, 30% free 7359K/10439K, external 5458K/6546K, paused 87ms
07-26 14:58:21.613: DEBUG/dalvikvm(12270): Calling exit(1)
07-26 14:58:21.660: INFO/ActivityManager(106): Process com.android.emoc (pid 12270) has died.
07-26 14:58:21.664: INFO/WindowManager(106): WIN DEATH: Window{4058db50 com.android.emoc/com.android.emoc.EmocActivity paused=false}
First off, I would suggest using the NDK, unless this is a huge inconvenience. It will make things a lot easier. (Also keep in mind that there will be Intel-based Android devices soon, so you may want to make it easier for you down the road to support multiple architectures).
Since you're able to run the executable itself, I would suggest just plastering it with printf statements until you narrow down the point where it errors out via divide and conquer. If you're doing file access, your process may not have the permissions to access it?
精彩评论