예제 #1
0
    static public void SetPEEmitState(PEType eType, bool bIsEmit)
    {
        string strName = "";

        switch (eType)
        {
        case PEType.eBubbles:
            strName = "Bubbles";
            break;

        case PEType.eFireworks:
            strName = "Fireworks";
            break;

        case PEType.eWinFireworks:
            strName = "WinFireworks";
            break;
        }

        GameObject cPEObj = GameObject.Find(strName);

        if (!cPEObj)
        {
            return;
        }
        ParticleEmitter cPE = cPEObj.GetComponent(typeof(ParticleEmitter)) as ParticleEmitter;

        cPE.emit = bIsEmit;
    }
예제 #2
0
    static public void ChangePEPosition(PEType eType)
    {
        string strName = "";

        switch (eType)
        {
        case PEType.eBubbles:
            strName = "Bubbles";
            break;

        case PEType.eFireworks:
            strName = "Fireworks";
            break;
        }

        GameObject cPEObj = GameObject.Find(strName);

        if (!cPEObj)
        {
            return;
        }

        switch (eType)
        {
        case PEType.eBubbles:
            cPEObj.transform.localPosition = new Vector3(206f, 0, 1230f);
            break;

        case PEType.eFireworks:
            switch ((int)UnityEngine.Random.Range(0, 4))
            {
            case 0:
                cPEObj.transform.localPosition = new Vector3(112f, 90f, 1402f);
                break;

            case 1:
                cPEObj.transform.localPosition = new Vector3(270f, 91f, 1402f);
                break;

            case 2:
                cPEObj.transform.localPosition = new Vector3(308f, 98f, 1402f);
                break;

            case 3:
                cPEObj.transform.localPosition = new Vector3(182f, 143f, 1402f);
                break;
            }
            break;
        }
    }
예제 #3
0
        public List <PEType> ParseTypes(Stream peStream, Stream pdbStream)
        {
            var readerParameters = new ReaderParameters {
                ReadSymbols = true, SymbolStream = pdbStream
            };
            var       assemblyDefinition = AssemblyDefinition.ReadAssembly(peStream, readerParameters);
            PdbReader rader;

            var types = new List <PEType>();

            foreach (var typeDefinition in assemblyDefinition.MainModule.Types)
            {
                if (typeDefinition.Name != "<Module>")
                {
                    var type = new PEType
                    {
                        Name    = typeDefinition.Name,
                        Methods = new List <PEMethod>()
                    };
                    foreach (var methodDefinition in typeDefinition.Methods)
                    {
                        if (methodDefinition.Name != ".ctor")
                        {
                            type.Methods.Add(
                                new PEMethod
                            {
                                Name      = methodDefinition.Name,
                                BodyLines = ParseInstructions(methodDefinition.Body.Instructions)
                            });
                        }
                    }
                    types.Add(type);
                }
            }

            return(types);
        }
예제 #4
0
    static public ParticleEmitter CreateParticle(PEType eType)
    {
        string strName = "";

        switch (eType)
        {
        case PEType.eBubbles:
            strName = "player/SceneElements/Bubbles";
            break;

        case PEType.eFireworks:
            strName = "player/SceneElements/Fireworks";
            break;
        }
        GameObject cPEObj    = Resources.Load(strName) as GameObject;
        GameObject cPEObjInt = Utility.Instantiate(cPEObj) as GameObject;

        cPEObjInt.name = cPEObj.name;
        ParticleEmitter cPE = cPEObjInt.GetComponent(typeof(ParticleEmitter)) as ParticleEmitter;

        ChangePEPosition(eType);
        cPE.emit = false;
        return(cPE);
    }
