|
|
@ -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}));
|
|
|
|
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)
|
|
|
|
* Gets a pointer to the exact memory at the virtual address (i.e. not page aligned)
|
|
|
|
* using a VMA from the current process
|
|
|
|
* using a VMA from the current process
|
|
|
|