#include "common/common.h" // IWYU pragma: no_include // IWYU pragma: no_include // IWYU pragma: no_include // IWYU pragma: no_include // IWYU pragma: no_include #if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS // #error "KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS" #else #include // IWYU pragma: keep #include "common/assert.h" #include "common/platform/sysDbg.h" void SysStackUsage(sys_dbg_stack_info_t& s) { MEMORY_BASIC_INFORMATION mbi {}; [[maybe_unused]] size_t ss = VirtualQuery(&mbi, &mbi, sizeof(mbi)); EXIT_IF(ss == 0); PVOID reserved = mbi.AllocationBase; ss = VirtualQuery(reserved, &mbi, sizeof(mbi)); EXIT_IF(ss == 0); size_t reserved_size = mbi.RegionSize; ss = VirtualQuery(static_cast(reserved) + reserved_size, &mbi, sizeof(mbi)); EXIT_IF(ss == 0); void* guard_page = mbi.BaseAddress; size_t guard_page_size = mbi.RegionSize; ss = VirtualQuery(static_cast(guard_page) + guard_page_size, &mbi, sizeof(mbi)); EXIT_IF(ss == 0); void* commited = mbi.BaseAddress; size_t commited_size = mbi.RegionSize; s.reserved_addr = reinterpret_cast(reserved); s.reserved_size = reserved_size; s.guard_addr = reinterpret_cast(guard_page); s.guard_size = guard_page_size; s.commited_addr = reinterpret_cast(commited); s.commited_size = commited_size; s.addr = s.reserved_addr; s.total_size = s.reserved_size + s.guard_size + s.commited_size; } #endif