DLL Memory Management

From Crypto++ Wiki
Jump to navigation Jump to search

This article discusses DLL Memory Management in the FIPS DLL. Since it is possible for the Crypto++ DLL to delete objects allocated by the calling application, they must use the same C++ memory heap. Three methods are provided to achieve this.

  1. The calling application can tell Crypto++ what heap to use. This method is required when the calling application uses a non-standard heap.
  2. Crypto++ can tell the calling application what heap to use. This method is required when the calling application uses a statically linked C++ Run Time Library. (Method 1 does not work in this case because the Crypto++ DLL is initialized before the calling application's heap is initialized.)
  3. Crypto++ can automatically use the heap provided by the calling application's dynamically linked C++ Run Time Library. The calling application must make sure that the dynamically linked C++ Run Time Library is initialized before Crypto++ is loaded. (At this time it is not clear if it is possible to control the order in which DLLs are initialized on Windows 9x machines, so it might be best to avoid using this method.)

When Crypto++ attaches to a new process, it searches all modules loaded into the process space for exported functions GetNewAndDeleteForCryptoPP and SetNewAndDeleteFromCryptoPP. If one of these functions is found, Crypto++ uses methods 1 or 2, respectively, by calling the function. Otherwise, method 3 is used.

When not observing the above, one will receive the following from Crypto++:

  • Crypto++ was not able to obtain new and delete function pointers