summaryrefslogtreecommitdiff
path: root/fipstest.cpp
diff options
context:
space:
mode:
authorweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2003-04-22 00:11:14 +0000
committerweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2003-04-22 00:11:14 +0000
commitff83e8b4651dbde245f089a0d5dc3e97e490bdf9 (patch)
tree83e568361ded1d736ff6be7aff7917e094975b7b /fipstest.cpp
parent3fad9e85ea41905c05f369d56b9a14094847390b (diff)
downloadcryptopp-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.cpp16
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++;
}