/// <summary>
        /// Begins the value collection.
        /// </summary>
        private void CollectValues()
        {
            DataType dataType = ScanResultsViewModel.GetInstance().ActiveType;

            TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues(
                SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType),
                TrackableTask.UniversalIdentifier);

            TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask);
            SnapshotManager.SaveSnapshot(valueCollectTask.Result);
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ManualScanner"/> class.
        /// </summary>
        public ManualScanner()
        {
            this.InitializeComponent();

            // Windows Forms hosting -- TODO: Phase this out
            this.ValueHexDecBox              = new HexDecTextBox();
            this.ValueHexDecBox.TextChanged += this.ValueUpdated;
            this.valueHexDecBox.Children.Add(WinformsHostingHelper.CreateHostedControl(this.ValueHexDecBox));

            Task.Run(() => ScanResultsViewModel.GetInstance().Subscribe(this));
        }
Exemple #3
0
        /// <summary>
        /// Begins the value collection.
        /// </summary>
        private void CollectValues()
        {
            DataTypeBase dataType = ScanResultsViewModel.GetInstance().ActiveType;

            TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues(
                SessionManager.Session?.OpenedProcess,
                SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess),
                TrackableTask.UniversalIdentifier
                );

            TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask);
            SessionManager.Session.SnapshotManager.SaveSnapshot(valueCollectTask.Result);
        }
        /// <summary>
        /// Returns the memory regions associated with the current snapshot. If none exist, a query will be done. Will not read any memory.
        /// </summary>
        /// <returns>The current active snapshot of memory in the target process.</returns>
        private Snapshot GetActiveSnapshotCreateIfNone()
        {
            lock (this.AccessLock)
            {
                if (this.Snapshots.Count == 0 || this.Snapshots.Peek() == null || this.Snapshots.Peek().ElementCount == 0)
                {
                    Snapshot snapshot = Prefilter.GetInstance().GetPrefilteredSnapshot();
                    snapshot.Alignment       = SettingsViewModel.GetInstance().Alignment;
                    snapshot.ElementDataType = ScanResultsViewModel.GetInstance().ActiveType;
                    return(snapshot);
                }

                // Return the snapshot
                return(this.Snapshots.Peek());
            }
        }
        /// <summary>
        /// Starts the scan using the current constraints.
        /// </summary>
        private void StartScan()
        {
            // Create a constraint manager that includes the current active constraint
            DataTypeBase    dataType        = ScanResultsViewModel.GetInstance().ActiveType;
            ScanConstraints scanConstraints = new ScanConstraints(dataType, this.ActiveConstraint?.Clone());

            if (!scanConstraints.IsValid())
            {
                Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints");
                return;
            }

            try
            {
                // Collect values
                TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues(
                    SessionManager.Session.OpenedProcess,
                    SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess),
                    TrackableTask.UniversalIdentifier
                    );

                TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask);

                // Perform manual scan on value collection complete
                valueCollectorTask.OnCompletedEvent += ((completedValueCollectionTask) =>
                {
                    Snapshot snapshot = valueCollectorTask.Result;
                    TrackableTask <Snapshot> scanTask = ManualScanner.Scan(
                        snapshot,
                        scanConstraints,
                        TrackableTask.UniversalIdentifier);

                    TaskTrackerViewModel.GetInstance().TrackTask(scanTask);
                    SessionManager.Session.SnapshotManager.SaveSnapshot(scanTask.Result);
                });
            }
            catch (TaskConflictException)
            {
            }
        }
        /// <summary>
        /// Starts the scan using the current constraints.
        /// </summary>
        private void StartScan()
        {
            // Create a constraint manager that includes the current active constraint
            ConstraintNode scanConstraints = this.ActiveConstraint.Clone();

            if (!scanConstraints.IsValid())
            {
                Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints");
                return;
            }

            DataType dataType = ScanResultsViewModel.GetInstance().ActiveType;

            try
            {
                // Collect values
                TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues(
                    SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType),
                    TrackableTask.UniversalIdentifier);

                TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask);

                // Perform manual scan on value collection complete
                valueCollectorTask.OnCompletedEvent += ((completedValueCollectionTask) =>
                {
                    Snapshot snapshot = valueCollectorTask.Result;
                    TrackableTask <Snapshot> scanTask = ManualScanner.Scan(
                        snapshot,
                        scanConstraints,
                        TrackableTask.UniversalIdentifier);

                    TaskTrackerViewModel.GetInstance().TrackTask(scanTask);
                    SnapshotManager.SaveSnapshot(scanTask.Result);
                });
            }
            catch (TaskConflictException)
            {
            }
        }
        /// <summary>
        /// Returns the memory regions associated with the current snapshot. If none exist, a query will be done.
        /// </summary>
        /// <param name="createIfNone">Creates a snapshot if none exists.</param>
        /// <returns>The current active snapshot of memory in the target process.</returns>
        public Snapshot GetActiveSnapshot(Boolean createIfNone = true)
        {
            lock (this.AccessLock)
            {
                // Take a snapshot if there are none, or the current one is empty
                if (this.Snapshots.Count == 0 || this.Snapshots.Peek() == null || this.Snapshots.Peek().ElementCount == 0)
                {
                    if (createIfNone)
                    {
                        Snapshot snapshot = Prefilter.GetInstance().GetPrefilteredSnapshot();
                        snapshot.UpdateSettings(ScanResultsViewModel.GetInstance().ActiveType, SettingsViewModel.GetInstance().Alignment);
                        return(snapshot);
                    }
                    else
                    {
                        return(null);
                    }
                }

                // Return the snapshot
                return(this.Snapshots.Peek());
            }
        }
 /// <summary>
 /// Updates the active type.
 /// </summary>
 /// <param name="activeType">The new active type.</param>
 public void Update(Type activeType)
 {
     this.GetActiveSnapshot(createIfNone: false)?.UpdateSettings(ScanResultsViewModel.GetInstance().ActiveType, SettingsViewModel.GetInstance().Alignment);
 }
Exemple #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SnapshotRegion" /> class.
 /// </summary>
 /// <param name="baseAddress">The base address of this snapshot region.</param>
 /// <param name="regionSize">The size of this snapshot region.</param>
 public SnapshotRegion(IntPtr baseAddress, Int32 regionSize) : base(baseAddress, regionSize)
 {
     this.TimeSinceLastRead = DateTime.MinValue;
     this.Alignment         = SettingsViewModel.GetInstance().Alignment;
     this.ElementType       = ScanResultsViewModel.GetInstance().ActiveType;
 }