pe: fixed unpack problem in rebuildImports()
This commit is contained in:
parent
28d56bab04
commit
d2c36eefc9
@ -2247,6 +2247,7 @@ void PackArmPe::rebuildImports(upx_byte *& extrainfo)
|
|||||||
import_desc *im = im0;
|
import_desc *im = im0;
|
||||||
upx_byte *dllnames = Obuf + inamespos;
|
upx_byte *dllnames = Obuf + inamespos;
|
||||||
upx_byte *importednames = dllnames + sdllnames;
|
upx_byte *importednames = dllnames + sdllnames;
|
||||||
|
upx_byte * const importednames_start = importednames;
|
||||||
|
|
||||||
for (p = idata; get_le32(p) != 0; ++p)
|
for (p = idata; get_le32(p) != 0; ++p)
|
||||||
{
|
{
|
||||||
@ -2282,7 +2283,7 @@ void PackArmPe::rebuildImports(upx_byte *& extrainfo)
|
|||||||
const unsigned ilen = strlen(++p) + 1;
|
const unsigned ilen = strlen(++p) + 1;
|
||||||
if (inamespos)
|
if (inamespos)
|
||||||
{
|
{
|
||||||
if (ptr_diff(importednames,oimpdlls) & 1)
|
if (ptr_diff(importednames, importednames_start) & 1)
|
||||||
importednames -= 1;
|
importednames -= 1;
|
||||||
omemcpy(importednames + 2, p, ilen);
|
omemcpy(importednames + 2, p, ilen);
|
||||||
//;;;printf(" %s",importednames+2);
|
//;;;printf(" %s",importednames+2);
|
||||||
|
|||||||
@ -2353,6 +2353,7 @@ void PackW32Pe::rebuildImports(upx_byte *& extrainfo)
|
|||||||
import_desc *im = im0;
|
import_desc *im = im0;
|
||||||
upx_byte *dllnames = Obuf + inamespos;
|
upx_byte *dllnames = Obuf + inamespos;
|
||||||
upx_byte *importednames = dllnames + sdllnames;
|
upx_byte *importednames = dllnames + sdllnames;
|
||||||
|
upx_byte * const importednames_start = importednames;
|
||||||
|
|
||||||
for (p = idata; get_le32(p) != 0; ++p)
|
for (p = idata; get_le32(p) != 0; ++p)
|
||||||
{
|
{
|
||||||
@ -2388,8 +2389,7 @@ void PackW32Pe::rebuildImports(upx_byte *& extrainfo)
|
|||||||
const unsigned ilen = strlen(++p) + 1;
|
const unsigned ilen = strlen(++p) + 1;
|
||||||
if (inamespos)
|
if (inamespos)
|
||||||
{
|
{
|
||||||
assert(oimpdlls != NULL); // FIXME
|
if (ptr_diff(importednames, importednames_start) & 1)
|
||||||
if (ptr_diff(importednames,oimpdlls) & 1)
|
|
||||||
importednames -= 1;
|
importednames -= 1;
|
||||||
omemcpy(importednames + 2, p, ilen);
|
omemcpy(importednames + 2, p, ilen);
|
||||||
//;;;printf(" %s",importednames+2);
|
//;;;printf(" %s",importednames+2);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user