elf

使用绝对路径时,qemu chroot 中的 readelf 会失败
elf

使用绝对路径时,qemu chroot 中的 readelf 会失败

我正在尝试在 qemu 模拟的 chrooted 环境中安装 java 8 SDK,但遇到了以下错误 readelf: Error: /proc/self/exe: Failed to read file's magic number 当路径不是绝对路径时,Readelf 可以正常工作。以下输出正确的标头。 cd / && readelf -h proc/self/exe 但下面却没有 readelf -h /proc/self/exe 有什么建议或继续调试的技巧吗?提前致谢! ...

Admin

为什么可执行文件需要二进制格式规范?
elf

为什么可执行文件需要二进制格式规范?

我知道 Linux 或 Windows 之类的操作系统是用 C/C++ 编写的,并编译为给定的架构(例如 AMD64)以生成适合该架构的机器代码。 我的问题 - 为什么二进制代码需要单独的规范 - Linux 使用 ELF 而 Windows 使用可移植可执行格式? 如果没有这种二进制格式规范,是否可以创建操作系统和在该操作系统上运行的程序? 二进制格式是:依赖于架构、依赖于操作系统,还是两者兼而有之? 二进制格式是否仅适用于可执行文件还是也适用于操作系统代码? ...

Admin

填充具有版本化符号的库
elf

填充具有版本化符号的库

对于共享对象加载的库,如何允许可执行文件解析版本符号? 系统中有许多可执行文件使用的专有库,该库的一个例程中存在错误,我们需要在整个系统中进行修补。这使得像 LD_PRELOAD 这样的功能变得繁琐,并且不切实际,无法尝试强制进入这些可执行文件可能启动的每个环境。因此,给我的计划是将 say 复制到libspecial.so并libspecial.so.org创建一个名为的新库libspecial.so,该库将覆盖该函数并与之链接,libspecial.so.org以允许自动加载所有剩余符号。 在对一个小示例库进行的小测试中,这工作得很好。 一个...

Admin

如何判断linux二进制文件是32位还是64位?
elf

如何判断linux二进制文件是32位还是64位?

32 位内核 (x86) 只能运行 32 位代码。64 位内核 (x86_64) 可以运行 32 位和 64 位代码。 我想知道一台机器是否可以运行可执行文件:换句话说,我有一个二进制文件,我必须在 32 位 Ubuntu 上运行它,但我不知道该二进制文件是否是 32 位可执行文件。 我使用了file命令,指定要检查的可执行文件,这是返回的结果: ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.24,BuildID[sha1]=0x7329fa71323a6cd6482...

Admin

搬迁地址计算;极低频
elf

搬迁地址计算;极低频

我正在了解有关搬迁的信息ELF 参考和这个博客,但我无法计算搬迁地址。 假设我们有两个文件A,B类型为ET_REL,我们想要合并它们S在链接期间命名的部分;这些部分包括符号SA(在A文件中)和SB(在B)文件中。如果我们在A.elf和中有重定位条目和重定位偏移量B.elf,我不明白链接器如何避免重定位地址冲突:我假设这些偏移量在A.elf和中可能是相同的B.elf,因为这些文件在编译期间不知道彼此。 ET_EXEC 中重定位表的用途是什么?我不明白为什么需要它。 Rela类型重定位中加数的作用是什么? 我认为最重要的是,我对搬迁的具体步骤没有清晰的...

Admin

为什么 aarch64 ELF 可执行文件可以在 x86_64 机器上运行?
elf

为什么 aarch64 ELF 可执行文件可以在 x86_64 机器上运行?

我在 Raspberry Pi 3 上编译了一个简单的“Hello World”C 程序,然后将其传输到 AMD64 笔记本电脑上。出于好奇,我执行了它,尽管我没有想到它会运行,但它会运行: $ uname -a Linux 15ud490-gx76k 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux $ file hello64 hello64: ELF 64-bit LSB ex...

Admin

为什么linux不能使用$ORIGIN来找到加载器(又名解释器)
elf

为什么linux不能使用$ORIGIN来找到加载器(又名解释器)

在 Linux 上编译二进制文件时,有一个称为 RPATH 的东西,它告诉动态加载器在哪里查找共享对象。我喜欢 RPATH 的一点是,.so如果需要,您可以使用该$ORIGIN属性来提供特定文件,其中加载程序在相对于可执行路径的路径中搜索它。因此,如果我的二进制文件有一个 RPATH,$ORIGIN/.加载程序将在其目录中搜索,这对于分发软件非常有用。 有一个问题,加载器本身必须是硬编码的,所以即使我可以传送所有依赖项,如果加载器错误,也是没有用的。如果我以 musl 加载程序为例,我可以使用类似ld或patchelfto be 的内容设置解释器路径./mu...