예제 #5
0
        private void CalcHeaderOffsets()
        {
            this.fs = new FileStream( assemblyPath, FileMode.Open, FileAccess.Read );
            this.rdr = new BinaryReader( fs );
            dos_magic = rdr.ReadUInt16();
            if ( dos_magic == 0x5a4d )
            {
                fs.Position = 0x3c;
                peHeader = rdr.ReadUInt32();
                fileHeader = peHeader + 4;
                optionalHeader = fileHeader + 20;

                fs.Position = optionalHeader;
                peType = (PEType)rdr.ReadUInt16();

                dataDirectory = peType == PEType.PE32Plus
                    ? optionalHeader + 112
                    : optionalHeader + 96;

                fs.Position = dataDirectory - 4;
                numDataDirectoryEntries = rdr.ReadUInt32();

                fs.Position = peHeader;
                pe_signature = rdr.ReadUInt32();
                rdr.ReadUInt16(); // machine
                numberOfSections = rdr.ReadUInt16();
                fs.Position += 12;
                optionalHeaderSize = rdr.ReadUInt16();
                dataSections = optionalHeader + optionalHeaderSize;

                sections = new DataSection[numberOfSections];
                fs.Position = dataSections;
                for( int i = 0; i < numberOfSections; i++ )
                {
                    fs.Position += 8;
                    sections[i].VirtualSize = rdr.ReadUInt32();
                    sections[i].VirtualAddress = rdr.ReadUInt32();
                    uint rawDataSize = rdr.ReadUInt32();
                    sections[i].FileOffset = rdr.ReadUInt32();
                    if ( sections[i].VirtualSize == 0 )
                        sections[i].VirtualSize = rawDataSize;

                    fs.Position += 16;
                }

                if (IsDotNetFile)
                {
                    uint rva = DataDirectoryRva(14);
                    if (rva != 0)
                    {
                        fs.Position = RvaToLfa(rva) + 8;
                        uint metadata = rdr.ReadUInt32();
                        fs.Position = RvaToLfa(metadata);
                        if (rdr.ReadUInt32() == 0x424a5342)
                        {
                            // Copy string representing runtime version
                            fs.Position += 12;
                            StringBuilder sb = new StringBuilder();
                            char c;
                            while ((c = rdr.ReadChar()) != '\0')
                                sb.Append(c);

                            if (sb[0] == 'v') // Last sanity check
                                ImageRuntimeVersion = sb.ToString();

                            // Could do fixups here for bad values in older files
                            // like 1.x86, 1.build, etc. But we are only using
                            // the major version anyway

                            // Jump back and find the CorFlags
                            fs.Position = RvaToLfa(rva) + 16;
                            corFlags = (CorFlags)rdr.ReadUInt32();
                        }
                    }
                }
            }
        }
예제 #6
0
    public static void SetPEEmitState(PEType eType,bool bIsEmit)
    {
        string strName = "";
        switch(eType)
        {
        case PEType.eBubbles:
            strName = "Bubbles";
            break;
        case PEType.eFireworks:
            strName = "Fireworks";
            break;
        case PEType.eWinFireworks:
            strName = "WinFireworks";
            break;
        }

        GameObject cPEObj = GameObject.Find(strName);
        if(!cPEObj)
            return;
        ParticleEmitter cPE = cPEObj.GetComponent(typeof(ParticleEmitter)) as ParticleEmitter;
        cPE.emit = bIsEmit;
    }
예제 #7
0
 public static ParticleEmitter CreateParticle(PEType eType)
 {
     string strName = "";
     switch(eType)
     {
     case PEType.eBubbles:
         strName = "player/SceneElements/Bubbles";
         break;
     case PEType.eFireworks:
         strName = "player/SceneElements/Fireworks";
         break;
     }
     GameObject cPEObj = Resources.Load(strName) as GameObject;
     GameObject cPEObjInt = Utility.Instantiate(cPEObj) as GameObject;
     cPEObjInt.name = cPEObj.name;
     ParticleEmitter cPE = cPEObjInt.GetComponent(typeof(ParticleEmitter)) as ParticleEmitter;
     ChangePEPosition(eType);
     cPE.emit = false;
     return cPE;
 }
