More care in ::forward_Shdrs() and ::pack4()

Also, de-compressing arm64 shlib restores .init_array[0],
although supposedly *_RELATIVE relocation should overwrite.

https://github.com/upx/upx/issues/693
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
This commit is contained in:
John Reiser
2023-08-04 11:52:58 -07:00
committed by Markus F.X.J. Oberhumer
parent fa364d6ea3
commit 75e153dd99
2 changed files with 58 additions and 55 deletions
+2 -2
View File
@@ -155,7 +155,7 @@ protected:
virtual int pack2(OutputFile *, Filter &) override; // append compressed data
virtual off_t pack3(OutputFile *, Filter &) override; // append loader
virtual void pack4(OutputFile *, Filter &) override; // append pack header
virtual void forward_Shdrs(OutputFile *fo, Elf32_Ehdr *ehdro);
virtual unsigned forward_Shdrs(OutputFile *fo, Elf32_Ehdr *ehdro);
virtual void unpack(OutputFile *fo) override;
virtual void un_asl_dynsym(unsigned orig_file_size, OutputFile *);
virtual void un_shlib_1(
@@ -319,7 +319,7 @@ protected:
virtual int pack2(OutputFile *, Filter &) override; // append compressed data
virtual off_t pack3(OutputFile *, Filter &) override; // append loader
virtual void pack4(OutputFile *, Filter &) override; // append pack header
virtual void forward_Shdrs(OutputFile *fo, Elf64_Ehdr *ehdro);
virtual unsigned forward_Shdrs(OutputFile *fo, Elf64_Ehdr *ehdro);
virtual void unpack(OutputFile *fo) override;
virtual void un_asl_dynsym(unsigned orig_file_size, OutputFile *);
virtual void un_shlib_1(