/// <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); } }
/// <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); } }
/// <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> /// 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); }
/// <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); } }
/// <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); } }
/// <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(); } }
public void clipCalls_addressSource(RANGE_PARSE_4BYTE range) { if (dataVis != null) { dataVis = dataVis.clipCalls_addressSource(range); } }
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); } }
/// <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(); }
/// <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); } }
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(); }
/// <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(); } }
/// <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); }
public void clipCalls_addressStack(RANGE_PARSE_4BYTE range) { if (dataVis != null) dataVis = dataVis.clipCalls_addressStack(range); }
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(); }
/// <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; }
/// <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); }
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); } }
/// <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(); } }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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(); }
/// <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(); }