Пример #1
0
 /// <summary>
 /// This clips the calls to match the specified input argument range.
 /// </summary>
 /// <param name="args"></param>
 public void clipCalls_argument(RANGE_PARSE args)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.filterCalls_ArgumentValue(args);
     }
 }
Пример #2
0
 /// <summary>
 /// Filters calls by their type.
 /// </summary>
 /// <param name="type">1 for inter-modular, 2 for intra-modular.</param>
 public void clipCalls_type(int type)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.filterCall_Type(type);
     }
 }
Пример #3
0
 /// <summary>
 /// Clips the calls to calls which had a string input that is a partial match to text.
 /// </summary>
 /// <param name="text">String to partial match the string argument to.</param>
 public void clipCalls_hasBinaryArgumentMatch(byte[] data, bool onlyStartWith)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.clipCalls_hasBinaryArgumentMatch(data, onlyStartWith);
     }
 }
Пример #4
0
        /// <summary>
        /// This removes the functions corresponding to the indices. All calls are removed from
        /// the call recording to these functions as well.
        /// </summary>
        /// <param name="rowIndices"></param>
        public void removeFunctions(List <int> rowIndices)
        {
            // Generate the list of destination addresses
            List <uint> functionAddresses = new List <uint>(rowIndices.Count);

            for (int i = 0; i < rowIndices.Count; i++)
            {
                if (rowIndices[i] >= 0 && rowIndices[i] < functions.Count)
                {
                    functionAddresses.Add(functions[rowIndices[i]].address);
                }
            }

            if (dataVis != null)
            {
                // Filter out the calls
                // Now lets filter out the calls to these function addresses
                dataVis = dataVis.clipOutCalls_addresses(functionAddresses);
            }

            // Remove the functions from the list
            FunctionSelectFromAddressArray selecter = new FunctionSelectFromAddressArray(functionAddresses);

            functions = functions.FindAll(selecter.isNotInList);
        }
Пример #5
0
 /// <summary>
 /// Clip to calls within the specified range of parameters.
 /// </summary>
 /// <param name="argMinCount"></param>
 /// <param name="argMaxCount"></param>
 public void clipCalls_argumentCount(int argMinCount, int argMaxCount)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.clipCalls_argumentCount(argMinCount, argMaxCount);
     }
 }
Пример #6
0
 /// <summary>
 /// Clips the calls to calls which had a string input that is a partial match to text.
 /// </summary>
 /// <param name="text">String to partial match the string argument to.</param>
 public void clipCalls_hasStringArgumentMatch(string text, bool caseSensitive)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.clipCalls_hasStringArgumentMatch(text, caseSensitive);
     }
 }
Пример #7
0
 /// <summary>
 /// Clips the calls to only calls which received a string as an input.
 /// </summary>
 public void clipCalls_hasStringArgument()
 {
     if (dataVis != null)
     {
         dataVis = dataVis.clipCalls_hasStringArgument();
     }
 }
Пример #8
0
 public void clipCalls_addressSource(RANGE_PARSE_4BYTE range)
 {
     if (dataVis != null)
     {
         dataVis = dataVis.clipCalls_addressSource(range);
     }
 }
Пример #9
0
        public void clipFunctions_selected(List <int> rowIndices)
        {
            // Clip the function list to the selected rows

            // Generate the list of functions
            List <uint>      functionAddresses = new List <uint>(rowIndices.Count);
            List <oFunction> newFunctionList   = new List <oFunction>(rowIndices.Count);

            for (int i = 0; i < rowIndices.Count; i++)
            {
                if (rowIndices[i] >= 0 && rowIndices[i] < functions.Count)
                {
                    functionAddresses.Add(functions[rowIndices[i]].address);
                    newFunctionList.Add((oFunction)oFunctionMaster.destinationToFunction[functions[rowIndices[i]].address]);
                }
            }
            this.functions = newFunctionList;

            // Sort the functions list
            this.functions.Sort(new FunctionCompareAddress());

            if (dataVis != null)
            {
                // Now lets filter out the calls to these function addresses
                dataVis = dataVis.clipCalls_addressesDest(functionAddresses);
            }
        }
