https://sourceware.org/bugzilla/show_bug.cgi?id=33232
Bug ID: 33232
Summary: strip fails to recognize/check binary architecture
Product: binutils
Version: 2.45
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: udo at hypervisor dot org
Target Milestone: ---
Up to and including binutils-2.44, the strip utility, when applied to a binary
of a different architecture, stated
strip: Unable to recognise the format of the input file `foo'
and it did not touch that binary.
Starting with binutils 2.45, that check seems to be gone or broken and a binary
of a different architecture is instead rendered unusable.
readelf -h foo
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x404740
Start of program headers: 64 (bytes into file)
Start of section headers: 7121848 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 14
Size of section headers: 64 (bytes)
Number of section headers: 39
Section header string table index: 38
./aarch64-linux-strip foo
readelf -h foo
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: None
Version: 0x1
Entry point address: 0x404740
Start of program headers: 64 (bytes into file)
Start of section headers: 1339720 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 14
Size of section headers: 64 (bytes)
Number of section headers: 29
Section header string table index: 28
Note that the machine field in the ELF header has been erased and the binary is
now unusable:
-bash: ./foo: cannot execute binary file: Exec format error
This can be reproduced as follows:
../binutils-2.45/configure --prefix=/opt/foo --with-sysroot
--target=aarch64-linux --disable-multilib
which builds binutils on x86_64 (host) for aarch64 (target). When
./aarch64-linux-strip (an x86_64 binary) is applied to itself, it gets broken.
--
You are receiving this mail because:
You are on the CC list for the bug.