public static void GetStackExtents(out byte *stackBase, out long stackSize) { WinApi.MEMORY_BASIC_INFORMATION info = new WinApi.MEMORY_BASIC_INFORMATION(); WinApi.VirtualQuery(&info, ref info, new IntPtr(sizeof(WinApi.MEMORY_BASIC_INFORMATION))); stackBase = info.AllocationBase; stackSize = (info.BaseAddress - info.AllocationBase) + info.RegionSize.ToInt64(); }
public static List <WinApi.MEMORY_BASIC_INFORMATION> GetRegionsOfStack() { byte *stackBase; long stackSize; GetStackExtents(out stackBase, out stackSize); List <WinApi.MEMORY_BASIC_INFORMATION> result = new List <WinApi.MEMORY_BASIC_INFORMATION>(); byte *current = stackBase; while (current < stackBase + stackSize) { WinApi.MEMORY_BASIC_INFORMATION info = new WinApi.MEMORY_BASIC_INFORMATION(); WinApi.VirtualQuery(current, ref info, new IntPtr(sizeof(WinApi.MEMORY_BASIC_INFORMATION))); result.Add(info); current = info.BaseAddress + info.RegionSize.ToInt64(); } result.Reverse(); return(result); }
public static List<WinApi.MEMORY_BASIC_INFORMATION> GetRegionsOfStack() { byte* stackBase; long stackSize; GetStackExtents(out stackBase, out stackSize); List<WinApi.MEMORY_BASIC_INFORMATION> result = new List<WinApi.MEMORY_BASIC_INFORMATION>(); byte* current = stackBase; while (current < stackBase + stackSize) { WinApi.MEMORY_BASIC_INFORMATION info = new WinApi.MEMORY_BASIC_INFORMATION(); WinApi.VirtualQuery(current, ref info, new IntPtr(sizeof(WinApi.MEMORY_BASIC_INFORMATION))); result.Add(info); current = info.BaseAddress + info.RegionSize.ToInt64(); } result.Reverse(); return result; }
public static void GetStackExtents(out byte* stackBase, out long stackSize) { WinApi.MEMORY_BASIC_INFORMATION info = new WinApi.MEMORY_BASIC_INFORMATION(); WinApi.VirtualQuery(&info, ref info, new IntPtr(sizeof(WinApi.MEMORY_BASIC_INFORMATION))); stackBase = info.AllocationBase; stackSize = (info.BaseAddress - info.AllocationBase) + info.RegionSize.ToInt64(); }