Admin

为什么 ELF 中两个部分的偏移量相同?
elf

为什么 ELF 中两个部分的偏移量相同?

最近我注意到几个 ELF 文件中的一些东西在 Linux 下看起来有点可疑。以“/bin/ls”文件为例并在其上运行 readelf 我可以看到以下内容: 有 27 个节头,从偏移量 0x213b8 开始: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000...

Admin

为什么有些 android elf 文件有解释器路径?
elf

为什么有些 android elf 文件有解释器路径?

我正在学习Android的elf文件格式,但是我发现有些elf文件可以通过程序头中的解释器路径指定加载器。然而我通过Android Studio自己写的elf测试文件没有这个属性。这是什么原因呢? 在带有解释器路径的elf文件中,我可以指定自己的加载器链接器来获得更早的elf调试时间,但现在许多文件没有解释器路径。还有其他选择吗? ...

Admin

为什么使用 ld-linux.so 运行程序和使用 patchelf 更改解释器时会得到不同的结果?
elf

为什么使用 ld-linux.so 运行程序和使用 patchelf 更改解释器时会得到不同的结果?

使用 ld + --library-path 运行程序和使用 patchelf 更改加载程序有什么区别? 为了说明这一点,下面是一个无法按原样运行的二进制文件,可能是因为缺少最新版本的库: $ ~/DOWNLOADS/APPS/magick /tmp/.mount_magickXiWzgy/usr/bin/magick: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /tmp/.mount_magickXiWzgy/usr/lib/libMagick...

Admin

为什么我的 32 位程序以 3GB 地址空间模式加载?
elf

为什么我的 32 位程序以 3GB 地址空间模式加载?

我注意到,Manjaro Linux(内核 6.6.8)加载设置了 ADDR_LIMIT_3GB 的 32 位可执行文件。或如:setarch -B --3g。 但我清楚地记得,早些时候情况并非如此,32 位程序以 --4G 模式启动。 它是硬编码在内核中还是可配置的行为?如何改变呢? ...

Admin

为什么解释器的路径硬编码在 ELF 可执行文件中?
elf

为什么解释器的路径硬编码在 ELF 可执行文件中?

(这是一个一般性问题,而不是抱怨——对此可能有一个很好的解释。) 对于已编译的可执行文件,为什么将解释器的路径硬编码到二进制文件中而不是让操作系统决定?即解释器不应该从可执行文件的格式(例如ELF)和体系结构(x86-64)中派生出来。 运行时可以看到解释器路径file /path/to/some-executable: some-executable: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x8...

Admin

我们应该以 ELF 格式还是 zImage 格式启动 FreeBSD 内核?如何?
elf

我们应该以 ELF 格式还是 zImage 格式启动 FreeBSD 内核?如何?

我们刚刚在我们的 Arm(32 位)Chromebook 上虚拟化了 Debian 12。作为主机 / dom0,我们选择了 Devuan 5,对于访客 / domU,我们选择了 Debian 12。它运行得很好。但我们的目标不同。我们想要将 FreeBSD 虚拟化为 domU。我们可以为 FreeBSD arm guest 提供一个可用的 Xen PV 网络驱动程序吗?我发现 Julien Grall 已经将 Xen 驱动程序移植到了 Arm 上的 FreeBSD 上。我想知道 Julien 的工作是否被 FreeBSD 上游接受,在这种情况下,如果我们在...

Admin

为什么“H”/72/0x48 是可执行文件中第二个最常见的字节?
elf

为什么“H”/72/0x48 是可执行文件中第二个最常见的字节?

(如果本题得分为72分,请不要投票!) 我跑了这个: cat /usr/bin/* | perl -ne 'map {$a{$_}++} split//; END{print map { "$a{$_}\t$_\n" } keys %a}' | grep --text . | sort -n | plotpipe --log y {1} 并得到这个: (即使使用对数 y 轴,它看起来仍然是指数的!顶部和底部之间的距离超过 100 倍) 看一下数字: : 31919597 ^H 32983719 ^B 33943030 ...

Admin

ELF 段到段的映射和 RWX 权限
elf

ELF 段到段的映射和 RWX 权限

我有一个使用 gcc 在 Linux 上构建的经典“Hello world”C 程序。构建的二进制文件中的段和部分如下所示: Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align PHDR 0x000040 0x0000000000000040 0x0000000000000040 0x0001f8 0x0001f8 R 0x8 INTERP 0x0...

Admin