diff --git a/src/p_lx_sh.cpp b/src/p_lx_sh.cpp index 89e63408..25a521e3 100644 --- a/src/p_lx_sh.cpp +++ b/src/p_lx_sh.cpp @@ -104,7 +104,11 @@ bool PackLinuxI386sh::getShellName(char *buf) return false; for (int j = 0; NULL != shname[j]; ++j) { if (0 == strcmp(shname[j], bname + 1)) { - return super::canPack(); + bool const s = super::canPack(); + if (s) { + opt->o_unix.blocksize = blocksize = file_size; + } + return s; } } return false; @@ -139,6 +143,13 @@ PackLinuxI386sh::pack1(OutputFile *fo, Filter &) generateElfHdr(fo, linux_i386sh_fold, 0x08048000); } +void +PackLinuxI386sh::pack3(OutputFile *fo, Filter &ft) +{ + super::pack3(fo,ft); + elfout.phdr[0].p_filesz = fo->getBytesWritten(); +} + /* vi:ts=4:et */ diff --git a/src/p_lx_sh.h b/src/p_lx_sh.h index 0839c918..fc806117 100644 --- a/src/p_lx_sh.h +++ b/src/p_lx_sh.h @@ -48,6 +48,7 @@ public: virtual int buildLoader(const Filter *); virtual void pack1(OutputFile *fo, Filter &ft); + virtual void pack3(OutputFile *fo, Filter &ft); virtual bool canPack(); // virtual void unpack(OutputFile *fo) { super::unpack(fo); }