|
|
|
@ -98,22 +98,6 @@ void RemoveDebugHook(PageTable& page_table, VAddr base, u64 size, MemoryHookPoin |
|
|
|
page_table.special_regions.subtract(std::make_pair(interval, std::set<SpecialRegion>{region})); |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* This function should only be called for virtual addreses with attribute `PageType::Special`. |
|
|
|
*/ |
|
|
|
static std::set<MemoryHookPointer> GetSpecialHandlers(const PageTable& page_table, VAddr vaddr, |
|
|
|
u64 size) { |
|
|
|
std::set<MemoryHookPointer> result; |
|
|
|
auto interval = boost::icl::discrete_interval<VAddr>::closed(vaddr, vaddr + size - 1); |
|
|
|
auto interval_list = page_table.special_regions.equal_range(interval); |
|
|
|
for (auto it = interval_list.first; it != interval_list.second; ++it) { |
|
|
|
for (const auto& region : it->second) { |
|
|
|
result.insert(region.handler); |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) |
|
|
|
* using a VMA from the current process |
|
|
|
|