Пример #10
0
        /// <summary>
        /// Starts recording data from the circular buffer. It automatically starts a new thread
        /// and reads in data at an interval of 'refreshRate' milliseconds.
        /// </summary>
        /// <param name="refreshTime">Refresh rate in milliseconds. ie. 100 for ten times a second.</param>
        public void startRecording(int refreshTime)
        {
            // Update the parameters
            if (data != null)
            {
                lock (data)
                    data = new oBufferTimeData();
            }
            else
            {
                data = new oBufferTimeData();
            }

            lastOffset       = oMemoryFunctions.ReadMemoryDword(oProcess.activeProcess, offsetAddress);
            record           = true;
            this.refreshTime = refreshTime;
            lastRecordTime   = DateTime.Now;

            // Create the data recording thread
            if (recordingThread != null && recordingThread.IsAlive)
            {
                recordingThread.Abort();
            }
            recordingThread = new Thread(new ThreadStart(update));
            recordingThread.Start();
        }
Пример #11
0
 /// <summary>
 /// Clips this data to calls made between the specified time range.
 /// </summary>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 public void clipCalls_timeRange(double startTime, double endTime)
 {
     if (dataVis != null)
     {
         // Update the data
         dataVis = new oBufferTimeData(dataVis.getDataRange(endTime, endTime - startTime), DateTime.Now,
                                       startTime, endTime);
     }
 }
Пример #12
0
        public void stopRecording()
        {
            // Update the list state
            recording = false;

            // Tell the functions in this list that we are no longer recording
            foreach (oFunction function in functions)
            {
                function.stopRecording();
            }

            // Read in the final data
            dataVis = oFunctionMaster.reader_visualization.stopRecording();
        }
Пример #13
0
        /// <summary>
        /// This clips this dataset to functions who have been called between minCalls and maxCalls inclusively.
        /// </summary>
        /// <param name="minCalls">Minimum number of calls.</param>
        /// <param name="maxCalls">Maximum number of calls.</param>
        public void clipFunctions_CallCount(int minCalls, int maxCalls)
        {
            if (dataVis == null)
            {
                return;
            }

            // Filter the data
            if (minCalls == 0)
            {
                // Include functions in dataVis and functions with 0 calls
                List <uint> calledFunctionsBefore = dataVis.getFunctionList();
                dataVis = dataVis.filterFunctions_CallCountRange(minCalls, maxCalls);

                // We need to update the functions that are involved with this dataset.
                List <uint> calledFunctionsAfter = dataVis.getFunctionList();

                // Remove all the functions that are in calledFunctionsBefore but not in calledFunctionsAfter
                functions = new List <oFunction>(functions);
                foreach (uint address in calledFunctionsBefore)
                {
                    if (!calledFunctionsAfter.Contains(address))
                    {
                        // Remove this function
                        int index = functions.BinarySearch(new oFunction(0, address, oFunction.CALL_TYPE.FIXED_OFFSET, ""), new FunctionCompareAddress());
                        if (index >= 0)
                        {
                            functions.RemoveAt(index);
                        }
                    }
                }
            }
            else
            {
                dataVis = dataVis.filterFunctions_CallCountRange(minCalls, maxCalls);

                // Include only functions in dataVis
                updateFunctionList();
            }
        }
Пример #14
0
        /// <summary>
        /// Begins recording function call data. The visualization is updated while recording.
        /// </summary>
        public bool startRecording()
        {
            if (functions == null)
            {
                return(false);
            }

            // Update the list state
            recording = true;

            // Clear the recorded data
            dataVis = null;

            // First record the visualization circular buffer information
            oFunctionMaster.reader_visualization.startRecording(10); // Update 100 times a second

            // Tell the functions in this list that we are now recording
            foreach (oFunction function in functions)
            {
                function.startRecording();
            }
            return(true);
        }
