internal static bool InitIPC(Process p) { if (p.ipc != null) { return(false); } Virtual_Regions.Region ipc_region = Program.arch.VirtualRegions.AllocRegion(Program.arch.PageSize, Program.arch.PageSize, p.name.ToString() + " IPC", 0, Virtual_Regions.Region.RegionType.IPC, true); if (ipc_region == null) { return(false); } p.ipc_region = ipc_region; p.ipc = new IPC(); p.ipc.rb = new Collections.RingBuffer <IntPtr>((void *)ipc_region.start, (int)ipc_region.length); p.ipc.owning_process = p; p.ipc.ready = true; return(true); }
public abstract void Init(UIntPtr entry_address, Virtual_Regions.Region stack, Virtual_Regions.Region tls, UIntPtr exit_address, object[] parameters);