标签: prelink

ELF Android系统库中.rel.dyn部分的目的

我正在尝试处理.rel.plt某些Android系统库的部分,我可以很容易地找到函数的地址.

但是,我不确定该.rel.dyn部分的条目是做什么的.此部分是否也包含功能?.got.pltARM安卓库中缺少X86库中的表.不确定是否也需要这些.

android链接器代码提到系统库是预先链接并在固定地址加载的.如何处理.rel.plt.rel.dyn部分.

更广泛的问题是各地了解Android的基于ARM的系统库和.rel.dyn,rel.plt以及.got.plt部分用在预链接抛出的附加问题.

android elf prelink

6
推荐指数
1
解决办法
2309
查看次数

预链接仅对相对重定位有影响

我正在使用交叉预链接来预链接使用 Qt 用于嵌入式 ARM 设备的大型 C++ 可执行文件。请注意,我没有使用 Yocto,而是使用自定义发行版 - 因此我目前正在手动运行预链接。

查看 prelink 的输出,它似乎有效:

$ prelink --verbose --ld-library-path=/opt/<product>/lib:/usr/local/Qt-5.3.1/lib --root=$PRODUCT_TARGET_ROOT/<product>/rfs/ /path/to/binary
Laying out 56 libraries in virtual address space 41000000-50000000
Assigned virtual address space slots for libraries:
/lib/ld-linux.so.3                                           41000000-41027908
/opt/<product>/lib/lib<product>common.so.1                   41030000-41cf0fd0
/lib/libc.so.6                                               442b0000-443e3980
/usr/local/Qt-5.3.1/lib/libQt5Qml.so.5                       434f0000-4380ee84
[..]
Prelinking /lib/ld-2.17.so
Prelinking /lib/libc-2.17.so
Prelinking /path/to/binary
Prelinking /<product>/lib/lib<product>common.so.1.0.0
Prelinking /usr/local/Qt-5.3.1/lib/libQt5Qml.so.5.3.1 
[..]
Run Code Online (Sandbox Code Playgroud)

当库被加载时,至少 libQt5Qml.so 和 libproductcommon.so 似乎被加载到预链接设置的首选加载地址:

$ cat /proc/`pidof binary`/maps
2ab49000-2ab4a000 r--p 0001e000 07:00 9357       /roroot/lib/ld-2.17.so
2ab4a000-2ab4b000 rw-p 0001f000 07:00 9357       /roroot/lib/ld-2.17.so …
Run Code Online (Sandbox Code Playgroud)

linux linker elf ld prelink

5
推荐指数
1
解决办法
1173
查看次数

标签 统计

elf ×2

prelink ×2

android ×1

ld ×1

linker ×1

linux ×1