public object Sleep(bool startRepl = true) { Sleeping = true; Module stdIn; return(NativeModules.TryGetValue("stdin", out stdIn) ? stdIn.Exports : null); }
public void AddNativeModule(string name, object exports) { if (NativeModules.ContainsKey(name)) { throw new InvalidOperationException("A native module with the same name already exists."); } NativeModules[name] = new NativeModule(name, loader, exports); }
private RemoteModule FetchModule(string moduleName) { if (!Path.HasExtension(moduleName)) { moduleName += ".dll"; } var nativeMod = NativeModules.FirstOrDefault(m => m.ModuleName.Equals(moduleName, StringComparison.OrdinalIgnoreCase)); return(nativeMod == null ? null : new RemoteModule(m_Process, nativeMod)); }
private InjectedModule InternalInject(string module, bool mustBeDisposed) { var thread = m_Process.Threads.CreateAndJoin(this["kernel32"]["LoadLibraryA"].BaseAddress, module); if (thread.GetExitCode <IntPtr>() == IntPtr.Zero) { return(null); } var native = NativeModules.FirstOrDefault(m => m.ModuleName.Equals(Path.GetFileName(module), StringComparison.OrdinalIgnoreCase)); return(native == null ? null : new InjectedModule(m_Process, native, mustBeDisposed)); }
public string Resolve(string request, Module requester) { Module module; if (NativeModules.TryGetValue(request, out module)) { return(module.FileName); } var virtualPath = PathResolver.Resolve(request, requester); return(virtualPath?.ResolvePath()); }
public Module Load(string request, Module parent, bool isMain) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (parent != null && parent.Loader != this) { throw new InvalidOperationException("Parent module is initialized from a different loader."); } Module module; if (NativeModules.TryGetValue(request, out module)) { return(module); } var virtualPath = PathResolver.Resolve(request, parent); var identifier = virtualPath?.Identifier; if (identifier == null) { throw new InvalidOperationException($"Module '{request}' not found."); } if (LoadedModules.TryGetValue(identifier, out module)) { return(module); } module = new Module(identifier, virtualPath, parent, this); var oldMain = MainModule; if (isMain) { MainModule = module; } var extension = virtualPath.ResolveExtension(); IModuleCompiler compiler; if (!Compilers.TryGetValue(extension, out compiler)) { throw new InvalidOperationException($"Invalid file extension {extension}."); } LoadedModules[identifier] = module; try { compiler.Compile(module); } catch { LoadedModules.Remove(identifier); if (isMain) { MainModule = oldMain; } throw; } return(module); }