Botan 1.10.17

dyn_load.h
Go to the documentation of this file.
1 /*
2 * Dynamically Loaded Object
3 * (C) 2010 Jack Lloyd
4 *
5 * Distributed under the terms of the Botan license
6 */
7
8 #ifndef BOTAN_DYNAMIC_LOADER_H__
9 #define BOTAN_DYNAMIC_LOADER_H__
10
11 #include <string>
12
13 namespace Botan {
14
15 /**
16 * Represents a DLL or shared object
17 */
18 class Dynamically_Loaded_Library
19 {
20 public:
21 /**
22 * Load a DLL (or fail with an exception)
23 * @param lib_name name or path to a library
24 *
25 * If you don't use a full path, the search order will be defined
26 * by whatever the system linker does by default. Always using fully
27 * qualified pathnames can help prevent code injection attacks (eg
28 * via manipulation of LD_LIBRARY_PATH on Linux)
29 */
30 Dynamically_Loaded_Library(const std::string& lib_name);
31
32 /**
33 * Unload the DLL
34 * @warning Any pointers returned by resolve()/resolve_symbol()
35 * should not be used after this destructor runs.
36 */
37 ~Dynamically_Loaded_Library();
38
39 /**
40 * Load a symbol (or fail with an exception)
41 * @param symbol names the symbol to load
42 * @return address of the loaded symbol
43 */
44 void* resolve_symbol(const std::string& symbol);
45
46 /**
47 * Convenience function for casting symbol to the right type
48 * @param symbol names the symbol to load
49 * @return address of the loaded symbol
50 */
51 template<typename T>
52 T resolve(const std::string& symbol)
53 {
54 #if defined(__GNUC__) && __GNUC__ < 4
55 return (T)(resolve_symbol(symbol));
56 #else
57 return reinterpret_cast<T>(resolve_symbol(symbol));
58 #endif
59 }
60
61 private:
62 Dynamically_Loaded_Library(const Dynamically_Loaded_Library&);
63 Dynamically_Loaded_Library& operator=(const Dynamically_Loaded_Library&);
64
65 std::string lib_name;
66 void* lib;
67 };
68
69 }
70
71 #endif
Botan::Dynamically_Loaded_Library::Dynamically_Loaded_Library
Dynamically_Loaded_Library(const std::string &lib_name)
Definition: dyn_load.cpp:31
Botan::Dynamically_Loaded_Library::~Dynamically_Loaded_Library
~Dynamically_Loaded_Library()
Definition: dyn_load.cpp:52
Botan::Dynamically_Loaded_Library::resolve
T resolve(const std::string &symbol)
Definition: dyn_load.h:52
Botan::Dynamically_Loaded_Library::resolve_symbol
void * resolve_symbol(const std::string &symbol)
Definition: dyn_load.cpp:61
Botan
Definition: algo_base.h:14
Botan::Dynamically_Loaded_Library
Definition: dyn_load.h:18