4#ifndef SAFETYHOOK_USE_CXXMODULES
12#include "safetyhook/common.hpp"
20 FAILED_TO_GET_NEXT_THREAD,
21 FAILED_TO_GET_THREAD_CONTEXT,
22 FAILED_TO_SET_THREAD_CONTEXT,
23 FAILED_TO_FREEZE_THREAD,
24 FAILED_TO_UNFREEZE_THREAD,
25 FAILED_TO_GET_THREAD_ID,
33 constexpr bool operator==(
const VmAccess& other)
const {
34 return read == other.read && write == other.write && execute == other.execute;
38constexpr VmAccess VM_ACCESS_R{
true,
false,
false};
39constexpr VmAccess VM_ACCESS_RW{
true,
true,
false};
40constexpr VmAccess VM_ACCESS_RX{
true,
false,
true};
41constexpr VmAccess VM_ACCESS_RWX{
true,
true,
true};
50std::expected<uint8_t*, OsError> SAFETYHOOK_API vm_allocate(uint8_t* address,
size_t size,
VmAccess access);
51void SAFETYHOOK_API vm_free(uint8_t* address);
52std::expected<uint32_t, OsError> SAFETYHOOK_API vm_protect(uint8_t* address,
size_t size,
VmAccess access);
53std::expected<uint32_t, OsError> SAFETYHOOK_API vm_protect(uint8_t* address,
size_t size, uint32_t access);
54std::expected<VmBasicInfo, OsError> SAFETYHOOK_API vm_query(uint8_t* address);
55bool SAFETYHOOK_API vm_is_readable(uint8_t* address,
size_t size);
56bool SAFETYHOOK_API vm_is_writable(uint8_t* address,
size_t size);
57bool SAFETYHOOK_API vm_is_executable(uint8_t* address);
61 uint32_t allocation_granularity;
68using ThreadContext =
void*;
70void SAFETYHOOK_API trap_threads(uint8_t* from, uint8_t* to,
size_t len,
const std::function<
void()>& run_fn);
76void SAFETYHOOK_API fix_ip(ThreadContext ctx, uint8_t* old_ip, uint8_t* new_ip);