mirror of https://github.com/x64dbg/GleeBug
better error checking
This commit is contained in:
parent
e152448267
commit
a508dc2796
|
|
@ -71,16 +71,18 @@ namespace GleeBug
|
||||||
|
|
||||||
mDosNtOverlap = true;
|
mDosNtOverlap = true;
|
||||||
mOffset = newOffset;
|
mOffset = newOffset;
|
||||||
|
mAfterDosData = readRegion<uint8>(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//read & verify the data between the DOS header and the NT headers
|
//read & verify the data between the DOS header and the NT headers
|
||||||
auto afterDosCount = newOffset - mOffset;
|
auto afterDosCount = newOffset - mOffset;
|
||||||
mAfterDosData = readRegion<uint8>(afterDosCount);
|
mAfterDosData = readRegion<uint8>(afterDosCount);
|
||||||
if (!mAfterDosData)
|
|
||||||
return ErrorAfterDosHeaderData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mAfterDosData)
|
||||||
|
return ErrorAfterDosHeaderData;
|
||||||
|
|
||||||
//read & verify the signature
|
//read & verify the signature
|
||||||
auto signature = readRegion<DWORD>();
|
auto signature = readRegion<DWORD>();
|
||||||
if (!signature)
|
if (!signature)
|
||||||
|
|
@ -156,8 +158,13 @@ namespace GleeBug
|
||||||
return ErrorNtFileHeaderSizeOfOptionalHeaderOverlap;
|
return ErrorNtFileHeaderSizeOfOptionalHeaderOverlap;
|
||||||
|
|
||||||
//read data after the optional header (TODO: check if this is even possible)
|
//read data after the optional header (TODO: check if this is even possible)
|
||||||
uint32 afterOptionalCount = sizeOfIoh > realSizeOfIoh ? sizeOfIoh - realSizeOfIoh : 0;
|
uint32 afterOptionalSize = realSizeOfIoh < sizeOfIoh ? sizeOfIoh - realSizeOfIoh : 0;
|
||||||
mAfterOptionalData = readRegion<uint8>(afterOptionalCount);
|
mAfterOptionalData = readRegion<uint8>(afterOptionalSize);
|
||||||
|
if (!mAfterOptionalData)
|
||||||
|
{
|
||||||
|
printf("realSizeOfIoh: %u, sizeOfIoh: %u, afterOptionalSize: %u\n", realSizeOfIoh, sizeOfIoh, afterOptionalSize);
|
||||||
|
return ErrorAfterOptionalHeaderDataRead;
|
||||||
|
}
|
||||||
|
|
||||||
//read the section headers
|
//read the section headers
|
||||||
mSectionHeaders = readRegion<IMAGE_SECTION_HEADER>(numberOfSections);
|
mSectionHeaders = readRegion<IMAGE_SECTION_HEADER>(numberOfSections);
|
||||||
|
|
@ -201,8 +208,10 @@ namespace GleeBug
|
||||||
|
|
||||||
//get after section headers data
|
//get after section headers data
|
||||||
auto firstRawAddress = sortedHeaders[0].header.PointerToRawData;
|
auto firstRawAddress = sortedHeaders[0].header.PointerToRawData;
|
||||||
if (mOffset < firstRawAddress)
|
auto afterDataSize = mOffset < firstRawAddress ? firstRawAddress - mOffset : 0;
|
||||||
mAfterSectionHeadersData = readRegion<uint8>(firstRawAddress - mOffset);
|
mAfterSectionHeadersData = readRegion<uint8>(afterDataSize);
|
||||||
|
if (!mAfterSectionHeadersData)
|
||||||
|
return ErrorAfterSectionHeadersDataRead;
|
||||||
|
|
||||||
//read the actual section data.
|
//read the actual section data.
|
||||||
for (auto & section : sortedHeaders)
|
for (auto & section : sortedHeaders)
|
||||||
|
|
@ -236,6 +245,8 @@ namespace GleeBug
|
||||||
|
|
||||||
uint32 Pe::readData(uint32 size)
|
uint32 Pe::readData(uint32 size)
|
||||||
{
|
{
|
||||||
|
if (!size)
|
||||||
|
return mOffset;
|
||||||
std::vector<uint8> temp(size);
|
std::vector<uint8> temp(size);
|
||||||
|
|
||||||
if (!mFile.Read(mOffset, temp.data(), size))
|
if (!mFile.Read(mOffset, temp.data(), size))
|
||||||
|
|
@ -264,8 +275,10 @@ namespace GleeBug
|
||||||
mErrorMap.insert({ ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize, "ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize" });
|
mErrorMap.insert({ ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize, "ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize" });
|
||||||
mErrorMap.insert({ ErrorNtOptionalHeaderRead, "ErrorNtOptionalHeaderRead" });
|
mErrorMap.insert({ ErrorNtOptionalHeaderRead, "ErrorNtOptionalHeaderRead" });
|
||||||
mErrorMap.insert({ ErrorNtOptionalHeaderMagic, "ErrorNtOptionalHeaderMagic" });
|
mErrorMap.insert({ ErrorNtOptionalHeaderMagic, "ErrorNtOptionalHeaderMagic" });
|
||||||
|
mErrorMap.insert({ ErrorAfterOptionalHeaderDataRead, "ErrorAfterOptionalHeaderDataRead" });
|
||||||
mErrorMap.insert({ ErrorNtHeadersRegionSize, "ErrorNtHeadersRegionSize" });
|
mErrorMap.insert({ ErrorNtHeadersRegionSize, "ErrorNtHeadersRegionSize" });
|
||||||
mErrorMap.insert({ ErrorSectionHeadersRead, "ErrorSectionHeadersRead" });
|
mErrorMap.insert({ ErrorSectionHeadersRead, "ErrorSectionHeadersRead" });
|
||||||
|
mErrorMap.insert({ ErrorAfterSectionHeadersDataRead, "ErrorAfterSectionHeadersDataRead" });
|
||||||
mErrorMap.insert({ ErrorBeforeSectionDataRead, "ErrorBeforeSectionDataRead" });
|
mErrorMap.insert({ ErrorBeforeSectionDataRead, "ErrorBeforeSectionDataRead" });
|
||||||
mErrorMap.insert({ ErrorSectionDataRead, "ErrorSectionDataRead" });
|
mErrorMap.insert({ ErrorSectionDataRead, "ErrorSectionDataRead" });
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,10 @@ namespace GleeBug
|
||||||
ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize,
|
ErrorNtFileHeaderUnsupportedMachineNtHeadersRegionSize,
|
||||||
ErrorNtOptionalHeaderRead,
|
ErrorNtOptionalHeaderRead,
|
||||||
ErrorNtOptionalHeaderMagic,
|
ErrorNtOptionalHeaderMagic,
|
||||||
|
ErrorAfterOptionalHeaderDataRead,
|
||||||
ErrorNtHeadersRegionSize,
|
ErrorNtHeadersRegionSize,
|
||||||
ErrorSectionHeadersRead,
|
ErrorSectionHeadersRead,
|
||||||
|
ErrorAfterSectionHeadersDataRead,
|
||||||
ErrorBeforeSectionDataRead,
|
ErrorBeforeSectionDataRead,
|
||||||
ErrorSectionDataRead
|
ErrorSectionDataRead
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ static void testCorkami()
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
testPeFile(L"C:\\test64.exe");
|
//testPeFile(L"C:\\test64.exe");
|
||||||
testCorkami();
|
testCorkami();
|
||||||
puts("");
|
puts("");
|
||||||
system("pause");
|
system("pause");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue