为什么 rpmbuild 会重写 elf 标头以及如何阻止它?

问题描述 投票:0回答:1

我有一个精简的规格文件,如下所示:

Name: some-binary
Version: 6.1.0
Release: 1
License: proprietary
Summary: a binary

%description
Whatever

%install
install -d %{buildroot}/fromrpm
cp %{_sourcedir}/thebinary %{buildroot}//fromrpm/thebinary

%files 
/fromrpm/thebinary

然后我跑:

$ cd ~/rpmbuild/

$ rpmbuild -bb SPECS/some-binary.spec 2>/dev/null 
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.gxRpSj
Processing files: some-binary-6.1.0-1.x86_64
Provides: some-binary = 6.1.0-1 some-binary(x86-64) = 6.1.0-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/dspeyer/rpmbuild/BUILDROOT/some-binary-6.1.0-1.x86_64
Wrote: /home/dspeyer/rpmbuild/RPMS/x86_64/some-binary-6.1.0-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.WR3Utx

$ rpm2cpio RPMS/x86_64/some-binary-6.1.0-1.x86_64.rpm | cpio -idmv
./fromrpm/thebinary
41456 blocks

$ readelf -a SOURCES/thebinary | grep rela\\.
  [ 5] .rela.plt         RELA             0000000000400338  00000338
   00     .note.gnu.property .note.gnu.build-id .note.ABI-tag .note.go.buildid .rela.plt 
Relocation section '.rela.plt' at offset 0x338 contains 29 entries:

$ readelf -a fromrpm/thebinary | grep rela\\.
  [ 6] .rela.got.plt     RELA             0000000000000000  0143d048
Relocation section '.rela.got.plt' at offset 0x143d048 contains 29 entries:

我实际上不确定 rela 标签的作用,但我强烈怀疑它们是在 rhel 7.9 上运行时 post-rpm 二进制文件立即崩溃的原因,试图因“静态二进制文件中出现意外的 reloc 类型”而崩溃。是的,二进制文件是静态链接的。 (是的,我确实说过“试图崩溃而崩溃”:__libc_fatal 内的 sigsegv)

有什么想法 rpmbuild 正在尝试做什么,或者如何阻止它?

linux rpm elf rpmbuild relocation
1个回答
0
投票

默认情况下,rpmbuild 会从主二进制文件中删除调试符号,同时将它们放入单独的 -devel 包中。不幸的是,这也剥夺了

© www.soinside.com 2019 - 2024. All rights reserved.