improve in memory EDC
parent
15ff200298
commit
5b28785cf0
25
fipstest.cpp
25
fipstest.cpp
|
|
@ -239,12 +239,26 @@ void DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleSha
|
||||||
HMODULE h = GetModuleHandle(moduleFilename);
|
HMODULE h = GetModuleHandle(moduleFilename);
|
||||||
IMAGE_DOS_HEADER *ph = (IMAGE_DOS_HEADER *)h;
|
IMAGE_DOS_HEADER *ph = (IMAGE_DOS_HEADER *)h;
|
||||||
IMAGE_NT_HEADERS *phnt = (IMAGE_NT_HEADERS *)((byte *)h + ph->e_lfanew);
|
IMAGE_NT_HEADERS *phnt = (IMAGE_NT_HEADERS *)((byte *)h + ph->e_lfanew);
|
||||||
IMAGE_SECTION_HEADER *phs = (IMAGE_SECTION_HEADER *)((byte *)&phnt->OptionalHeader + phnt->FileHeader.SizeOfOptionalHeader);
|
IMAGE_SECTION_HEADER *phs = IMAGE_FIRST_SECTION(phnt);
|
||||||
DWORD SectionSize = STDMIN(phs->SizeOfRawData, phs->Misc.VirtualSize);
|
DWORD nSections = phnt->FileHeader.NumberOfSections;
|
||||||
|
DWORD currentFilePos = 0;
|
||||||
|
|
||||||
file.TransferTo(verifier, phs->PointerToRawData);
|
while (nSections--)
|
||||||
verifier.Put((const byte *)h + phs->VirtualAddress, SectionSize);
|
{
|
||||||
file.Skip(SectionSize);
|
DWORD sectionSize = STDMIN(phs->SizeOfRawData, phs->Misc.VirtualSize);
|
||||||
|
switch (phs->Characteristics)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
case IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ:
|
||||||
|
case IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ:
|
||||||
|
file.TransferTo(verifier, phs->PointerToRawData - currentFilePos);
|
||||||
|
verifier.Put((const byte *)h + phs->VirtualAddress, sectionSize);
|
||||||
|
file.Skip(sectionSize);
|
||||||
|
currentFilePos = phs->PointerToRawData + sectionSize;
|
||||||
|
}
|
||||||
|
phs++;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
file.TransferAllTo(verifier);
|
file.TransferAllTo(verifier);
|
||||||
|
|
||||||
|
|
@ -253,6 +267,7 @@ void DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleSha
|
||||||
// hash from disk instead
|
// hash from disk instead
|
||||||
if (!verifier.GetLastResult())
|
if (!verifier.GetLastResult())
|
||||||
{
|
{
|
||||||
|
OutputDebugString("In memory EDC test failed. This may be caused by debug breakpoints.");
|
||||||
verifier.Put(expectedModuleSha1Digest, sha.DigestSize());
|
verifier.Put(expectedModuleSha1Digest, sha.DigestSize());
|
||||||
file.Initialize(MakeParameters(Name::InputFileName(), moduleFilename));
|
file.Initialize(MakeParameters(Name::InputFileName(), moduleFilename));
|
||||||
file.TransferAllTo(verifier);
|
file.TransferAllTo(verifier);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue