Add detection for relative dynamic table addresses

This commit is contained in:
Kasper Sauramo
2025-03-20 11:55:09 +02:00
parent 1f10b3b821
commit 32c7d794f1
4 changed files with 36 additions and 48 deletions

View File

@@ -9,15 +9,17 @@ static inline int ptr_in_range(uptr ptr, uptr start, uptr end) {
return ptr >= start && ptr <= end;
}
HiloadResult memory_find_pointer(uptr ptr, struct sc_array_memreg* const regions,
HiloadResult memory_find_pointer(uptr ptr,
struct sc_array_memreg *const regions,
size_t *index) {
for (size_t i = 0; i < sc_array_size(regions); i++) {
if (ptr_in_range(ptr, regions->elems[i].region_start,
regions->elems[i].region_end)) {
if (index) {
uptr start = regions->elems[i].region_start;
uptr end = regions->elems[i].region_end;
if (ptr_in_range(ptr, start, end)) {
if (index)
*index = i;
return HILOAD_OK;
}
sc_log_debug("Pointer match (%p) found in index: %u, range: %p - %p\n", ptr, i, start, end);
return HILOAD_OK;
}
}