public override DbgEngineModule CreateModule <T>(DbgAppDomain appDomain, DbgInternalModule internalModule, bool isExe, ulong address, uint size, DbgImageLayout imageLayout, string name, string filename, bool isDynamic, bool isInMemory, bool?isOptimized, int order, DateTime?timestamp, string version, DbgEngineMessageFlags messageFlags, T data, Action <DbgEngineModule> onCreated) { if (disposed) { throw new ObjectDisposedException(nameof(DbgObjectFactoryImpl)); } var module = new DbgModuleImpl(runtime, VerifyOptionalAppDomain(appDomain), internalModule, isExe, address, size, imageLayout, name, filename, isDynamic, isInMemory, isOptimized, order, timestamp, version); if (data != null) { module.GetOrCreateData(() => data); } var engineModule = new DbgEngineModuleImpl(module); onCreated?.Invoke(engineModule); owner.Dispatcher.BeginInvoke(() => owner.AddModule_DbgThread(runtime, module, messageFlags)); return(engineModule); }
public DbgModuleImpl(DbgRuntimeImpl runtime, DbgAppDomainImpl appDomain, DbgInternalModule internalModule, bool isExe, ulong address, uint size, DbgImageLayout imageLayout, string name, string filename, bool isDynamic, bool isInMemory, bool?isOptimized, int order, DateTime?timestamp, string version) { lockObj = new object(); this.runtime = runtime ?? throw new ArgumentNullException(nameof(runtime)); this.appDomain = appDomain; InternalModule = internalModule ?? throw new ArgumentNullException(nameof(internalModule)); this.isExe = isExe; this.address = address; this.size = size; this.imageLayout = imageLayout; this.name = name; this.filename = filename; this.isDynamic = isDynamic; this.isInMemory = isInMemory; this.isOptimized = isOptimized; this.order = order; this.timestamp = timestamp?.ToUniversalTime(); this.version = version; }
/// <summary> /// Creates a module. The engine has paused the program. /// </summary> /// <param name="appDomain">New <see cref="DbgModule.AppDomain"/> value</param> /// <param name="internalModule">Module object created by the debug engine</param> /// <param name="isExe">New <see cref="DbgModule.IsExe"/> value</param> /// <param name="address">New <see cref="DbgModule.Address"/> value</param> /// <param name="size">New <see cref="DbgModule.Size"/> value</param> /// <param name="imageLayout">New <see cref="DbgModule.ImageLayout"/> value</param> /// <param name="name">New <see cref="DbgModule.Name"/> value</param> /// <param name="filename">New <see cref="DbgModule.Filename"/> value</param> /// <param name="isDynamic">New <see cref="DbgModule.IsDynamic"/> value</param> /// <param name="isInMemory">New <see cref="DbgModule.IsInMemory"/> value</param> /// <param name="isOptimized">New <see cref="DbgModule.IsOptimized"/> value</param> /// <param name="order">New <see cref="DbgModule.Order"/> value</param> /// <param name="timestamp">New <see cref="DbgModule.Timestamp"/> value</param> /// <param name="version">New <see cref="DbgModule.Version"/> value</param> /// <param name="messageFlags">Message flags</param> /// <returns></returns> public DbgEngineModule CreateModule(DbgAppDomain appDomain, DbgInternalModule internalModule, bool isExe, ulong address, uint size, DbgImageLayout imageLayout, string name, string filename, bool isDynamic, bool isInMemory, bool?isOptimized, int order, DateTime?timestamp, string version, DbgEngineMessageFlags messageFlags) => CreateModule <object>(appDomain, internalModule, isExe, address, size, imageLayout, name, filename, isDynamic, isInMemory, isOptimized, order, timestamp, version, messageFlags, null, null);
/// <summary> /// Creates a module. The engine has paused the program. /// </summary> /// <typeparam name="T">Type of data</typeparam> /// <param name="appDomain">New <see cref="DbgModule.AppDomain"/> value</param> /// <param name="internalModule">Module object created by the debug engine</param> /// <param name="isExe">New <see cref="DbgModule.IsExe"/> value</param> /// <param name="address">New <see cref="DbgModule.Address"/> value</param> /// <param name="size">New <see cref="DbgModule.Size"/> value</param> /// <param name="imageLayout">New <see cref="DbgModule.ImageLayout"/> value</param> /// <param name="name">New <see cref="DbgModule.Name"/> value</param> /// <param name="filename">New <see cref="DbgModule.Filename"/> value</param> /// <param name="isDynamic">New <see cref="DbgModule.IsDynamic"/> value</param> /// <param name="isInMemory">New <see cref="DbgModule.IsInMemory"/> value</param> /// <param name="isOptimized">New <see cref="DbgModule.IsOptimized"/> value</param> /// <param name="order">New <see cref="DbgModule.Order"/> value</param> /// <param name="timestamp">New <see cref="DbgModule.Timestamp"/> value</param> /// <param name="version">New <see cref="DbgModule.Version"/> value</param> /// <param name="messageFlags">Message flags</param> /// <param name="data">Data to add to the <see cref="DbgModule"/> or null if nothing gets added</param> /// <param name="onCreated">Called right after creating the module but before adding it to internal data structures. This can be null.</param> /// <returns></returns> public abstract DbgEngineModule CreateModule <T>(DbgAppDomain appDomain, DbgInternalModule internalModule, bool isExe, ulong address, uint size, DbgImageLayout imageLayout, string name, string filename, bool isDynamic, bool isInMemory, bool?isOptimized, int order, DateTime?timestamp, string version, DbgEngineMessageFlags messageFlags, T data, Action <DbgEngineModule> onCreated = null) where T : class;