예제 #1
0
        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);
        }
예제 #2
0
 public abstract void Init(UIntPtr entry_address, Virtual_Regions.Region stack, Virtual_Regions.Region tls, UIntPtr exit_address, object[] parameters);