diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-04-22 00:11:14 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-04-22 00:11:14 +0000 |
commit | ff83e8b4651dbde245f089a0d5dc3e97e490bdf9 (patch) | |
tree | 83e568361ded1d736ff6be7aff7917e094975b7b /fipstest.cpp | |
parent | 3fad9e85ea41905c05f369d56b9a14094847390b (diff) | |
download | cryptopp-ff83e8b4651dbde245f089a0d5dc3e97e490bdf9.tar.gz |
fix in memory EDC test - IAT issue
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@60 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'fipstest.cpp')
-rw-r--r-- | fipstest.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fipstest.cpp b/fipstest.cpp index d0fe1e1..63727c2 100644 --- a/fipstest.cpp +++ b/fipstest.cpp @@ -252,10 +252,20 @@ void DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleSha 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); + const byte *memStart = (const byte *)h + phs->VirtualAddress; + DWORD fileStart = phs->PointerToRawData; + if (phs->VirtualAddress == phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress) + { + // read IAT, which is changed during DLL loading, from disk + DWORD iatSize = phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size; + fileStart += iatSize; + memStart += iatSize; + sectionSize -= iatSize; + } + file.TransferTo(verifier, fileStart - currentFilePos); + verifier.Put(memStart, sectionSize); file.Skip(sectionSize); - currentFilePos = phs->PointerToRawData + sectionSize; + currentFilePos = fileStart + sectionSize; } phs++; } |