Exemple #1
0
        public List <Function> Disassemble()
        {
            var functions = new List <Function>();

            _bytecode.ReadByte();
            while (_bytecode.PeekChar() != -1)
            {
                var function       = new Function();
                var functionLength = _buffer.ReadInt32();
                var functionNameId = _buffer.ReadUInt16();
                function.Name = functionNameId == 0
                    ? _buffer.ReadTerminatedString()
                    : _resolver.ResolveStringNamegById(functionNameId);

                if (functionLength > 512000)
                {
                    throw new InvalidOperationException("Unexpected error while reading buffer");
                }
                function.Instructions = DisassembleFunction(_bytecode.ReadBytes(functionLength));
                functions.Add(function);
            }
            return(functions);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            var resolver = new BaseResolver(false, Game.Ghosts);

            ushort functionIndex, methodIndex, fieldIndex, stringIndex, OPCodeIndex;

            functionIndex = 100;
            methodIndex   = 33523;
            fieldIndex    = 50;
            stringIndex   = 50;
            OPCodeIndex   = 30;

            Opcode testOp = resolver.ResolveOpcodes();

            string testFunction, testMethod, testField, testString, testOPCode;

            testFunction = "setdvar";
            testMethod   = "giveweapon";
            testField    = "name";
            testString   = "j_head";
            testOPCode   = "OpReturn";

            Console.WriteLine("Resolver - ResolveStringById");
            Console.WriteLine(String.Format("functionIndex: {0} | methodIndex: {1} | fieldIndex: {2} | stringIndex {3} | OPCodeIndex: {4}", functionIndex, methodIndex, fieldIndex, stringIndex, OPCodeIndex));
            Console.WriteLine();

            Console.WriteLine(String.Format("Function: {0}", resolver.ResolveFunctionNameById(functionIndex)));
            Console.WriteLine(String.Format("Method: {0}", resolver.ResolveMethodNameById(methodIndex)));
            Console.WriteLine(String.Format("Field: {0}", resolver.ResolveFieldNameById(fieldIndex)));
            Console.WriteLine(String.Format("String: {0}", resolver.ResolveStringNamegById(fieldIndex)));
            Console.WriteLine(String.Format("OPCode: {0}", resolver.ResolveOpcodeNameById(OPCodeIndex)));

            Console.WriteLine();
            Console.WriteLine("Resolver - ResolveIdByString");
            Console.WriteLine(String.Format("functionName: {0} | methodName: {1} | fieldName: {2} | stringName: {3} | OPCodeName: {4}", testFunction, testMethod, testField, testString, testOPCode));
            Console.WriteLine();

            Console.WriteLine(String.Format("Function: {0}", resolver.ResolveIdOfFunction(testFunction)));
            Console.WriteLine(String.Format("Method: {0}", resolver.ResolveIdOfMethod(testMethod)));
            Console.WriteLine(String.Format("Field: {0}", resolver.ResolveIdOfField(testField)));
            Console.WriteLine(String.Format("String: {0}", resolver.ResolveIdOfString(testString)));
            Console.WriteLine(String.Format("OPCode: {0}", resolver.ResolveIdOfOpcodeString(testOPCode)));

            Console.ReadKey();
        }