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]); } }