Some more cleanups.
committer: mfx <mfx> 978191791 +0000
This commit is contained in:
+9
-9
@@ -85,14 +85,14 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
|
|||||||
oh.headsize16 = 2;
|
oh.headsize16 = 2;
|
||||||
oh.ip = 0;
|
oh.ip = 0;
|
||||||
|
|
||||||
unsigned destpara = (ph.u_len + ph.overlap_overhead - ph.c_len + 31) / 16;
|
oh.sp = ih.sp > 0x200 ? ih.sp : 0x200;
|
||||||
|
|
||||||
|
unsigned destpara = (ph.u_len + ph.overlap_overhead - ph.c_len + 31) / 16;
|
||||||
oh.ss = ph.c_len/16 + destpara;
|
oh.ss = ph.c_len/16 + destpara;
|
||||||
if (ih.ss*16 + ih.sp < 0x100000 && ih.ss > oh.ss && ih.sp > 0x200)
|
if (ih.ss*16 + ih.sp < 0x100000 && ih.ss > oh.ss && ih.sp > 0x200)
|
||||||
oh.ss = ih.ss;
|
oh.ss = ih.ss;
|
||||||
oh.sp = ih.sp > 0x200 ? ih.sp : 0x200;
|
if (oh.ss*16 + 0x50 < ih.ss*16 + ih.sp
|
||||||
if (oh.ss*16u + 0x50 < ih.ss*16u + ih.sp
|
&& oh.ss*16 + 0x200 > ih.ss*16 + ih.sp)
|
||||||
&& oh.ss*16u + 0x200 > ih.ss*16u + ih.sp)
|
|
||||||
oh.ss += 0x20;
|
oh.ss += 0x20;
|
||||||
|
|
||||||
if (oh.ss != ih.ss)
|
if (oh.ss != ih.ss)
|
||||||
@@ -398,8 +398,6 @@ void PackExe::pack(OutputFile *fo)
|
|||||||
if (ph.max_run_found + ph.max_match_found > 0x8000)
|
if (ph.max_run_found + ph.max_match_found > 0x8000)
|
||||||
throwCantPack("decompressor limit exceeded, send a bugreport");
|
throwCantPack("decompressor limit exceeded, send a bugreport");
|
||||||
|
|
||||||
ph.overlap_overhead = findOverlapOverhead(obuf,32);
|
|
||||||
|
|
||||||
#ifdef TESTING
|
#ifdef TESTING
|
||||||
if (opt->debug)
|
if (opt->debug)
|
||||||
{
|
{
|
||||||
@@ -411,8 +409,10 @@ void PackExe::pack(OutputFile *fo)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int flag = fillExeHeader(&oh);
|
ph.overlap_overhead = findOverlapOverhead(obuf,32);
|
||||||
const unsigned lsize = buildLoader(&ft);
|
const unsigned lsize = buildLoader(&ft);
|
||||||
|
int flag = fillExeHeader(&oh);
|
||||||
|
|
||||||
MemBuffer loader(lsize);
|
MemBuffer loader(lsize);
|
||||||
memcpy(loader,getLoader(),lsize);
|
memcpy(loader,getLoader(),lsize);
|
||||||
//OutputFile::dump("xxloader.dat", loader, lsize);
|
//OutputFile::dump("xxloader.dat", loader, lsize);
|
||||||
@@ -428,8 +428,8 @@ void PackExe::pack(OutputFile *fo)
|
|||||||
|
|
||||||
// set oh.min & oh.max
|
// set oh.min & oh.max
|
||||||
ic = ih.min*16 + ih_imagesize;
|
ic = ih.min*16 + ih_imagesize;
|
||||||
if (ic < oh.ss*16u + oh.sp)
|
if (ic < oh.ss*16 + oh.sp)
|
||||||
ic = oh.ss*16u + oh.sp;
|
ic = oh.ss*16 + oh.sp;
|
||||||
oh.min = (ic - (packedsize + lsize)) / 16;
|
oh.min = (ic - (packedsize + lsize)) / 16;
|
||||||
ic = oh.min + (ih.max - ih.min);
|
ic = oh.min + (ih.max - ih.min);
|
||||||
oh.max = ic < 0xffff && ih.max != 0xffff ? ic : 0xffff;
|
oh.max = ic < 0xffff && ih.max != 0xffff ? ic : 0xffff;
|
||||||
|
|||||||
+12
-3
@@ -38,7 +38,7 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
PackHeader::PackHeader() :
|
PackHeader::PackHeader() :
|
||||||
version(-1), format(-1), filter(0), filter_cto(0), overlap_overhead(0)
|
version(-1), format(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +108,7 @@ void PackHeader::putPackHeader(upx_bytep p)
|
|||||||
throwBadLoader();
|
throwBadLoader();
|
||||||
#else
|
#else
|
||||||
assert(get_le32(p) == UPX_MAGIC_LE32);
|
assert(get_le32(p) == UPX_MAGIC_LE32);
|
||||||
|
int size = 0;
|
||||||
|
|
||||||
p[4] = (unsigned char) version;
|
p[4] = (unsigned char) version;
|
||||||
p[5] = (unsigned char) format;
|
p[5] = (unsigned char) format;
|
||||||
@@ -124,13 +125,19 @@ void PackHeader::putPackHeader(upx_bytep p)
|
|||||||
set_le16(p+16,u_len);
|
set_le16(p+16,u_len);
|
||||||
set_le16(p+18,c_len);
|
set_le16(p+18,c_len);
|
||||||
p[20] = (unsigned char) filter;
|
p[20] = (unsigned char) filter;
|
||||||
|
size = 22;
|
||||||
}
|
}
|
||||||
else if (format == UPX_F_DOS_EXE || format == UPX_F_DOS_EXEH)
|
else if (format == UPX_F_DOS_EXE)
|
||||||
{
|
{
|
||||||
set_le24(p+16,u_len);
|
set_le24(p+16,u_len);
|
||||||
set_le24(p+19,c_len);
|
set_le24(p+19,c_len);
|
||||||
set_le24(p+22,u_file_size);
|
set_le24(p+22,u_file_size);
|
||||||
p[25] = (unsigned char) filter;
|
p[25] = (unsigned char) filter;
|
||||||
|
size = 27;
|
||||||
|
}
|
||||||
|
else if (format == UPX_F_DOS_EXEH)
|
||||||
|
{
|
||||||
|
throwInternalError("invalid format");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -140,6 +147,7 @@ void PackHeader::putPackHeader(upx_bytep p)
|
|||||||
p[28] = (unsigned char) filter;
|
p[28] = (unsigned char) filter;
|
||||||
p[29] = (unsigned char) filter_cto;
|
p[29] = (unsigned char) filter_cto;
|
||||||
p[30] = 0;
|
p[30] = 0;
|
||||||
|
size = 32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -152,10 +160,11 @@ void PackHeader::putPackHeader(upx_bytep p)
|
|||||||
p[28] = (unsigned char) filter;
|
p[28] = (unsigned char) filter;
|
||||||
p[29] = (unsigned char) filter_cto;
|
p[29] = (unsigned char) filter_cto;
|
||||||
p[30] = 0;
|
p[30] = 0;
|
||||||
|
size = 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store header_checksum
|
// store header_checksum
|
||||||
const int size = getPackHeaderSize();
|
assert(size == getPackHeaderSize());
|
||||||
p[size - 1] = get_packheader_checksum(p, size - 1);
|
p[size - 1] = get_packheader_checksum(p, size - 1);
|
||||||
#endif /* UNUPX */
|
#endif /* UNUPX */
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user