WIP unpacking ELF shared library
modified: Makefile modified: lzma-sdk modified: p_lx_elf.cpp modified: p_lx_elf.h modified: p_mach.cpp modified: p_unix.cpp modified: p_unix.h modified: packer.cpp modified: packer.h modified: stub/arm64-linux.elf-fold.h modified: stub/src/arm64-linux.elf-fold.S modified: stub/tmp/arm64-linux.elf-fold.map
This commit is contained in:
committed by
Markus F.X.J. Oberhumer
parent
fd6837b267
commit
23f63e4196
+8
-1
@@ -523,6 +523,7 @@ void PackUnix::unpackExtent(unsigned wanted, OutputFile *fo,
|
||||
// Generic Unix canUnpack().
|
||||
**************************************************************************/
|
||||
|
||||
// The prize is the value of overlay_offset: the offset of compressed data
|
||||
int PackUnix::canUnpack()
|
||||
{
|
||||
int const small = 32 + sizeof(overlay_offset);
|
||||
@@ -534,6 +535,13 @@ int PackUnix::canUnpack()
|
||||
|
||||
fi->seek(-(off_t)bufsize, SEEK_END);
|
||||
fi->readx(buf, bufsize);
|
||||
return find_overlay_offset(buf);
|
||||
}
|
||||
|
||||
int PackUnix::find_overlay_offset(MemBuffer const &buf)
|
||||
{
|
||||
int const small = 32 + sizeof(overlay_offset);
|
||||
int const bufsize = buf.getSize();
|
||||
int i = bufsize;
|
||||
while (i > small && 0 == buf[--i]) { }
|
||||
i -= small;
|
||||
@@ -551,7 +559,6 @@ int PackUnix::canUnpack()
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// Generic Unix unpack().
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user