Log debug strings

This commit is contained in:
momo5502
2025-04-07 21:03:57 +02:00
parent 62c972333a
commit 3c58c1af98
4 changed files with 62 additions and 0 deletions

View File

@@ -375,6 +375,18 @@ namespace
NTSTATUS handle_NtSetEvent(const syscall_context& c, const uint64_t handle,
const emulator_object<LONG> previous_state)
{
if (handle == DBWIN_DATA_READY)
{
if (c.proc.dbwin_buffer)
{
constexpr auto pid_length = 4;
const auto debug_data = read_string<char>(c.win_emu.memory, c.proc.dbwin_buffer + pid_length);
c.win_emu.log.info("--> Debug string: %s\n", debug_data.c_str());
}
return STATUS_SUCCESS;
}
auto* entry = c.proc.events.get(handle);
if (!entry)
{
@@ -488,6 +500,7 @@ namespace
{
name = read_unicode_string(
c.emu, emulator_object<UNICODE_STRING<EmulatorTraits<Emu64>>>{c.emu, attributes.ObjectName});
c.win_emu.log.print(color::dark_gray, "--> Mutant name: %s\n", u16_to_u8(name).c_str());
}
}
@@ -580,6 +593,7 @@ namespace
const auto attributes = object_attributes.read();
const auto name =
read_unicode_string(c.emu, reinterpret_cast<UNICODE_STRING<EmulatorTraits<Emu64>>*>(attributes.ObjectName));
c.win_emu.log.print(color::dark_gray, "--> Event name: %s\n", u16_to_u8(name).c_str());
if (name == u"\\KernelObjects\\SystemErrorPortReady")
{
@@ -587,6 +601,18 @@ namespace
return STATUS_SUCCESS;
}
if (name == u"DBWIN_DATA_READY")
{
event_handle.write(DBWIN_DATA_READY.bits);
return STATUS_SUCCESS;
}
if (name == u"DBWIN_BUFFER_READY")
{
event_handle.write(DBWIN_BUFFER_READY.bits);
return STATUS_SUCCESS;
}
for (auto& entry : c.proc.events)
{
if (entry.second.name == name)
@@ -763,6 +789,24 @@ namespace
return STATUS_SUCCESS;
}
if (section_handle == DBWIN_BUFFER)
{
constexpr auto dbwin_buffer_section_size = 0x1000;
const auto address = c.win_emu.memory.find_free_allocation_base(dbwin_buffer_section_size);
c.win_emu.memory.allocate_memory(address, dbwin_buffer_section_size, memory_permission::read_write);
c.proc.dbwin_buffer = address;
if (view_size)
{
view_size.write(dbwin_buffer_section_size);
}
base_address.write(address);
return STATUS_SUCCESS;
}
auto* section_entry = c.proc.sections.get(section_handle);
if (!section_entry)
{
@@ -3537,6 +3581,18 @@ namespace
return STATUS_NOT_SUPPORTED;
}
if (!base_address)
{
return STATUS_INVALID_PARAMETER;
}
if (base_address == c.proc.dbwin_buffer)
{
c.proc.dbwin_buffer = 0;
c.win_emu.memory.release_memory(base_address, 0x1000);
return STATUS_SUCCESS;
}
const auto* mod = c.win_emu.mod_manager.find_by_address(base_address);
if (!mod)
{