예제 #8
0
    public static void ChangePEPosition(PEType eType)
    {
        string strName = "";
        switch(eType)
        {
        case PEType.eBubbles:
            strName = "Bubbles";
            break;
        case PEType.eFireworks:
            strName = "Fireworks";
            break;
        }

        GameObject cPEObj = GameObject.Find(strName);
        if(!cPEObj)
            return;

        switch(eType)
        {
        case PEType.eBubbles:
            cPEObj.transform.localPosition = new Vector3(206f, 0, 1230f);
            break;
        case PEType.eFireworks:
            switch((int)UnityEngine.Random.Range(0,4))
            {
            case 0:
                cPEObj.transform.localPosition = new Vector3(112f, 90f, 1402f);
                break;
            case 1:
                cPEObj.transform.localPosition = new Vector3(270f, 91f, 1402f);
                break;
            case 2:
                cPEObj.transform.localPosition = new Vector3(308f, 98f, 1402f);
                break;
            case 3:
                cPEObj.transform.localPosition = new Vector3(182f, 143f, 1402f);
                break;
            }
            break;
        }
    }
예제 #9
0
        private void CalcHeaderOffsets()
        {
            this.fs   = new FileStream(assemblyPath, FileMode.Open, FileAccess.Read);
            this.rdr  = new BinaryReader(fs);
            dos_magic = rdr.ReadUInt16();
            if (dos_magic == 0x5a4d)
            {
                fs.Position    = 0x3c;
                peHeader       = rdr.ReadUInt32();
                fileHeader     = peHeader + 4;
                optionalHeader = fileHeader + 20;

                fs.Position = optionalHeader;
                peType      = (PEType)rdr.ReadUInt16();

                dataDirectory = peType == PEType.PE32Plus
                    ? optionalHeader + 112
                    : optionalHeader + 96;

                fs.Position             = dataDirectory - 4;
                numDataDirectoryEntries = rdr.ReadUInt32();

                fs.Position  = peHeader;
                pe_signature = rdr.ReadUInt32();
                rdr.ReadUInt16(); // machine
                numberOfSections   = rdr.ReadUInt16();
                fs.Position       += 12;
                optionalHeaderSize = rdr.ReadUInt16();
                dataSections       = optionalHeader + optionalHeaderSize;

                sections    = new DataSection[numberOfSections];
                fs.Position = dataSections;
                for (int i = 0; i < numberOfSections; i++)
                {
                    fs.Position               += 8;
                    sections[i].VirtualSize    = rdr.ReadUInt32();
                    sections[i].VirtualAddress = rdr.ReadUInt32();
                    uint rawDataSize = rdr.ReadUInt32();
                    sections[i].FileOffset = rdr.ReadUInt32();
                    if (sections[i].VirtualSize == 0)
                    {
                        sections[i].VirtualSize = rawDataSize;
                    }

                    fs.Position += 16;
                }

                if (IsDotNetFile)
                {
                    uint rva = DataDirectoryRva(14);
                    if (rva != 0)
                    {
                        fs.Position = RvaToLfa(rva) + 8;
                        uint metadata = rdr.ReadUInt32();
                        fs.Position = RvaToLfa(metadata);
                        if (rdr.ReadUInt32() == 0x424a5342)
                        {
                            // Copy string representing runtime version
                            fs.Position += 12;
                            StringBuilder sb = new StringBuilder();
                            char          c;
                            while ((c = rdr.ReadChar()) != '\0')
                            {
                                sb.Append(c);
                            }

                            if (sb[0] == 'v') // Last sanity check
                            {
                                ImageRuntimeVersion = sb.ToString();
                            }

                            // Could do fixups here for bad values in older files
                            // like 1.x86, 1.build, etc. But we are only using
                            // the major version anyway

                            // Jump back and find the CorFlags
                            fs.Position = RvaToLfa(rva) + 16;
                            corFlags    = (CorFlags)rdr.ReadUInt32();
                        }
                    }
                }
            }
        }