summaryrefslogtreecommitdiffstats
path: root/src/cv2pdb.cpp
diff options
context:
space:
mode:
authorAlexWhiter <a.whiter@yandex.ru>2018-04-05 17:21:54 (GMT)
committerAlexWhiter <a.whiter@yandex.ru>2018-04-05 17:21:54 (GMT)
commit833bfaa509c338d9458b3b549194290e78eb7345 (patch)
tree29a34e36d26a27a0db28deee805c3d7f75e1ed07 /src/cv2pdb.cpp
parenta7749963973ea5448ec203602af67a3a69d3138f (diff)
downloadcv2pdb-833bfaa509c338d9458b3b549194290e78eb7345.zip
cv2pdb-833bfaa509c338d9458b3b549194290e78eb7345.tar.gz
cv2pdb-833bfaa509c338d9458b3b549194290e78eb7345.tar.bz2
1. If exe-file consisted of just a disk letter and a file name (i.e. c:file.exe), AV occured.
2. Aligning the debug section offset to the closest 16-byte boundary.
Diffstat (limited to 'src/cv2pdb.cpp')
-rw-r--r--src/cv2pdb.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp
index 84cf5f2..9b7edbf 100644
--- a/src/cv2pdb.cpp
+++ b/src/cv2pdb.cpp
@@ -18,7 +18,7 @@
static const int typePrefix = 4;
CV2PDB::CV2PDB(PEImage& image)
-: img(image), pdb(0), dbi(0), tpi(0), ipi(0), libraries(0), rsds(0), modules(0), globmod(0)
+: img(image), pdb(0), dbi(0), tpi(0), ipi(0), libraries(0), rsds(0), rsdsLen(0), modules(0), globmod(0)
, segMap(0), segMapDesc(0), segFrame2Index(0), globalTypeHeader(0)
, globalTypes(0), cbGlobalTypes(0), allocGlobalTypes(0)
, userTypes(0), cbUserTypes(0), allocUserTypes(0)
@@ -166,7 +166,11 @@ bool CV2PDB::openPDB(const TCHAR* pdbname, const TCHAR* pdbref)
printf("PDB::QueryPdbImplementationVersion() = %d\n", pdb->QueryPdbImplementationVersion());
#endif
- rsds = (OMFSignatureRSDS *) new char[24 + strlen(pdbnameA) + 1]; // sizeof(OMFSignatureRSDS) without name
+ rsdsLen = 24 + strlen(pdbnameA) + 1; // sizeof(OMFSignatureRSDS) without name
+ // Growing the RSDS block to the closest 16-byte boundary.
+ if (rsdsLen & 0xF)
+ rsdsLen = (rsdsLen | 0xF) + 1;
+ rsds = (OMFSignatureRSDS *) new char[rsdsLen];
memcpy (rsds->Signature, "RSDS", 4);
pdb->QuerySignature2(&rsds->guid);
rsds->age = pdb->QueryAge();
@@ -3434,8 +3438,7 @@ bool CV2PDB::addSymbols()
bool CV2PDB::writeImage(const TCHAR* opath, PEImage& exeImage)
{
- int len = sizeof(*rsds) + strlen((char*)(rsds + 1)) + 1;
- if (!exeImage.replaceDebugSection(rsds, len, true))
+ if (!exeImage.replaceDebugSection(rsds, rsdsLen, true))
return setError(exeImage.getLastError());
if (!exeImage.save(opath))