Пример #1
0
        protected Action<CpuThreadState> CreateDelegate(HleModuleManager ModuleManager, HleModuleHost Module, uint NID, string ModuleImportName, string NIDName)
        {
            Action<CpuThreadState> Callback = null;
            if (Module != null)
            {
                Callback = Module.DelegatesByNID.GetOrDefault(NID, null);
            }

            return (CpuThreadState) =>
            {
                if (Callback == null)
                {
                    if (CpuThreadState.CpuProcessor.PspConfig.DebugSyscalls)
                    {
                        Console.WriteLine(
                            "Thread({0}:'{1}'):{2}:{3}",
                            PspEmulatorContext.GetInstance<HleThreadManager>().Current.Id,
                            PspEmulatorContext.GetInstance<HleThreadManager>().Current.Name,
                            ModuleImportName, NIDName
                        );
                    }
                    throw (new NotImplementedException("Not Implemented '" + String.Format("{0}:{1}", ModuleImportName, NIDName) + "'"));
                }
                else
                {
                    Callback(CpuThreadState);
                }
            };
        }
Пример #2
0
        private void _UpdateModuleImports()
        {
            var ImportsStream = ElfLoader.MemoryStream.SliceWithBounds(ModuleInfo.ImportsStart + BaseAddress, ModuleInfo.ImportsEnd + BaseAddress);
            var ExportsStream = ElfLoader.MemoryStream.SliceWithBounds(ModuleInfo.ExportsStart + BaseAddress, ModuleInfo.ExportsEnd + BaseAddress);

            var ModuleImports = ImportsStream.ReadStructVectorUntilTheEndOfStream <ElfPsp.ModuleImport>();
            var ModuleExports = ExportsStream.ReadStructVectorUntilTheEndOfStream <ElfPsp.ModuleImport>();

            foreach (var SectionHeader in ElfLoader.SectionHeaders)
            {
                //Console.WriteLine("{0}: {1}", NameAt(SectionHeader.Name), SectionHeader);
            }

            foreach (var ModuleImport in ModuleImports)
            {
                //Console.WriteLine(ModuleImport.ToStringDefault());

                var ModuleImportName = ElfLoader.MemoryStream.ReadStringzAt(ModuleImport.Name);
                var NidStreamReader  = new BinaryReader(ElfLoader.MemoryStream.SliceWithLength(ModuleImport.NidAddress, ModuleImport.FunctionCount * sizeof(uint)));
                var CallStreamWriter = new BinaryWriter(ElfLoader.MemoryStream.SliceWithLength(ModuleImport.CallAddress, ModuleImport.FunctionCount * sizeof(uint) * 2));

                HleModuleHost Module = null;
                try
                {
                    Module = ModuleManager.GetModuleByName(ModuleImportName);
                }
                catch (Exception Exception)
                {
                    Console.WriteLine(Exception);
                    throw(new Exception(Exception.Message, Exception));
                }

                Console.WriteLine("{0:X}:'{1}'", ModuleImport.Name, ModuleImportName);
                for (int n = 0; n < ModuleImport.FunctionCount; n++)
                {
                    uint NID         = NidStreamReader.ReadUInt32();
                    var  DefaultName = String.Format("<unknown:{0:X}>", NID);
                    var  NIDName     = (Module != null) ? Module.NamesByNID.GetOrDefault(NID, DefaultName) : DefaultName;
                    //var Delegate = Module.DelegatesByNID.GetOrDefault(NID, null);
                    CallStreamWriter.Write((uint)(0x0000000C | (FunctionGenerator.NativeCallSyscallCode << 6)));                     // syscall 0x2307
                    CallStreamWriter.Write(
                        (uint)ModuleManager.AllocDelegateSlot(
                            CreateDelegate(ModuleManager, Module, NID, ModuleImportName, NIDName),
                            String.Format("{0}:{1}", ModuleImportName, NIDName)
                            )
                        );

                    Console.WriteLine(
                        "    CODE_ADDR({0:X})  :  NID(0x{1,8:X}) : {2}",
                        ModuleImport.CallAddress + n * 8, NID, NIDName
                        );
                }
            }

            //Console.ReadKey();
        }
Пример #3
0
        protected Action <CpuThreadState> CreateDelegate(HleModuleManager ModuleManager, HleModuleHost Module, uint NID, string ModuleImportName, string NIDName)
        {
            Action <CpuThreadState> Callback = null;

            if (Module != null)
            {
                Callback = Module.DelegatesByNID.GetOrDefault(NID, null);
            }

            return((CpuThreadState) =>
            {
                if (Callback == null)
                {
                    if (CpuThreadState.CpuProcessor.PspConfig.DebugSyscalls)
                    {
                        Console.WriteLine(
                            "Thread({0}:'{1}'):{2}:{3}",
                            PspEmulatorContext.GetInstance <HleThreadManager>().Current.Id,
                            PspEmulatorContext.GetInstance <HleThreadManager>().Current.Name,
                            ModuleImportName, NIDName
                            );
                    }
                    throw (new NotImplementedException("Not Implemented '" + String.Format("{0}:{1}", ModuleImportName, NIDName) + "'"));
                }
                else
                {
                    Callback(CpuThreadState);
                }
            });
        }