예제 #1
0
        private static IntPtr FindPatternInScript(string name, byte[] pattern, byte[] mask)
        {
            if (!scrProgramRegistry.Available)
            {
                return(IntPtr.Zero);
            }

            scrProgram *prog = scrProgramRegistry.Instance.Find(name);

            if (prog == null)
            {
                return(IntPtr.Zero);
            }

            const uint CodePageMaxSize = 0x4000;

            int numCodePages = (int)(prog->CodeLength + (CodePageMaxSize - 1)) >> 14;

            for (int i = 0; i < numCodePages; i++)
            {
                uint size = i == (numCodePages - 1) ? (prog->CodeLength & 0x3FFF) : CodePageMaxSize;

                IntPtr match = FindPatternInRange(prog->CodePages[i], size, pattern, mask);
                if (match != IntPtr.Zero)
                {
                    return(match);
                }
            }

            return(IntPtr.Zero);
        }
 public ScriptNativeCalls(scrProgram *program)
 {
     ScriptName = new String(program->Name);
     Natives    = new ScriptNative[program->NativeFunctionsCount];
     for (int i = 0; i < program->NativeFunctionsCount; i++)
     {
         Natives[i] = new ScriptNative(program->NativeFunctions[i]);
     }
 }