mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-18 11:13:57 +00:00
Small fixes and additions
This commit is contained in:
@@ -13,43 +13,43 @@ const T* offset_pointer(const void* data, const size_t offset)
|
||||
return reinterpret_cast<const T*>(static_cast<const uint8_t*>(data) + offset);
|
||||
}
|
||||
|
||||
inline bool is_within_start_and_end(const uint64_t value, const uint64_t start, const uint64_t end)
|
||||
constexpr bool is_within_start_and_end(const uint64_t value, const uint64_t start, const uint64_t end)
|
||||
{
|
||||
return value >= start && value < end;
|
||||
}
|
||||
|
||||
inline bool is_within_start_and_length(const uint64_t value, const uint64_t start, const uint64_t length)
|
||||
constexpr bool is_within_start_and_length(const uint64_t value, const uint64_t start, const uint64_t length)
|
||||
{
|
||||
return is_within_start_and_end(value, start, start + length);
|
||||
}
|
||||
|
||||
inline bool regions_intersect(const uint64_t start1, const uint64_t end1, const uint64_t start2, const uint64_t end2)
|
||||
constexpr bool regions_intersect(const uint64_t start1, const uint64_t end1, const uint64_t start2, const uint64_t end2)
|
||||
{
|
||||
return start1 < end2 && start2 < end1;
|
||||
}
|
||||
|
||||
inline bool regions_with_length_intersect(const uint64_t start1, const uint64_t length1, const uint64_t start2,
|
||||
const uint64_t length2)
|
||||
constexpr bool regions_with_length_intersect(const uint64_t start1, const uint64_t length1, const uint64_t start2,
|
||||
const uint64_t length2)
|
||||
{
|
||||
return regions_intersect(start1, start1 + length1, start2, start2 + length2);
|
||||
}
|
||||
|
||||
inline uint64_t align_down(const uint64_t value, const uint64_t alignment)
|
||||
constexpr uint64_t align_down(const uint64_t value, const uint64_t alignment)
|
||||
{
|
||||
return value & ~(alignment - 1);
|
||||
}
|
||||
|
||||
inline uint64_t align_up(const uint64_t value, const uint64_t alignment)
|
||||
constexpr uint64_t align_up(const uint64_t value, const uint64_t alignment)
|
||||
{
|
||||
return align_down(value + (alignment - 1), alignment);
|
||||
}
|
||||
|
||||
inline uint64_t page_align_down(const uint64_t value, const uint64_t page_size = 0x1000)
|
||||
constexpr uint64_t page_align_down(const uint64_t value, const uint64_t page_size = 0x1000)
|
||||
{
|
||||
return align_down(value, page_size);
|
||||
}
|
||||
|
||||
inline uint64_t page_align_up(const uint64_t value, const uint64_t page_size = 0x1000)
|
||||
constexpr uint64_t page_align_up(const uint64_t value, const uint64_t page_size = 0x1000)
|
||||
{
|
||||
return align_up(value, page_size);
|
||||
}
|
||||
|
||||
@@ -5,22 +5,23 @@
|
||||
// TODO: Replace with pointer handling structure for future 32 bit support
|
||||
using emulator_pointer = uint64_t;
|
||||
|
||||
class x64_emulator_wrapper
|
||||
template<typename T>
|
||||
class object_wrapper
|
||||
{
|
||||
x64_emulator* emu_;
|
||||
T* obj_;
|
||||
|
||||
public:
|
||||
x64_emulator_wrapper(x64_emulator& emu)
|
||||
: emu_(&emu)
|
||||
object_wrapper(T& obj)
|
||||
: obj_(&obj)
|
||||
{
|
||||
}
|
||||
|
||||
x64_emulator& get() const
|
||||
T& get() const
|
||||
{
|
||||
return *this->emu_;
|
||||
return *this->obj_;
|
||||
}
|
||||
|
||||
operator x64_emulator&() const
|
||||
operator T&() const
|
||||
{
|
||||
return this->get();
|
||||
}
|
||||
@@ -34,6 +35,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class windows_emulator;
|
||||
|
||||
using x64_emulator_wrapper = object_wrapper<x64_emulator>;
|
||||
using windows_emulator_wrapper = object_wrapper<windows_emulator>;
|
||||
|
||||
template <typename T>
|
||||
class emulator_object
|
||||
{
|
||||
|
||||
@@ -41,7 +41,7 @@ void syscall_dispatcher::add_handlers()
|
||||
{
|
||||
std::map<std::string, syscall_handler> handler_mapping{};
|
||||
|
||||
this->add_handlers(handler_mapping);
|
||||
syscall_dispatcher::add_handlers(handler_mapping);
|
||||
|
||||
for (auto& entry : this->handlers_)
|
||||
{
|
||||
|
||||
@@ -1051,6 +1051,11 @@ void windows_emulator::deserialize(utils::buffer_deserializer& buffer)
|
||||
return x64_emulator_wrapper{this->emu()};
|
||||
});
|
||||
|
||||
buffer.register_factory<windows_emulator_wrapper>([this]
|
||||
{
|
||||
return windows_emulator_wrapper{*this};
|
||||
});
|
||||
|
||||
buffer.read(this->use_relative_time_);
|
||||
|
||||
this->emu().deserialize(buffer);
|
||||
|
||||
Reference in New Issue
Block a user