diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2021-05-29 01:03:28 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2021-05-29 01:03:28 +0300 |
commit | a38dacc6489ff3c7a0748a01ed7cc2bd0cdaaa7c (patch) | |
tree | de48e7d8b3f9d66c9e11dd048ac9062921b05801 /include/winapi/debug/module.hpp | |
parent | add .clang-tidy, `make check` (diff) | |
download | winapi-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.hpp | 54 |
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 |