aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/winapi/debug/module.hpp
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-05-29 01:03:28 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-05-29 01:03:28 +0300
commita38dacc6489ff3c7a0748a01ed7cc2bd0cdaaa7c (patch)
treede48e7d8b3f9d66c9e11dd048ac9062921b05801 /include/winapi/debug/module.hpp
parentadd .clang-tidy, `make check` (diff)
downloadwinapi-debug-a38dacc6489ff3c7a0748a01ed7cc2bd0cdaaa7c.tar.gz
winapi-debug-a38dacc6489ff3c7a0748a01ed7cc2bd0cdaaa7c.zip
include/pdb/ -> include/winapi/debug/
Diffstat (limited to 'include/winapi/debug/module.hpp')
-rw-r--r--include/winapi/debug/module.hpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/include/winapi/debug/module.hpp b/include/winapi/debug/module.hpp
new file mode 100644
index 0000000..5cfa69d
--- /dev/null
+++ b/include/winapi/debug/module.hpp
@@ -0,0 +1,54 @@
+// Copyright (c) 2017 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "winapi-debug" project.
+// For details, see https://github.com/egor-tensin/winapi-debug.
+// Distributed under the MIT License.
+
+#pragma once
+
+#include "address.hpp"
+
+#include <dbghelp.h>
+#include <windows.h>
+
+#include <string>
+
+namespace pdb {
+
+class ModuleInfo {
+public:
+ typedef IMAGEHLP_MODULEW64 Impl;
+
+ ModuleInfo();
+ explicit ModuleInfo(const Impl& impl);
+
+ explicit operator Impl&() { return impl; }
+ explicit operator const Impl&() const { return impl; }
+
+ Address get_offline_base() const { return impl.BaseOfImage; }
+
+ std::string get_name() const;
+
+private:
+ static Impl create_impl();
+
+ Impl impl;
+};
+
+class Module : public ModuleInfo {
+public:
+ Module(Address online_base, const ModuleInfo& info)
+ : ModuleInfo{info}, online_base{online_base} {}
+
+ Address get_online_base() const { return online_base; }
+
+ Address translate_offline_address(Address offline) const;
+ Address translate_online_address(Address online) const;
+
+private:
+ std::string invalid_offline_address(Address offline) const;
+ std::string invalid_online_address(Address online) const;
+
+ const Address online_base;
+};
+
+} // namespace pdb