De-compress (upx -d) for ELF pageholes
modified: p_lx_elf.cpp
This commit is contained in:
committed by
Markus F.X.J. Oberhumer
parent
2f453acf5d
commit
963392a5ae
+14
-2
@@ -4656,7 +4656,13 @@ void PackLinuxElf64::unpack(OutputFile *fo)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_shlib
|
if (0x1000==get_te64(&phdri[0].p_filesz) // detect C_BASE style
|
||||||
|
&& 0==get_te64(&phdri[1].p_offset)
|
||||||
|
&& 0==get_te64(&phdri[0].p_offset)
|
||||||
|
&& get_te64(&phdri[1].p_filesz) == get_te64(&phdri[1].p_memsz)) {
|
||||||
|
fi->seek(up4(get_te64(&phdr[1].p_memsz)), SEEK_SET); // past the loader
|
||||||
|
}
|
||||||
|
else if (is_shlib
|
||||||
|| ((unsigned)(get_te64(&ehdri.e_entry) - load_va) + up4(lsize) +
|
|| ((unsigned)(get_te64(&ehdri.e_entry) - load_va) + up4(lsize) +
|
||||||
ph.getPackHeaderSize() + sizeof(overlay_offset))
|
ph.getPackHeaderSize() + sizeof(overlay_offset))
|
||||||
< up4(file_size)) {
|
< up4(file_size)) {
|
||||||
@@ -5708,7 +5714,13 @@ void PackLinuxElf32::unpack(OutputFile *fo)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_shlib
|
if (0x1000==get_te32(&phdri[0].p_filesz) // detect C_BASE style
|
||||||
|
&& 0==get_te32(&phdri[1].p_offset)
|
||||||
|
&& 0==get_te32(&phdri[0].p_offset)
|
||||||
|
&& get_te32(&phdri[1].p_filesz) == get_te32(&phdri[1].p_memsz)) {
|
||||||
|
fi->seek(up4(get_te32(&phdr[1].p_memsz)), SEEK_SET); // past the loader
|
||||||
|
}
|
||||||
|
else if (is_shlib
|
||||||
|| ((unsigned)(get_te32(&ehdri.e_entry) - load_va) + up4(lsize) +
|
|| ((unsigned)(get_te32(&ehdri.e_entry) - load_va) + up4(lsize) +
|
||||||
ph.getPackHeaderSize() + sizeof(overlay_offset))
|
ph.getPackHeaderSize() + sizeof(overlay_offset))
|
||||||
< up4(file_size)) {
|
< up4(file_size)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user