Added PackUnix::writePackHeader().
committer: mfx <mfx> 979754833 +0000
This commit is contained in:
+1
-4
@@ -401,10 +401,7 @@ void PackLinuxI386elf::pack(OutputFile *fo)
|
|||||||
ph.c_len = total_out;
|
ph.c_len = total_out;
|
||||||
|
|
||||||
// write packheader
|
// write packheader
|
||||||
const int hsize = ph.getPackHeaderSize();
|
writePackHeader(fo);
|
||||||
set_le32(obuf, UPX_MAGIC_LE32); // note: always le32
|
|
||||||
patchPackHeader(obuf, hsize);
|
|
||||||
fo->write(obuf, hsize);
|
|
||||||
|
|
||||||
// write overlay offset (needed for decompression)
|
// write overlay offset (needed for decompression)
|
||||||
set_native32(obuf, lsize);
|
set_native32(obuf, lsize);
|
||||||
|
|||||||
+18
-4
@@ -75,6 +75,23 @@ bool PackUnix::canPack()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PackUnix::writePackHeader(OutputFile *fo)
|
||||||
|
{
|
||||||
|
unsigned char buf[32];
|
||||||
|
memset(buf, 0, sizeof(buf));
|
||||||
|
|
||||||
|
const int hsize = ph.getPackHeaderSize();
|
||||||
|
assert((unsigned)hsize <= sizeof(buf));
|
||||||
|
|
||||||
|
// note: magic constants are always le32
|
||||||
|
set_le32(buf+0, UPX_MAGIC_LE32);
|
||||||
|
set_le32(buf+4, UPX_MAGIC2_LE32);
|
||||||
|
|
||||||
|
patchPackHeader(buf, hsize);
|
||||||
|
fo->write(buf, hsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// Generic Unix pack(). Subclasses must provide patchLoader().
|
// Generic Unix pack(). Subclasses must provide patchLoader().
|
||||||
//
|
//
|
||||||
@@ -186,10 +203,7 @@ void PackUnix::pack(OutputFile *fo)
|
|||||||
ph.c_len = total_out;
|
ph.c_len = total_out;
|
||||||
|
|
||||||
// write packheader
|
// write packheader
|
||||||
const int hsize = ph.getPackHeaderSize();
|
writePackHeader(fo);
|
||||||
set_le32(obuf, UPX_MAGIC_LE32); // note: always le32
|
|
||||||
patchPackHeader(obuf, hsize);
|
|
||||||
fo->write(obuf, hsize);
|
|
||||||
|
|
||||||
// write overlay offset (needed for decompression)
|
// write overlay offset (needed for decompression)
|
||||||
set_native32(obuf, lsize);
|
set_native32(obuf, lsize);
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ protected:
|
|||||||
virtual void patchLoaderChecksum() {}
|
virtual void patchLoaderChecksum() {}
|
||||||
virtual void updateLoader(OutputFile *) = 0;
|
virtual void updateLoader(OutputFile *) = 0;
|
||||||
|
|
||||||
|
virtual void writePackHeader(OutputFile *fo);
|
||||||
|
|
||||||
// in order too share as much code as possible we introduce
|
// in order too share as much code as possible we introduce
|
||||||
// an endian abstraction here
|
// an endian abstraction here
|
||||||
virtual unsigned get_native32(const void *, int off=0) = 0;
|
virtual unsigned get_native32(const void *, int off=0) = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user