Пример #15
0
 public void clipCalls_addressStack(RANGE_PARSE_4BYTE range)
 {
     if (dataVis != null)
         dataVis = dataVis.clipCalls_addressStack(range);
 }
Пример #16
0
        public void stopRecording()
        {
            // Update the list state
            recording = false;

            // Tell the functions in this list that we are no longer recording
            foreach (oFunction function in functions)
            {
                function.stopRecording();
            }

            // Read in the final data
            dataVis = oFunctionMaster.reader_visualization.stopRecording();
        }
Пример #17
0
        /// <summary>
        /// Begins recording function call data. The visualization is updated while recording.
        /// </summary>
        public bool startRecording()
        {
            if( functions == null )
                return false;

            // Update the list state
            recording = true;

            // Clear the recorded data
            dataVis = null;

            // First record the visualization circular buffer information
            oFunctionMaster.reader_visualization.startRecording(10); // Update 100 times a second

            // Tell the functions in this list that we are now recording
            foreach( oFunction function in functions )
            {
                function.startRecording();
            }
            return true;
        }
Пример #18
0
        /// <summary>
        /// This removes the functions corresponding to the indices. All calls are removed from
        /// the call recording to these functions as well.
        /// </summary>
        /// <param name="rowIndices"></param>
        public void removeFunctions(List<int> rowIndices)
        {
            // Generate the list of destination addresses
            List<uint> functionAddresses = new List<uint>(rowIndices.Count);
            for (int i = 0; i < rowIndices.Count; i++)
            {
                if (rowIndices[i] >= 0 && rowIndices[i] < functions.Count)
                {
                    functionAddresses.Add(functions[rowIndices[i]].address);
                }
            }

            if( dataVis != null )
            {
                // Filter out the calls
                // Now lets filter out the calls to these function addresses
                dataVis = dataVis.clipOutCalls_addresses(functionAddresses);
            }

            // Remove the functions from the list
            FunctionSelectFromAddressArray selecter = new FunctionSelectFromAddressArray(functionAddresses);
            functions = functions.FindAll(selecter.isNotInList);
        }
Пример #19
0
        public void clipFunctions_selected(List<int> rowIndices)
        {
            // Clip the function list to the selected rows

            // Generate the list of functions
            List<uint> functionAddresses = new List<uint>(rowIndices.Count);
            List<oFunction> newFunctionList = new List<oFunction>(rowIndices.Count);
            for (int i = 0; i < rowIndices.Count; i++)
            {
                if (rowIndices[i] >= 0 && rowIndices[i] < functions.Count)
                {
                    functionAddresses.Add(functions[rowIndices[i]].address);
                    newFunctionList.Add((oFunction)oFunctionMaster.destinationToFunction[functions[rowIndices[i]].address]);
                }
            }
            this.functions = newFunctionList;

            // Sort the functions list
            this.functions.Sort(new FunctionCompareAddress());

            if (dataVis != null)
            {
                // Now lets filter out the calls to these function addresses
                dataVis = dataVis.clipCalls_addressesDest(functionAddresses);
            }
        }
Пример #20
0
        /// <summary>
        /// This clips this dataset to functions who have been called between minCalls and maxCalls inclusively.
        /// </summary>
        /// <param name="minCalls">Minimum number of calls.</param>
        /// <param name="maxCalls">Maximum number of calls.</param>
        public void clipFunctions_CallCount(int minCalls, int maxCalls)
        {
            if( dataVis == null )
                return;

            // Filter the data
            if( minCalls == 0 )
            {
                // Include functions in dataVis and functions with 0 calls
                List<uint> calledFunctionsBefore = dataVis.getFunctionList();
                dataVis = dataVis.filterFunctions_CallCountRange(minCalls, maxCalls);

                // We need to update the functions that are involved with this dataset.
                List<uint> calledFunctionsAfter = dataVis.getFunctionList();

                // Remove all the functions that are in calledFunctionsBefore but not in calledFunctionsAfter
                functions = new List<oFunction>(functions);
                foreach(uint address in calledFunctionsBefore)
                {
                    if( !calledFunctionsAfter.Contains(address) )
                    {
                        // Remove this function
                        int index = functions.BinarySearch(new oFunction(0, address, oFunction.CALL_TYPE.FIXED_OFFSET,""), new FunctionCompareAddress());
                        if( index >= 0 )
                            functions.RemoveAt(index);
                    }
                }

            }else
            {
                dataVis = dataVis.filterFunctions_CallCountRange(minCalls, maxCalls);

                // Include only functions in dataVis
                updateFunctionList();
            }
        }
