gpt4 book ai didi

android - Android 4.0 (ICS) 是否支持主要可执行文件的 PIE(位置无关可执行文件)?

转载 作者:搜寻专家 更新时间:2023-11-01 07:37:41 25 4
gpt4 key购买 nike

为了检查 Android 4.0 (ICS) 中主要可执行文件的 PIE,我在 Galaxy Nexus 中测试了一些示例程序。结果如下:

    "-fPIE" "-pie"   TYPE        address
--------------------------------------------
(a) - - ET_EXE 0x00008000
(b) x - ET_EXE 0x00008000
(c) - x ET_DYN program crashed
(d) x x ET_DYN program crashed

注意事项:为 android-14 使用 Android NDK r7

结果表明,没有“-pie”的 (a) 和 (b) 不是随机的,(c) 和 (d) 有“-pie” 崩溃。因此,我无法为主要可执行文件启用 ASLR。崩溃日志如下所示:

pid: 5306, tid: 5306  >>> ./memdump <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000a020
r0 70000001 r1 b00094fc r2 00000000 r3 0000a020
r4 b000a078 r5 ffffffff r6 0000a020 r7 be933b98
r8 b0009910 r9 00000000 10 00000000 fp b0006d3b
ip 0000200f sp be933b58 lr 00001f50 pc b00041c0 cpsr 00000030
d0 0000000000000000 d1 0000000000000000
d2 0000000000000000 d3 0000000000000000
d4 0000000000000000 d5 0000000000000000
d6 0000000000000000 d7 0000000000000000
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0000000000000000 d17 0000000000000000
d18 0000000000000000 d19 0000000000000000
d20 0000000000000000 d21 0000000000000000
d22 0000000000000000 d23 0000000000000000
d24 0000000000000000 d25 0000000000000000
d26 0000000000000000 d27 0000000000000000
d28 0000000000000000 d29 0000000000000000
d30 0000000000000000 d31 0000000000000000
scr 00000000

#00 pc b00041c0 /system/bin/linker
#01 lr 00001f50 <unknown>

code around pc:
b00041a0 6858e00a 208cf8d4 f8c41885 e00350d8
b00041b0 0895685a 50dcf8c4 e0013308 44794924
b00041c0 2d00681d af49f47f 30acf8d4 f8d4b113
b00041d0 b96110b0 7174f240 9100481e 44784a1e
b00041e0 491f4b1e 447b447a 68094479 f8d4e7b1

code around lr:
00001f30 ffffffff ffffffff ffffffff ffffffff
00001f40 ffffffff ffffffff ffffffff ffffffff
00001f50 ffffffff ffffffff ffffffff ffffffff
00001f60 ffffffff ffffffff ffffffff ffffffff
00001f70 ffffffff ffffffff ffffffff ffffffff

stack:
be933b18 00000000
be933b1c 00000000
be933b20 00000000
be933b24 00000000
be933b28 00000000
be933b2c 00000000
be933b30 00000000
be933b34 00000000
be933b38 00000000
be933b3c 00000000
be933b40 00000000
be933b44 00000000
be933b48 00000000
be933b4c 00000000
be933b50 df0027ad
be933b54 00000000
#00 be933b58 00000000
be933b5c 00000000
be933b60 b000a078
be933b64 b000a078
be933b68 be933cf1
be933b6c 00000118
be933b70 b000a078
be933b74 b000a078
be933b78 b00094f0
be933b7c 00000002
be933b80 be933b98
be933b84 b0009910
be933b88 00000000
be933b8c 00000000
be933b90 b0006d3b /system/bin/linker
be933b94 b00047ed /system/bin/linker
be933b98 00000000
be933b9c 00000000

Android 4.0 不支持主要可执行文件的 PIE 吗?

最佳答案

我已经找到问题了。 Android 不支持主要可执行文件的 PIE。错误是由于 Android 的链接器 (/bionic/linker/linker.cpp - link_image())。它始终将可执行 ELF 二进制文件中的 DYNAMIC header 加载到指定为 header 虚拟地址字段的固定地址,而不管二进制类型(ET_EXE 或 ET_DYN)如何。在上面的例子中,指定的地址是 0x0000a020,所以 SEGV_MAPERR 发生在该地址。此外,Android 的链接器假设二进制文件是“ET_EXE”,而不是它的实际类型。真可惜:-<。谢谢。

关于android - Android 4.0 (ICS) 是否支持主要可执行文件的 PIE(位置无关可执行文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com