コード例 #1
0
        private static int HandleSyscall(L4Handle src, Thread thr, ref Msgtag pt_tag, ref ExceptionRegisters pt_regs)
        {
            /*
             * Make a copy of the registers, as other IPC calls can override
             * the same area.
             */
            ExceptionRegisters exc = pt_regs;
            var scno = exc.eax;

            SyscallProfiler.EnterSyscall(scno);
            var ret = SyscallDispatcher.Dispatch(thr, ref exc);

            if (thr.AsyncReturn)
            {
                return(REPLY_DEFERRED);
            }

            ArchAPI.ReturnFromSyscall(src, ref exc, ret);
            SyscallProfiler.ExitSyscall(scno);

            return(REPLY_DEFERRED);
        }
コード例 #2
0
        private static int HandleMessage(L4Handle src, ref Msgtag tag, ref ExceptionRegisters pt_regs, ref MessageRegisters mr)
        {
            Thread thr;

            if (tag.Label == Msgtag.L4_PROTO_PAGE_FAULT || IsLinuxSyscall(tag, ref pt_regs))
            {
                thr = Globals.Threads.Lookup(src);
                if (thr == null)
                {
                    Console.Write("HandleMessage: Unknown thread ");
                    Console.Write(src._value);
                    Console.Write(" tag=");
                    Console.Write(tag.raw);
                    Console.WriteLine();
                    return(REPLY_DEFERRED);
                }

                thr.AsyncReturn = false;
                if (tag.Label == Msgtag.L4_PROTO_PAGE_FAULT)
                {
                    return(HandlePageFault(src, thr, ref tag, ref mr));
                }
                else
                {
                    return(HandleSyscall(src, thr, ref tag, ref pt_regs));
                }
            }
            else if (tag.Label == (int)Arch.IPCStubs.IPCTag.EXPRESSOS_IPC)
            {
                HandleAsyncCall(ref mr);
                return(REPLY_DEFERRED);
            }
            else if (tag.Label == (int)Arch.IPCStubs.IPCTag.EXPRESSOS_IPC_CMD)
            {
                switch ((IPCCommand)mr.mr0)
                {
                case IPCCommand.EXPRESSOS_CMD_DUMP_PROFILE:
                    SyscallProfiler.Dump();
                    break;

                case IPCCommand.EXPRESSOS_CMD_ENABLE_PROFILER:
                    SyscallProfiler.Enable = true;
                    break;

                case IPCCommand.EXPRESSOS_CMD_DISABLE_PROFILER:
                    SyscallProfiler.Enable = false;
                    break;

                case IPCCommand.EXPRESSOS_CMD_FLUSH_CONSOLE:
                    Console.Flush();
                    break;
                }
                return(REPLY_DEFERRED);
            }
            else
            {
                Console.Write("Unhandled exception tag=");
                Console.Write(tag.raw);
                Console.Write(" exc_trapno=");
                Console.Write(pt_regs.trapno);
                Console.Write(" err=");
                Console.Write(pt_regs.err);
                Console.Write(" eip=");
                Console.Write(pt_regs.ip);
                Console.Write(" sp=");
                Console.Write(pt_regs.sp);
                Console.WriteLine();
            }
            return(REPLY_DEFERRED);
        }
コード例 #3
0
ファイル: Startup.cs プロジェクト: terry2012/expressos
        public static void Start(ref BootParam param)
        {
            Console.WriteLine("Hello from ExpressOS-Managed");

            ArchGlobals.Initialize(ref param);
            Globals.Initialize(ref param);

            SyscallProfiler.Initialize();

            Misc.Initialize();
            FileSystem.Initialize();
            AESManaged.Initialize();
            SHA1Managed.Initialize();

            AndroidApplicationInfo appInfo = new AndroidApplicationInfo();
            var appName = "me.haohui.expressos.browserbench";

            appInfo.PackageName      = appName;
            appInfo.uid              = 1002;
            appInfo.flags            = 0x8be45;
            appInfo.SourceDir        = "/system/app/BrowserBench.apk";
            appInfo.DataDir          = "/data/data/" + appName;
            appInfo.Enabled          = true;
            appInfo.TargetSdkVersion = 10;
            appInfo.Intent           = appName + "/" + appName + ".BrowserActivity";

#if false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/simple-hello"),
            };
            var envp = new ASCIIString[] {
                //new ASCIIString("LD_PRELOAD=/system/lib/libr2.so"),
                //new ASCIIString("HH_DEBUG=1"),
            };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/bench-sqlite"),
                new ASCIIString("/data/data/com.valkyrie/1.db"),
            };
            var envp = new ASCIIString[] { };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/bench-bootanim"),
            };
            var envp = new ASCIIString[] {
                new ASCIIString("CLASSPATH=/system/framework/am.jar"),
                new ASCIIString("PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"),
                new ASCIIString("LD_LIBRARY_PATH=/vendor/lib:/system/lib"),
                new ASCIIString("ANDROID_BOOTLOGO=1"),
                new ASCIIString("ANDROID_ROOT=/system"),
                new ASCIIString("ANDROID_ASSETS=/system/app"),
                new ASCIIString("ANDROID_DATA=/data"),
                new ASCIIString("EXTERNAL_STORAGE=/mnt/sdcard"),
                new ASCIIString("ASEC_MOUNTPOINT=/mnt/asec"),
                new ASCIIString("LOOP_MOUNTPOINT=/mnt/obb"),
                new ASCIIString("BOOTCLASSPATH=/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar"),
                // new ASCIIString("LD_PRELOAD=/system/lib/libr2.so"),
            };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/data/presenter"),
            };
            var envp = new ASCIIString[] {
                new ASCIIString("CLASSPATH=/system/framework/am.jar"),
                new ASCIIString("PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"),
                new ASCIIString("LD_LIBRARY_PATH=/vendor/lib:/system/lib"),
                new ASCIIString("ANDROID_BOOTLOGO=1"),
                new ASCIIString("ANDROID_ROOT=/system"),
                new ASCIIString("ANDROID_ASSETS=/system/app"),
                new ASCIIString("ANDROID_DATA=/data"),
                new ASCIIString("EXTERNAL_STORAGE=/mnt/sdcard"),
                new ASCIIString("ASEC_MOUNTPOINT=/mnt/asec"),
                new ASCIIString("LOOP_MOUNTPOINT=/mnt/obb"),
                new ASCIIString("BOOTCLASSPATH=/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar"),
                new ASCIIString("SLIDES=/data/slides.zip"),
            };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/bench-vbinder"),
            };
            var envp = new ASCIIString[] { };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/xbin/wget"),
                new ASCIIString("http://128.174.236.238"),
            };
            var envp = new ASCIIString[] {
            };