Пример #21
0
 /// <summary>
 /// Filters calls by their type.
 /// </summary>
 /// <param name="type">1 for inter-modular, 2 for intra-modular.</param>
 public void clipCalls_type(int type)
 {
     if (dataVis != null)
         dataVis = dataVis.filterCall_Type(type);
 }
Пример #22
0
 /// <summary>
 /// Clips this data to calls made between the specified time range.
 /// </summary>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 public void clipCalls_timeRange(double startTime, double endTime)
 {
     if (dataVis != null)
     {
         // Update the data
         dataVis = new oBufferTimeData(dataVis.getDataRange(endTime, endTime - startTime), DateTime.Now,
                                            startTime, endTime);
     }
 }
Пример #23
0
 /// <summary>
 /// Clips the calls to calls which had a string input that is a partial match to text.
 /// </summary>
 /// <param name="text">String to partial match the string argument to.</param>
 public void clipCalls_hasStringArgumentMatch(string text, bool caseSensitive)
 {
     if (dataVis != null)
         dataVis = dataVis.clipCalls_hasStringArgumentMatch(text, caseSensitive);
 }
Пример #24
0
 /// <summary>
 /// This clips the calls to match the specified input argument range.
 /// </summary>
 /// <param name="args"></param>
 public void clipCalls_argument(RANGE_PARSE args)
 {
     if (dataVis != null)
         dataVis = dataVis.filterCalls_ArgumentValue(args);
 }
Пример #25
0
 /// <summary>
 /// Clip to calls within the specified range of parameters.
 /// </summary>
 /// <param name="argMinCount"></param>
 /// <param name="argMaxCount"></param>
 public void clipCalls_argumentCount(int argMinCount, int argMaxCount)
 {
     if( dataVis != null )
         dataVis = dataVis.clipCalls_argumentCount(argMinCount, argMaxCount);
 }
Пример #26
0
 /// <summary>
 /// Clips the calls to calls which had a string input that is a partial match to text.
 /// </summary>
 /// <param name="text">String to partial match the string argument to.</param>
 public void clipCalls_hasBinaryArgumentMatch(byte[] data,bool onlyStartWith)
 {
     if (dataVis != null)
         dataVis = dataVis.clipCalls_hasBinaryArgumentMatch(data, onlyStartWith);
 }
        /// <summary>
        /// Starts recording data from the circular buffer. It automatically starts a new thread
        /// and reads in data at an interval of 'refreshRate' milliseconds.
        /// </summary>
        /// <param name="refreshTime">Refresh rate in milliseconds. ie. 100 for ten times a second.</param>
        public void startRecording(int refreshTime)
        {
            // Update the parameters
            if (data != null)
            {
                lock (data)
                    data = new oBufferTimeData();
            }
            else
            {
                data = new oBufferTimeData();
            }

            lastOffset = oMemoryFunctions.ReadMemoryDword(oProcess.activeProcess, offsetAddress);
            record = true;
            this.refreshTime = refreshTime;
            lastRecordTime = DateTime.Now;

            // Create the data recording thread
            if (recordingThread != null && recordingThread.IsAlive)
                recordingThread.Abort();
            recordingThread = new Thread(new ThreadStart(update));
            recordingThread.Start();
        }
Пример #28
0
 /// <summary>
 /// Clips the calls to only calls which received a string as an input.
 /// </summary>
 public void clipCalls_hasStringArgument()
 {
     if (dataVis != null)
         dataVis = dataVis.clipCalls_hasStringArgument();
 }