Sinker Runtime Library
-
class Action
Subclassed by sinker::ActionInstall, sinker::ActionUninstall
Public Functions
-
virtual void act() = 0
-
virtual void act() = 0
-
class ActionInstall : public sinker::Action
Public Functions
-
inline ActionInstall(Installable *installable)
-
inline virtual void act() override
Private Members
-
Installable *installable = nullptr
-
inline ActionInstall(Installable *installable)
-
class ActionUninstall : public sinker::Action
Public Functions
-
inline ActionUninstall(Uninstallable *uninstallable)
-
inline virtual void act() override
Private Members
-
Uninstallable *uninstallable = nullptr
-
inline ActionUninstall(Uninstallable *uninstallable)
-
class Attributable
Subclassed by sinker::Module, sinker::Symbol
Public Functions
-
std::map<std::string, attribute_value_t, std::less<>> const &get_attributes() const
Private Members
-
std::map<std::string, attribute_value_t, std::less<>> attributes
-
std::map<std::string, attribute_value_t, std::less<>> const &get_attributes() const
-
class BinaryOperatorExpression : private sinker::Expression
Public Functions
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
Private Members
-
std::shared_ptr<Expression> lhs
-
std::shared_ptr<Expression> rhs
-
BinaryOperator binary_operator
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
class Context
Public Functions
-
inline Context()
- template<typename... Args> inline UserOp * emplace_user_op (std::string_view name, expression_value_t(__cdecl *fn)(Args...))
- template<typename... Args> inline UserOp * emplace_user_op (std::string_view name, expression_value_t(__cdecl *fn)(Args...,...))
-
void dump(std::ostream &out) const
-
void dump_def(std::ostream &out) const
-
bool interpret(std::istream &input_stream, Language language, std::string input_filename, bool debug = false)
-
bool interpret(char const *input, std::size_t size, Language language, std::string input_filename, bool debug = false)
-
bool interpret(std::string const &input, Language language, std::string input_filename, bool debug = false)
-
void add_module_tag(std::string const &tag)
-
void add_symbol_tag(std::string const &tag)
-
identifier_set_t const &get_symbol_tags() const
-
~Context()
Private Functions
- UserOp * emplace_user_op_impl (std::string_view name, expression_value_t(__cdecl *fn)(...), std::size_t min_arity, std::optional< std::size_t > max_arity)
-
inline Context()
-
template<typename T>
class Detour : public sinker::Installable, public sinker::Uninstallable
-
class Expression
Subclassed by sinker::BinaryOperatorExpression, sinker::GetProcAddressExpression, sinker::IntegerExpression, sinker::ModuleExpression, sinker::PatternMatchExpression, sinker::SymbolExpression, sinker::UnaryOperatorExpression, sinker::UserOpExpression
Public Functions
-
virtual std::optional<expression_value_t> calculate(Module *symbol) const = 0
-
virtual void dump(std::ostream &out) const = 0
-
inline virtual ~Expression()
-
virtual std::optional<expression_value_t> calculate(Module *symbol) const = 0
-
class GetProcAddressExpression : private sinker::Expression
Public Functions
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
class Installable
Subclassed by sinker::Detour< T >, sinker::Patch< T >
Public Functions
-
virtual void install() = 0
-
virtual void install() = 0
-
class IntegerExpression : private sinker::Expression
Public Functions
-
inline IntegerExpression(expression_value_t value)
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
Private Members
-
expression_value_t value
-
inline IntegerExpression(expression_value_t value)
-
struct MaskedByte
-
class Module : public sinker::Attributable
Public Functions
-
std::string const &get_name() const
-
std::string const &get_real_variant() const
-
bool has_variant(std::string_view name) const
-
void dump(std::ostream &out) const
-
void dump_def(std::ostream &out) const
-
std::optional<expression_value_t> get_preferred_base_address() const
-
std::optional<expression_value_t> get_relocated_base_address() const
-
HMODULE get_hModule() const
-
void add_tag(std::string const &tag)
-
bool concretize()
-
bool is_concrete() const
Private Functions
Private Members
-
std::string name
-
std::optional<std::string> lpModuleName
-
std::optional<expression_value_t> preferred_base_address
-
std::optional<expression_value_t> relocated_base_address
-
std::vector<std::pair<std::string, std::variant<sha256_digest_t, std::shared_ptr<Expression>>>> variants
-
std::string real_variant
-
HMODULE hModule = 0
-
identifier_set_t tags
Friends
- friend class Context
-
std::string const &get_name() const
-
class ModuleExpression : private sinker::Expression
Public Functions
-
inline virtual std::optional<expression_value_t> calculate(Module *_module) const override
-
inline virtual void dump(std::ostream &out) const override
-
inline virtual std::optional<expression_value_t> calculate(Module *_module) const override
-
template<typename T>
class Patch : public sinker::Installable, public sinker::Uninstallable Public Types
-
using pointer_type = std::conditional_t<is_array, value_type*, T*>
Public Functions
-
inline Patch(pointer_type dst, pointer_type src)
-
inline virtual void install() override
-
inline virtual void uninstall() override
Public Static Attributes
Private Functions
-
inline bool make_patch_writable(SIZE_T patch_size, std::vector<ProtectionRegion> ®ions) const
-
inline bool restore_patch_protection(std::vector<ProtectionRegion> const ®ions) const
Private Static Functions
-
static inline DWORD patch_writable_protection(DWORD protection)
-
using pointer_type = std::conditional_t<is_array, value_type*, T*>
-
class PatternMatchExact : private sinker::PatternMatchFragment
Public Functions
-
inline PatternMatchExact(std::vector<std::uint8_t> const &value)
-
inline virtual void *search(void *begin, void *end) const override
-
inline virtual bool begins_with(void *begin, void *end) const override
-
inline virtual std::size_t size() const override
-
inline virtual PatternMatchType type() const override
-
inline virtual bool collision(void *address) const
Private Members
-
std::vector<std::uint8_t> value
-
inline PatternMatchExact(std::vector<std::uint8_t> const &value)
-
class PatternMatchExpression : private sinker::Expression
Public Functions
-
inline PatternMatchExpression(std::vector<MaskedByte> const &needle, expression_value_t offset = 0, std::vector<PatternMatchFilter> const &filters = {})
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
Private Members
-
std::vector<PatternMatchFilter> filters
-
std::vector<MaskedByte> needle
-
expression_value_t offset
-
inline PatternMatchExpression(std::vector<MaskedByte> const &needle, expression_value_t offset = 0, std::vector<PatternMatchFilter> const &filters = {})
-
class PatternMatchFilter
-
class PatternMatchFragment
Subclassed by sinker::PatternMatchExact, sinker::PatternMatchMask, sinker::PatternMatchWildcard
Public Functions
-
inline virtual ~PatternMatchFragment()
-
virtual void *search(void *begin, void *end) const = 0
-
virtual bool begins_with(void *begin, void *end) const = 0
-
virtual bool collision(void *address) const = 0
-
virtual std::size_t size() const = 0
-
virtual PatternMatchType type() const = 0
-
inline virtual ~PatternMatchFragment()
-
class PatternMatchMask : private sinker::PatternMatchFragment
Public Functions
-
inline PatternMatchMask(std::vector<MaskedByte> const &value)
-
inline virtual void *search(void *begin, void *end) const override
-
inline virtual bool begins_with(void *begin, void *end) const override
-
inline virtual std::size_t size() const override
-
inline virtual PatternMatchType type() const override
-
inline virtual bool collision(void *address) const
Private Members
-
std::vector<MaskedByte> value
-
inline PatternMatchMask(std::vector<MaskedByte> const &value)
-
class PatternMatchNeedle
Public Functions
-
inline PatternMatchNeedle(std::vector<MaskedByte> const &needle)
-
inline void *search(void *begin, void *end) const
-
inline virtual bool collision(void *address) const
Private Members
-
std::vector<std::unique_ptr<PatternMatchFragment>> fragments = {}
-
std::size_t size = 0
-
std::size_t offset = 0
-
std::size_t index = 0
-
inline PatternMatchNeedle(std::vector<MaskedByte> const &needle)
-
class PatternMatchWildcard : private sinker::PatternMatchFragment
Public Functions
-
inline PatternMatchWildcard(std::size_t size)
-
inline virtual void *search(void *begin, void *end) const override
-
inline virtual bool begins_with(void *begin, void *end) const override
-
inline virtual std::size_t size() const override
-
inline virtual PatternMatchType type() const override
-
inline virtual bool collision(void *address) const
Private Members
-
std::size_t s
-
inline PatternMatchWildcard(std::size_t size)
-
struct ProtectionRegion
-
template<std::size_t S = 32, std::uint8_t C = 0xEF, bool D = true>
class StackCheck
-
class Symbol : public sinker::Attributable
Public Functions
-
inline std::string const &get_name() const
-
void dump(std::ostream &out) const
-
void dump_def(std::ostream &out) const
-
void add_tag(std::string const &tag)
Private Members
-
std::optional<expression_value_t> cached_calculated_address
-
std::string name
-
std::string type
-
std::vector<std::pair<identifier_set_t, std::shared_ptr<Expression>>> addresses
-
identifier_set_t tags
Friends
- friend class Module
-
inline std::string const &get_name() const
-
class SymbolExpression : private sinker::Expression
Public Functions
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
class Transaction
-
class UnaryOperatorExpression : private sinker::Expression
Public Functions
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
class Uninstallable
Subclassed by sinker::Detour< T >, sinker::Patch< T >
Public Functions
-
virtual void uninstall() = 0
-
virtual void uninstall() = 0
-
class UserOp
Public Functions
-
std::string const &get_name() const
- expression_value_t (__cdecl *get_fn() const)(...)
-
std::size_t get_min_arity() const
-
std::optional<std::size_t> get_max_arity() const
-
bool accepts_arity(std::size_t arity) const
Private Functions
- inline UserOp (std::string_view name, expression_value_t(__cdecl *fn)(...), std::size_t min_arity, std::optional< std::size_t > max_arity)
- expression_value_t (__cdecl *fn)(...)
Friends
- friend class Context
-
std::string const &get_name() const
-
class UserOpExpression : private sinker::Expression
Public Functions
-
inline UserOpExpression(UserOp *user_op, expression_list_t args)
-
inline virtual std::optional<expression_value_t> calculate(Module *module) const override
-
inline virtual void dump(std::ostream &out) const override
Private Functions
-
template<std::size_t... I>
inline std::optional<expression_value_t> invoke_with_indices(std::vector<expression_value_t> const &resolved_args, std::index_sequence<I...>) const
-
template<std::size_t N = 0>
inline std::optional<expression_value_t> invoke_with_runtime_arity(std::vector<expression_value_t> const &resolved_args) const
Private Static Attributes
-
static constexpr std::size_t MAX_ARITY = USER_OP_MAX_ARITY
-
inline UserOpExpression(UserOp *user_op, expression_list_t args)
-
namespace sinker
Typedefs
-
typedef unsigned long long expression_value_t
-
typedef std::variant<expression_value_t, bool, std::string> attribute_value_t
-
typedef std::set<std::string> identifier_set_t
-
typedef std::vector<std::shared_ptr<Expression>> expression_list_t
Enums
-
enum class Type
Values:
-
enumerator None
-
enumerator U8
-
enumerator U16
-
enumerator U32
-
enumerator U64
-
enumerator I8
-
enumerator I16
-
enumerator I32
-
enumerator I64
-
enumerator PTR
-
enumerator None
-
enum class UnaryOperator
Values:
-
enumerator PARENTHESES
-
enumerator INDIRECTION
-
enumerator RELOCATION
-
enumerator BITWISE_NOT
-
enumerator SIZEOF
-
enumerator PARENTHESES
-
enum class BinaryOperator
Values:
-
enumerator ADDITION
-
enumerator SUBTRACTION
-
enumerator MULTIPLICATION
-
enumerator INTEGER_DIVISION
-
enumerator MODULO
-
enumerator BITWISE_AND
-
enumerator BITWISE_OR
-
enumerator BITWISE_XOR
-
enumerator BITWISE_SHIFT_LEFT
-
enumerator BITWISE_SHIFT_RIGHT
-
enumerator ARRAY_SUBSCRIPT
-
enumerator POINTER_PATH
-
enumerator SHORT_CIRCUIT_AND
-
enumerator SHORT_CIRCUIT_OR
-
enumerator ADDITION
Functions
-
std::ostream &operator<<(std::ostream &out, attribute_value_t const &attribute_value)
-
std::ostream &operator<<(std::ostream &os, Expression const &expression)
-
std::optional<expression_value_t> CheckedDereference(expression_value_t value, Type type)
Variables
-
constexpr std::size_t USER_OP_MAX_ARITY = 64
-
typedef unsigned long long expression_value_t
- file sinker.hpp
- #include <Windows.h>#include <cstdio>#include <detours.h>#include <algorithm>#include <cassert>#include <cstddef>#include <cstdint>#include <functional>#include <iomanip>#include <iostream>#include <map>#include <memory>#include <optional>#include <ostream>#include <set>#include <sha256.hpp>#include <string>#include <string_view>#include <type_traits>#include <utility>#include <variant>#include <vector>#include “sinker.tpp”
- dir /home/docs/checkouts/readthedocs.org/user_builds/sinker/checkouts/latest/sinker/include
- dir /home/docs/checkouts/readthedocs.org/user_builds/sinker/checkouts/latest/sinker
- dir /home/docs/checkouts/readthedocs.org/user_builds/sinker/checkouts/latest/sinker/include/sinker