gpt4 book ai didi

linux - 链接旧版本的 libc 以提供更大的应用程序覆盖率

转载 作者:IT老高 更新时间:2023-10-28 12:30:33 28 4
gpt4 key购买 nike

Linux 二进制文件通常动态链接到核心系统库 (libc)。这使得二进制文件的内存占用非常小,但依赖于最新库的二进制文件不会在旧系统上运行。相反,链接到旧库的二进制文件将在最新系统上愉快地运行。

因此,为了确保我们的应用程序在分发期间具有良好的覆盖率,我们需要找出我们可以支持的最旧的 libc 并将我们的二进制文件链接到它。

我们应该如何确定可以链接到的最旧版本的 libc?

最佳答案

找出可执行文件中的哪些符号正在创建对不需要的 glibc 版本的依赖。

$ objdump -p myprog
...
Version References:
required from libc.so.6:
0x09691972 0x00 05 GLIBC_2.3
0x09691a75 0x00 03 GLIBC_2.2.5

$ objdump -T myprog | fgrep GLIBC_2.3
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3 realpath

查看依赖库中是否有旧版本中可以链接的符号:

$ objdump -T /lib/libc.so.6 | grep -w realpath
0000000000105d90 g DF .text 0000000000000021 (GLIBC_2.2.5) realpath
000000000003e7b0 g DF .text 00000000000004bf GLIBC_2.3 realpath

我们很幸运!

从代码中的 GLIBC_2.2.5 请求版本:

#include <limits.h>
#include <stdlib.h>

__asm__(".symver realpath,realpath@GLIBC_2.2.5");

int main () {
realpath ("foo", "bar");
}

发现不再需要 GLIBC_2.3:

$ objdump -p myprog
...
Version References:
required from libc.so.6:
0x09691a75 0x00 02 GLIBC_2.2.5

$ objdump -T myprog | grep realpath
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 realpath

有关详细信息,请参阅 http://web.archive.org/web/20160107032111/http://www.trevorpounds.com/blog/?p=103 .

关于linux - 链接旧版本的 libc 以提供更大的应用程序覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4032373/

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