Log overlapping object access

This commit is contained in:
momo5502
2025-08-17 17:52:50 +02:00
parent 2192d10828
commit 0e92b04ef9
2 changed files with 72 additions and 25 deletions

View File

@@ -31,14 +31,34 @@ emulator_hook* watch_object(windows_emulator& emu, const std::set<std::string, s
}
}
const auto offset = address - object.value();
const auto start_offset = address - object.value();
const auto end_offset = start_offset + size;
const auto* mod_name = mod ? mod->name.c_str() : "<N/A>";
const auto& type_name = i.get_type_name();
const auto member_name = i.get_member_name(static_cast<size_t>(offset));
emu.log.print(is_main_access ? color::green : color::dark_gray,
"Object access: %s - 0x%" PRIx64 " 0x%zx (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset, size,
member_name.c_str(), rip, mod_name);
for (auto offset = start_offset; offset < end_offset;)
{
const auto member_info = i.get_member_info(static_cast<size_t>(offset));
if (!member_info.has_value())
{
const auto remaining_size = end_offset - offset;
emu.log.print(is_main_access ? color::green : color::dark_gray,
"Object access: %s - 0x%" PRIx64 " 0x%" PRIx64 " (<N/A>) at 0x%" PRIx64 " (%s)\n", type_name.c_str(),
offset, remaining_size, rip, mod_name);
break;
}
const auto remaining_size = end_offset - offset;
const auto member_end = member_info->offset + member_info->size;
const auto member_access_size = member_end - offset;
const auto access_size = std::min(remaining_size, member_access_size);
emu.log.print(is_main_access ? color::green : color::dark_gray,
"Object access: %s - 0x%" PRIx64 " 0x%" PRIx64 " (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset,
access_size, member_info->get_diff_name(static_cast<size_t>(offset)).c_str(), rip, mod_name);
offset = member_end;
}
});
}