Beware overlap when rebuildImports
Based on a hint from a little bird. modified: pefile.cpp
This commit is contained in:
committed by
Markus F.X.J. Oberhumer
parent
e6ccef2cf1
commit
143049922b
+5
-6
@@ -76,6 +76,7 @@ static void xcheck(size_t poff, size_t plen, const void *b, size_t blen)
|
|||||||
#define omemset(a,b,c) OCHECK(a,c), memset(a,b,c)
|
#define omemset(a,b,c) OCHECK(a,c), memset(a,b,c)
|
||||||
#define imemcpy(a,b,c) ICHECK(a,c), memcpy(a,b,c)
|
#define imemcpy(a,b,c) ICHECK(a,c), memcpy(a,b,c)
|
||||||
#define omemcpy(a,b,c) OCHECK(a,c), memcpy(a,b,c)
|
#define omemcpy(a,b,c) OCHECK(a,c), memcpy(a,b,c)
|
||||||
|
#define omemmove(a,b,c) OCHECK(a,c), memmove(a,b,c)
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
@@ -2814,16 +2815,14 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
|
|||||||
if (inamespos)
|
if (inamespos)
|
||||||
{
|
{
|
||||||
// now I rebuild the dll names
|
// now I rebuild the dll names
|
||||||
OCHECK(dllnames, dlen + 1);
|
omemcpy(dllnames, dname, dlen + 1);
|
||||||
strcpy(dllnames, dname);
|
|
||||||
im->dllname = ptr_diff(dllnames,Obuf);
|
im->dllname = ptr_diff(dllnames,Obuf);
|
||||||
//;;;printf("\ndll: %s:",dllnames);
|
//;;;printf("\ndll: %s:",dllnames);
|
||||||
dllnames += dlen + 1;
|
dllnames += dlen + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OCHECK(Obuf + im->dllname, dlen + 1);
|
omemcpy(Obuf + im->dllname, dname, dlen + 1);
|
||||||
strcpy(Obuf + im->dllname, dname);
|
|
||||||
}
|
}
|
||||||
im->iat = iatoffs;
|
im->iat = iatoffs;
|
||||||
if (set_oft)
|
if (set_oft)
|
||||||
@@ -2847,8 +2846,8 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OCHECK(Obuf + (*newiat + 2), ilen + 1);
|
// Beware overlap!
|
||||||
strcpy(Obuf + (*newiat + 2), p);
|
omemmove(Obuf + (*newiat + 2), p, ilen + 1);
|
||||||
}
|
}
|
||||||
p += ilen;
|
p += ilen;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user