在Linux ARM上运行Android的ARM二进制文件
|
可以在其他具有 Linux功能的ARM设备(例如Raspberry Pi)上运行为 Android(而不是.apk)构建的ARM二进制文件吗?我正在尝试在ARM上移植我的一个项目,但我需要使用一个闭源二进制文件(SopCast),它仅适用于x86(Windows和Linux)和(最近)Android设备. 运行文件sopclient显示ELF 32位LSB可执行文件,ARM,版本1(SYSV),动态链接(使用共享库),剥离但是sh sopclient说只是不能执行二进制文件(是的,我以前编过x). “经典”ARM Linux内核和Android-Linux内核之间是否存在明显差异? 解决方法请注意,Android的仿生lib可能存在依赖关系,这可能不会出现在另一个Linux ARM上?您可以通过运行readelf -Ss binary_name来查看符号(如果有), 例如,使用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
注意使用的符号,这是检查符号的提示,最后发出这个,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 在运行时有三个动态链接的库,事实上,仿生库是从本机C和Android角度来看的libc.so,所以先仔细检查一下! 还有其他ARM libc.so将以ucLibC为幌子,因此里程可能会有所不同.唯一可以看到的方法是在Linux ARM下运行它以查看会发生什么,如果它因为分段错误或总线错误而爆炸,那么你就会知道. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
