private void objectsListBox_SelectedIndexChanged(object sender, EventArgs e) { domainTraverser.curObject = objectsListBox.SelectedItem; if (domainTraverser.curObject != null) { fieldsListBox.Items.Clear(); instanceMethodListBox.Items.Clear(); propertiesListBox.Items.Clear(); try { foundObject objectFound = domainTraverser.curObject as foundObject; if (objectFound != null) { setConstant.Text = objectFound.addrOfObj.ToString("X"); domainTraverser.curObject = objectFound.targetObject; } if (domainTraverser.curObject != null) { MethodInfo[] instanceMethods = domainTraverser.curObject.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); instanceMethodListBox.Items.AddRange(instanceMethods); fields = domainTraverser.curObject.GetType().GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); fieldsListBox.Items.AddRange(fields); properties = domainTraverser.curObject.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); propertiesListBox.Items.AddRange(properties); } } catch (Exception) { } } }
private void objTreeView_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode theSelectedNode = objTreeView.SelectedNode; if (foundObjectsDict.ContainsKey(theSelectedNode)) { domainTraverser.curObject = foundObjectsDict[theSelectedNode]; fieldsListBox.Items.Clear(); instanceMethodListBox.Items.Clear(); propertiesListBox.Items.Clear(); try { foundObject objectFound = domainTraverser.curObject as foundObject; if (objectFound != null) { setConstant.Text = objectFound.addrOfObj.ToString("X"); domainTraverser.curObject = objectFound.targetObject; } if (domainTraverser.curObject != null) { MethodInfo[] instanceMethods = domainTraverser.curObject.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); instanceMethodListBox.Items.AddRange(instanceMethods); fields = domainTraverser.curObject.GetType().GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); fieldsListBox.Items.AddRange(fields); properties = domainTraverser.curObject.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); propertiesListBox.Items.AddRange(properties); } } catch (Exception) { } } else if (propertiesDict.ContainsKey(theSelectedNode)) { properyInfoString = propertiesDict[theSelectedNode].ToString(); } else if (fieldsDict.ContainsKey(theSelectedNode)) { fieldInfoString = fieldsDict[theSelectedNode].ToString(); } }
private void changeObjTree() { try { objTreeView.Nodes.Clear(); object thisObj = null; foreach (object obj in objectsListBox.Items) { foundObject objectFound = obj as foundObject; if (objectFound == null) { continue; } thisObj = objectFound.targetObject; TreeNode thisObjectTN = new TreeNode(objectFound.name); foundObjectsDict.Add(thisObjectTN, thisObj); TreeNode newObject = new TreeNode("Properties"); newObject = getAllProperties(newObject, thisObj); thisObjectTN.Nodes.Add(newObject); newObject = new TreeNode("Fields"); newObject = getAllFields(newObject, thisObj); thisObjectTN.Nodes.Add(newObject); objTreeView.Nodes.Add(thisObjectTN); } objectsListBox.Items.Clear(); foreach (KeyValuePair <TreeNode, object> entry in foundObjectsDict) { objectsListBox.Items.Add(entry.Value); } } catch { } }
public static void getAddresses(System.Windows.Forms.ListBox objectsListBox) { //see if clr is version 2 or 4 clrVersion = Environment.Version.ToString().ElementAt(0); object thisObject = objectsListBox.SelectedItem; object foundObject = null; IntPtr obj = IntPtr.Zero; IntPtr methodTable = IntPtr.Zero; List <IntPtr> matchedObjects = null; objectsListBox.Items.Clear(); objectsListBox.Items.Add(thisObject); if (thisObject.GetType() == typeof(foundObject)) { foundObject thisFoundObject = thisObject as foundObject; thisObject = thisFoundObject.targetObject; } //set subAmount on stack for each clr version if (IntPtr.Size == 4 && clrVersion == '2') { if (clrVersion == '2') { clrSub = 1; } else if (clrVersion == '4') { clrSub = 2; } } if (IntPtr.Size == 4) { obj = getObjectAddr(thisObject); // System.Windows.Forms.MessageBox.Show("OG Object is at " + obj.ToString("X")); methodTable = getObjectMethodTable(obj, getMethodTablex86); if (methodTable == IntPtr.Zero) { return; } Console.WriteLine("OG Object is at " + obj.ToString("X")); Console.WriteLine("method table is at " + methodTable.ToString("X")); // System.Windows.Forms.MessageBox.Show("OG Object is at " + obj.ToString("X")); // System.Windows.Forms.MessageBox.Show("method table is at " + methodTable.ToString("X")); matchedObjects = getAllObjects(obj, methodTable, getMethodTablex86, getMethodTablex86); } else if (IntPtr.Size == 8) { obj = getObjectAddr64(thisObject); // System.Windows.Forms.MessageBox.Show("OG Object is at " + obj.ToString("X")); methodTable = getObjectMethodTable(obj, getMethodTablex64); // System.Windows.Forms.MessageBox.Show("OG MEtodTable is at " + methodTable.ToString("X")); matchedObjects = getAllObjects(obj, methodTable, getMethodTablex64, get3rdEntryx64); } //unsure if this foreach is needed right now... just take matchedObjects to array? foreach (IntPtr actualObj in matchedObjects) { if (actualObj != null) { if (IntPtr.Size == 4) { foundObject = GetInstance(actualObj); } else if (IntPtr.Size == 8) { foundObject = GetInstance64(actualObj); } //avoid all the thinLocked objects // var lockedBySomeoneElse = !System.Threading.Monitor.TryEnter(foundObject); // if (!lockedBySomeoneElse) // { // System.Threading.Monitor.Exit(foundObject); foundObject objTarget = new foundObject(); objTarget.targetObject = foundObject; objTarget.name = thisObject.ToString(); objTarget.addrOfObj = actualObj; objectsListBox.Items.Add(objTarget); //} } } // System.Windows.Forms.MessageBox.Show("num of objects is " + objectsListBox.Items.Count); }