Update:

I think I've tracked it down; When cryptopp.dll (FIPS) is loaded into
memory, and a 'new' call is made, cryptopp will check it's static
s_pNew global and if null, then call SetNewAndDeleteFunctionPointers()
which will then register the s_pNew and s_pDelete vars. It will then
optionally call SetNewAndDeleteFromCryptoPP() to send those pointers
over to the instantiating process. This works fine for the first
instance that loads cryptopp but for any subsequent instance that
loads cryptopp, the static s_pNew variable is !null so
SetNewAndDeleteFunctionPointers() is not called and thus
SetNewAndDeleteFromCryptoPP is not called.

What ends up happening is that the new/delete function pointers in
cryptopp are not pushed to the second/third/fourth instantiating
process that loads the DLL. So when the second instantiating process
tries to execute cryptopp code that does new/delete, the pointers are
null and the dll crashes.

Has anyone else seen this behavior?

-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.

Reply via email to