Пример #1
0
        public void ImportModules()
        {
            foreach (var ModuleImports in ModulesImports)
            {
                HleModuleHost HleModuleHost = null;
                try
                {
                    HleModuleHost = ModuleManager.GetModuleByName(ModuleImports.Name);
                }
                catch (Exception Exception)
                {
                    //Logger.Error(Exception);
                    Console.Error.WriteLine(Exception);
                }

                // Can't use a host module. Try to use a Guest module.
                if (HleModuleHost == null)
                {
                    var HleModuleGuest =
                        ModuleManager.LoadedGuestModules.FirstOrDefault(ModuleExports =>
                                                                        ModuleExports.Name == ModuleImports.Name);
                    if (HleModuleGuest != null)
                    {
                        HleModuleGuest.ExportModules(this);
                        continue;
                    }
                }

                Logger.Info("'{0}' - {1}", ModuleImports.Name,
                            HleModuleHost != null ? HleModuleHost.ModuleLocation : "?");
                foreach (var Function in ModuleImports.Functions)
                {
                    var NID         = Function.Key;
                    var CallAddress = Function.Value.Address;

                    var DefaultEntry = new HleFunctionEntry()
                    {
                        NID         = 0x00000000,
                        Name        = CStringFormater.Sprintf("__<unknown:0x%08X>", (int)NID),
                        Description = "Unknown",
                        Module      = null,
                        ModuleName  = ModuleImports.Name,
                    };
                    var FunctionEntry = HleModuleHost?.EntriesByNID.GetOrDefault(NID, DefaultEntry) ?? DefaultEntry;
                    FunctionEntry.NID = NID;
                    //var Delegate = Module.DelegatesByNID.GetOrDefault(NID, null);

                    LinkFunction(CallAddress, FunctionEntry);
                }
            }
        }
        public void LinkFunction(uint CallAddress, HleFunctionEntry NativeFunction)
        {
            //Console.WriteLine(NativeFunction);

            CpuProcessor.Memory.WriteSafe(CallAddress + 0,
                                          SyscallInfo.NativeCallSyscallOpCode); // syscall NativeCallSyscallCode
            CpuProcessor.Memory.WriteSafe(CallAddress + 4, (uint)ModuleManager.AllocDelegateSlot(
                                              Action: CreateDelegate(
                                                  ModuleManager: ModuleManager,
                                                  Module: NativeFunction.Module,
                                                  NID: NativeFunction.NID,
                                                  ModuleImportName: NativeFunction.ModuleName,
                                                  NIDName: NativeFunction.Name
                                                  ),
                                              ModuleImportName: NativeFunction.ModuleName,
                                              FunctionEntry: NativeFunction
                                              ));

            Console.WriteLine(
                "    CODE_ADDR({0:X})  :  NID(0x{1:X8}) : {2} - {3}",
                CallAddress, NativeFunction.NID, NativeFunction.Name, NativeFunction.Description
                );
        }
Пример #3
0
        public void ImportModules()
        {
            foreach (var ModuleImports in ModulesImports)
            {
                HleModuleHost HleModuleHost = null;
                try
                {
                    HleModuleHost = ModuleManager.GetModuleByName(ModuleImports.Name);
                }
                catch (Exception Exception)
                {
                    Console.WriteLine(Exception);
                }

                // Can't use a host module. Try to use a Guest module.
                if (HleModuleHost == null)
                {
                    var HleModuleGuest = ModuleManager.LoadedGuestModules.FirstOrDefault(ModuleExports => (ModuleExports.Name == ModuleImports.Name));
                    if (HleModuleGuest != null)
                    {
                        HleModuleGuest.ExportModules(this);
                        continue;
                    }
                }

                Console.WriteLine("'{0}' - {1}", ModuleImports.Name, (HleModuleHost != null) ? HleModuleHost.ModuleLocation : "?");
                foreach (var Function in ModuleImports.Functions)
                {
                    var NID = Function.Key;
                    var CallAddress = Function.Value.Address;

                    var DefaultEntry = new HleFunctionEntry()
                    {
                        NID = 0x00000000,
                        Name = CStringFormater.Sprintf("__<unknown:0x%08X>", (int)NID),
                        Description = "Unknown",
                        Module = null,
                        ModuleName = ModuleImports.Name,
                    };
                    var FunctionEntry = (HleModuleHost != null) ? HleModuleHost.EntriesByNID.GetOrDefault(NID, DefaultEntry) : DefaultEntry;
                    FunctionEntry.NID = NID;
                    //var Delegate = Module.DelegatesByNID.GetOrDefault(NID, null);

                    LinkFunction(CallAddress, FunctionEntry);
                }
            }
        }
Пример #4
0
        public void LinkFunction(uint CallAddress, HleFunctionEntry NativeFunction)
        {
            //Console.WriteLine(NativeFunction);

            CpuProcessor.Memory.WriteSafe(CallAddress + 0, SyscallInfo.NativeCallSyscallOpCode);  // syscall NativeCallSyscallCode
            CpuProcessor.Memory.WriteSafe(CallAddress + 4, (uint)ModuleManager.AllocDelegateSlot(
                Action: CreateDelegate(
                    ModuleManager: ModuleManager,
                    Module: NativeFunction.Module,
                    NID: NativeFunction.NID,
                    ModuleImportName: NativeFunction.ModuleName,
                    NIDName: NativeFunction.Name
                ),
                ModuleImportName: NativeFunction.ModuleName,
                FunctionEntry: NativeFunction
            ));

            Console.WriteLine(
                "    CODE_ADDR({0:X})  :  NID(0x{1:X8}) : {2} - {3}",
                CallAddress, NativeFunction.NID, NativeFunction.Name, NativeFunction.Description
            );
        }