private static unsafe uint sys_brk(int len) { var Process = Scheduler.RunningProcess; uint directory = Process.PageDirectory; uint current = Process.HeapCurrent; uint end = Process.HeapEndAddress; // Assert EAX == sys_brk uint addr = current; current += (uint)len; if (current > 0xA5000000) { Debug.Write("sys_brk failed\n"); return(0); } // Assert end should be page aligned while (current > end) { Paging.AllocateFrame(Paging.GetPage((uint *)directory, end, true), 0, true); Paging.InvalidatePageAt(end); end += Paging.PageSize; } Process.HeapCurrent = current; Process.HeapEndAddress = end; return(addr); }