#elif false
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/app_process"),
                new ASCIIString("/system/bin"),
                new ASCIIString("com.android.commands.am.Am"),
                new ASCIIString("start"),
                new ASCIIString("-a"),
                new ASCIIString("android.intent.action.MAIN"),
                new ASCIIString("-n"),
                new ASCIIString("com.valkyrie/com.valkyrie.HelloAndroidActivity"),
            };

            var envp = new ASCIIString[] {
                new ASCIIString("CLASSPATH=/system/framework/am.jar"),
                new ASCIIString("PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"),
                new ASCIIString("LD_LIBRARY_PATH=/vendor/lib:/system/lib"),
                new ASCIIString("ANDROID_BOOTLOGO=1"),
                new ASCIIString("ANDROID_ROOT=/system"),
                new ASCIIString("ANDROID_ASSETS=/system/app"),
                new ASCIIString("ANDROID_DATA=/data"),
                new ASCIIString("EXTERNAL_STORAGE=/mnt/sdcard"),
                new ASCIIString("ASEC_MOUNTPOINT=/mnt/asec"),
                new ASCIIString("LOOP_MOUNTPOINT=/mnt/obb"),
                new ASCIIString("BOOTCLASSPATH=/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar"),
                /*new ASCIIString("HH_DEBUG=1"), */
            };
#elif true
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/app_process"),
                new ASCIIString("/system/bin"),
                new ASCIIString("android.app.ActivityThread"),
            };

            var envp = new ASCIIString[] {
                new ASCIIString("CLASSPATH=/system/framework/am.jar"),
                new ASCIIString("PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"),
                new ASCIIString("LD_LIBRARY_PATH=/vendor/lib:/system/lib"),
                new ASCIIString("ANDROID_BOOTLOGO=1"),
                new ASCIIString("ANDROID_ROOT=/system"),
                new ASCIIString("ANDROID_ASSETS=/system/app"),
                new ASCIIString("ANDROID_DATA=/data"),
                new ASCIIString("EXTERNAL_STORAGE=/mnt/sdcard"),
                new ASCIIString("ASEC_MOUNTPOINT=/mnt/asec"),
                new ASCIIString("LOOP_MOUNTPOINT=/mnt/obb"),
                new ASCIIString("BOOTCLASSPATH=/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar"),
                new ASCIIString("HH_DEBUG=1"),
                /* new ASCIIString("LD_PRELOAD=/libr2.so"), */
            };
#else
            var argv = new ASCIIString[] {
                new ASCIIString("/system/bin/app_process"),
                new ASCIIString("-Xgc:preverify"),
                new ASCIIString("-Xgc:postverify"),
                new ASCIIString("-Xgc:verifycardtable"),
                new ASCIIString("/system/bin"),
                new ASCIIString("android.os.GcTests"),
            };

            var envp = new ASCIIString[] {
                new ASCIIString("CLASSPATH=/system/framework/frameworkcoretests.jar"),
                new ASCIIString("PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin"),
                new ASCIIString("LD_LIBRARY_PATH=/vendor/lib:/system/lib"),
                new ASCIIString("ANDROID_BOOTLOGO=1"),
                new ASCIIString("ANDROID_ROOT=/system"),
                new ASCIIString("ANDROID_ASSETS=/system/app"),
                new ASCIIString("ANDROID_DATA=/data"),
                new ASCIIString("EXTERNAL_STORAGE=/mnt/sdcard"),
                new ASCIIString("ASEC_MOUNTPOINT=/mnt/asec"),
                new ASCIIString("LOOP_MOUNTPOINT=/mnt/obb"),
                new ASCIIString("BOOTCLASSPATH=/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar"),
                new ASCIIString("HH_DEBUG=1"),
                //new ASCIIString("LD_PRELOAD=/libr2.so"),
            };
#endif
            var proc = ExpressOS.Kernel.Exec.CreateProcess(argv[0], argv, envp, appInfo);
            if (proc == null)
            {
                Console.WriteLine("Cannot start init");
            }

            Globals.SecurityManager.OnActiveProcessChanged(proc);

            Console.WriteLine("ExpressOS initialized");
            Looper.ServerLoop();
        }