Remember that there may be Android bionic lib dependencies that may not be present in another Linux ARM?
You can verify that by running readelf -Ss binary_name to see the characters, if any,
For example, using readelf -Ss logwrapper
Symbol table '.dynsym' contains 47 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr0 2: 00000000 0 FUNC GLOBAL DEFAULT UND strlen 3: 00000000 0 FUNC GLOBAL DEFAULT UND __errno 4: 00000000 0 FUNC GLOBAL DEFAULT UND open 5: 00000000 0 FUNC GLOBAL DEFAULT UND close 6: 00000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail 7: 00000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard 8: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock 9: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock 10: 00000000 0 FUNC GLOBAL DEFAULT UND read 11: 00000000 0 FUNC GLOBAL DEFAULT UND abort 12: 00000000 0 OBJECT GLOBAL DEFAULT UND __sF 13: 00000000 0 FUNC GLOBAL DEFAULT UND memcpy 14: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_init 15: 00000000 0 FUNC GLOBAL DEFAULT UND exit 16: 0000a170 0 NOTYPE GLOBAL DEFAULT 19 __dso_handle 17: 0000a008 0 NOTYPE GLOBAL DEFAULT 13 __INIT_ARRAY__ 18: 0000a010 0 NOTYPE GLOBAL DEFAULT 14 __FINI_ARRAY__ 19: 00000000 0 FUNC GLOBAL DEFAULT UND setgid 20: 00000000 0 FUNC GLOBAL DEFAULT UND writev 21: 00000000 0 FUNC GLOBAL DEFAULT UND dup2 22: 00000000 0 FUNC GLOBAL DEFAULT UND access 23: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_unwind_cpp_pr1 24: 00000000 0 FUNC GLOBAL DEFAULT UND memmove 25: 00000000 0 FUNC GLOBAL DEFAULT UND fork 26: 00000000 0 FUNC GLOBAL DEFAULT UND execvp 27: 00000000 0 FUNC GLOBAL DEFAULT UND strncmp 28: 00000000 0 FUNC GLOBAL DEFAULT UND strcmp 29: 00000000 0 FUNC GLOBAL DEFAULT UND ptsname 30: 00000000 0 FUNC GLOBAL DEFAULT UND setuid 31: 00000000 0 FUNC GLOBAL DEFAULT UND strerror 32: 00000000 0 FUNC GLOBAL DEFAULT UND vsnprintf 33: 00000000 0 FUNC GLOBAL DEFAULT UND unlockpt 34: 00000000 0 FUNC GLOBAL DEFAULT UND wait 35: 00000000 0 FUNC GLOBAL DEFAULT UND fputs 36: 00009318 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start 37: 00009368 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end 38: 0000a15c 0 NOTYPE GLOBAL DEFAULT 18 __data_start 39: 0000a170 0 NOTYPE GLOBAL DEFAULT ABS _edata 40: 0000a170 0 NOTYPE GLOBAL DEFAULT ABS __bss_start 41: 0000a170 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__ 42: 0000a188 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__ 43: 0000a188 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__ 44: 0000a188 0 NOTYPE GLOBAL DEFAULT ABS __end__ 45: 0000a188 0 NOTYPE GLOBAL DEFAULT ABS _end 46: 00080000 0 NOTYPE GLOBAL DEFAULT ABS _stack
Pay attention to the characters used so that your tooltip for character checking finally releases this, readelf -d logwrapper
Dynamic section at offset 0x2020 contains 24 entries: Tag Type Name/Value 0x00000003 (PLTGOT) 0xa0e8 0x00000002 (PLTRELSZ) 208 (bytes) 0x00000017 (JMPREL) 0x875c 0x00000014 (PLTREL) REL 0x00000011 (REL) 0x882c 0x00000012 (RELSZ) 16 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000015 (DEBUG) 0x0 0x00000006 (SYMTAB) 0x8280 0x0000000b (SYMENT) 16 (bytes) 0x00000005 (STRTAB) 0x8570 0x0000000a (STRSZ) 490 (bytes) 0x00000004 (HASH) 0x8128 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libstdc++.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000020 (PREINIT_ARRAY) 0xa000 0x00000021 (PREINIT_ARRAYSZ) 0x8 0x00000019 (INIT_ARRAY) 0xa008 0x0000001b (INIT_ARRAYSZ) 8 (bytes) 0x0000001a (FINI_ARRAY) 0xa010 0x0000001c (FINI_ARRAYSZ) 8 (bytes) 0x0000001e (FLAGS) 0x00000000 (NULL) 0x0
There are three libraries dynamically linked at runtime, the point is the bionic library libc.so from the point of view of C and Android, so double check this first!
There are other ARM libc.so that will be disguised as ucLibC , so mileage may vary. The only way to see it is to run it under Linux ARM, to find out what happens if it triggers segmentation errors or bus errors, you will find out.
t0mm13b
source share