Beispiel #1
0
        public static void Decompile_FollowersScript()
        {
            var asm = PapyrusAssemblyDefinition.ReadAssembly(
                GetSolutionDir() + @"\Source\Test Scripts\Bad\test.pex");

            var decompiler =
                new PapyrusDecompiler(asm);
            var ctx     = decompiler.CreateContext();
            var methods =
                asm.Types.First()
                .States.SelectMany(s => s.Methods)
                .Where(m => m.Body.Instructions.Count > 2)
                .OrderBy(m => m.Body.Instructions.Count);

            foreach (var method in methods)
            {
                var result = decompiler.Decompile(ctx, method);
                if (result.DecompiledSourceCode.Contains("If (") || result.DecompiledSourceCode.Contains("While ("))
                {
                    // 1. Conditionet i IF satserna uppdateras aldrig och stannar som "If (false) ..."
                    //      - Detta gör att värden som skall användas saknas (om de är en direkt referens till en boolean variable)
                    //      - Eller att Expressions används och "mergas", ex: A == B
                    // 2. Indenten på första raden i en If Sats är fel.
                    // 3. Return kan ibland ha en "Undefined = return EXPRESSION", varför den sista "assign" vid "CheckAssign" sker
                    //    är fortfarande ett frågetecken. Den bör inte göras om destinationen (GetResult()) är undefined.
                    //    men eftersom detta inte händer i källan så är det något som kontrolleras fel eller så har inte alla noder rätt värden.
                }
            }
        }
Beispiel #2
0
        public void Decompile_FollowersScript()
        {
            var asm = PapyrusAssemblyDefinition.ReadAssembly(
                @"D:\Git\PapyrusDotNet\Source\Test Scripts\Fallout 4\followersscript.pex");

            var decompiler =
                new PapyrusDecompiler(asm);
            var ctx    = decompiler.CreateContext();
            var method =
                asm.Types.First().States.First().Methods.OrderBy(m => m.Body.Instructions.Count).First(m => m.HasBody);
            var result = decompiler.Decompile(ctx, method);
        }