diff options
author | Andy Polyakov <appro@openssl.org> | 2005-04-13 08:46:35 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2005-04-13 08:46:35 +0000 |
commit | 51d28013db89b6ebecd0c89bd7f527aeddda0a98 (patch) | |
tree | 1b566427a0de43104837b12198500f4d0970ba3b | |
parent | 8861ba355d20542bc2bb216c92b42ecc88b0a556 (diff) |
Introduce OPENSSL_NONPIC_relocated to denote relocated DLLs.
-rw-r--r-- | crypto/cryptlib.c | 16 | ||||
-rw-r--r-- | crypto/cryptlib.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index b2674b2f22..717c030e4c 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -545,6 +545,7 @@ const char *CRYPTO_get_lock_name(int type) unsigned long OPENSSL_ia32cap_P=0; unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; } +int OPENSSL_NONPIC_relocated=0; #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) #define OPENSSL_CPUID_SETUP @@ -589,6 +590,21 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, { case DLL_PROCESS_ATTACH: OPENSSL_cpuid_setup(); +#if defined(_WIN32_WINNT) + { + IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL; + IMAGE_NT_HEADERS *nt_headers; + + if (dos_header->e_magic==IMAGE_DOS_SIGNATURE) + { + nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header + + dos_header->e_lfanew); + if (nt_headers->Signature==IMAGE_NT_SIGNATURE && + histDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase)) + OPENSSL_NONPIC_relocated=1; + } + } +#endif break; case DLL_THREAD_ATTACH: break; diff --git a/crypto/cryptlib.h b/crypto/cryptlib.h index 1cc3b728b3..93e162a993 100644 --- a/crypto/cryptlib.h +++ b/crypto/cryptlib.h @@ -97,6 +97,7 @@ void OPENSSL_cpuid_setup(void); extern unsigned long OPENSSL_ia32cap_P; void OPENSSL_showfatal(const char *,...); void *OPENSSL_stderr(void); +extern int OPENSSL_NONPIC_relocated; #ifdef __cplusplus } |