Aurora
Adminer
Auto Root
WP Admin
cPanel Reset
Anti Backdoor
Root
usr
share
glib-2.0
gdb
Upload
New Folder
New File
Name
Size
Permissions
Actions
..
-
-
-
Upload File
Select File
New Folder
Folder Name
New File
File Name
Add WordPress Admin
Database Host
Database Name
Database User
Database Password
Admin Username
Admin Password
cPanel Password Reset
Email Address
Edit: gobject_gdb.py
import gdb import glib_gdb import sys if sys.version_info[0] >= 3: long = int else: import itertools map = itertools.imap # FrameDecorator is new in gdb 7.7, so we adapt to its absence. try: import gdb.FrameDecorator HAVE_GDB_FRAMEDECORATOR = True FrameDecorator = gdb.FrameDecorator.FrameDecorator except ImportError: HAVE_GDB_FRAMEDECORATOR = False # This is not quite right, as local vars may override symname def read_global_var(symname): return gdb.selected_frame().read_var(symname) def g_type_to_typenode(gtype): def lookup_fundamental_type(typenode): if typenode == 0: return None val = read_global_var("static_fundamental_type_nodes") if val is None: return None return val[typenode >> 2].address gtype = long(gtype) typenode = gtype - gtype % 4 if typenode > (255 << 2): typenode = gdb.Value(typenode).cast(gdb.lookup_type("TypeNode").pointer()) else: typenode = lookup_fundamental_type(typenode) return typenode def g_type_to_name(gtype): typenode = g_type_to_typenode(gtype) if typenode is not None: return glib_gdb.g_quark_to_string(typenode["qname"]) return None def is_g_type_instance(val): def is_g_type_instance_helper(type): if str(type) == "GTypeInstance": return True while type.code == gdb.TYPE_CODE_TYPEDEF: type = type.target() if type.code != gdb.TYPE_CODE_STRUCT: return False fields = type.fields() if len(fields) < 1: return False first_field = fields[0] return is_g_type_instance_helper(first_field.type) type = val.type if type.code != gdb.TYPE_CODE_PTR: return False type = type.target() return is_g_type_instance_helper(type) def g_type_name_from_instance(instance): if long(instance) != 0: try: inst = instance.cast(gdb.lookup_type("GTypeInstance").pointer()) klass = inst["g_class"] gtype = klass["g_type"] name = g_type_to_name(gtype) return name except RuntimeError: pass return None class GTypePrettyPrinter: "Prints a GType instance pointer" def __init__(self, val): self.val = val def to_string(self): name = g_type_name_from_instance(self.val) if name: return ("0x%x [%s]") % (long(self.val), name) return ("0x%x") % (long(self.val)) def is_g_type_class_instance(val): type = val.type if type.code != gdb.TYPE_CODE_PTR: return False return str(type.target()) == "GTypeClass" class GTypeHandlePrettyPrinter: "Prints a GType instance" def __init__(self, val, hint=""): self.val = val self.hint = hint def to_string(self): typenode = g_type_to_typenode(self.val) if typenode is not None: name = glib_gdb.g_quark_to_string(typenode["qname"]) s = ("0x%x [%s%s") % (long(self.val), self.hint, name) for i in range(1, int(typenode["n_supers"])): node = g_type_to_typenode(typenode["supers"][i]) if node: name = glib_gdb.g_quark_to_string(node["qname"]) else: name = "???" s += "/" + name return s + "]" else: return ("0x%x") % (long(self.val)) def pretty_printer_lookup(val): if is_g_type_instance(val): return GTypePrettyPrinter(val) if str(val.type) == "GType": return GTypeHandlePrettyPrinter(val) if is_g_type_class_instance(val): return GTypeHandlePrettyPrinter(val["g_type"], "g_type: ") return None def get_signal_name(id): if id is None: return None id = long(id) if id == 0: return None val = read_global_var("g_signal_nodes") max_s = read_global_var("g_n_signal_nodes") max_s = long(max_s) if id < max_s: return val[id]["name"].string() return None def frame_name(frame): return str(frame.function()) def frame_var(frame, var): return frame.inferior_frame().read_var(var) class SignalFrame(FrameDecorator): def __init__(self, frames): FrameDecorator.__init__(self, frames[-1]) self.frame = frames[-1] self.frames = frames def name(self): return "signal-emission" def read_var(self, frame, name, array=None): try: v = frame_var(frame, name) if v is None or v.is_optimized_out: return None if array is not None: array.append(v) return v except ValueError: return None def read_object(self, frame, name, array=None): try: v = frame_var(frame, name) if v is None or v.is_optimized_out: return None v = v.cast(gdb.lookup_type("GObject").pointer()) # Ensure this is a somewhat correct object pointer if v is not None and g_type_name_from_instance(v): if array is not None: array.append(v) return v return None except ValueError: return None def append(self, array, obj): if obj is not None: array.append(obj) def or_join_array(self, array): if len(array) == 0: return "???" else: return " or ".join(set(map(str, array))) def get_detailed_signal_from_frame(self, frame, signal): detail = self.read_var(frame, "detail") detail = glib_gdb.g_quark_to_string(detail) if detail is not None: return signal + ":" + detail else: return detail def function(self): instances = [] signals = [] for frame in self.frames: name = frame_name(frame) if name == "signal_emit_unlocked_R": self.read_object(frame, "instance", instances) node = self.read_var(frame, "node") if node: signal = node["name"].string() signal = self.get_detailed_signal_from_frame(frame, signal) self.append(signals, signal) if name == "g_signal_emitv": instance_and_params = self.read_var(frame, "instance_and_params") if instance_and_params: instance = instance_and_params[0]["v_pointer"].cast( gdb.Type("GObject").pointer() ) self.append(instances, instance) id = self.read_var(frame, "signal_id") signal = get_signal_name(id) if signal: signal = self.get_detailed_signal_from_frame(frame, signal) self.append(signals, signal) if name == "g_signal_emit_valist" or name == "g_signal_emit": self.read_object(frame, "instance", instances) id = self.read_var(frame, "signal_id") signal = get_signal_name(id) if signal: signal = self.get_detailed_signal_from_frame(frame, signal) self.append(signals, signal) if name == "g_signal_emit_by_name": self.read_object(frame, "instance", instances) self.read_var(frame, "detailed_signal", signals) break instance = self.or_join_array(instances) signal = self.or_join_array(signals) return "<emit signal %s on instance %s>" % (signal, instance) def elided(self): return self.frames[0:-1] def describe(self, stream, full): stream.write(" " + self.function() + "\n") class GFrameDecorator: def __init__(self, iter): self.queue = [] self.iter = iter def __iter__(self): return self def fill(self): while len(self.queue) <= 8: try: f = next(self.iter) self.queue.append(f) except StopIteration: return def find_signal_emission(self): for i in range(min(len(self.queue), 3)): if frame_name(self.queue[i]) == "signal_emit_unlocked_R": return i return -1 def next(self): # Ensure we have enough frames for a full signal emission self.fill() # Are we at the end? if len(self.queue) == 0: raise StopIteration emission = self.find_signal_emission() if emission > 0: start = emission while True: if start == 0: break prev_name = frame_name(self.queue[start - 1]) if prev_name.find("_marshal_") >= 0 or prev_name == "g_closure_invoke": start = start - 1 else: break end = emission + 1 while end < len(self.queue): if frame_name(self.queue[end]) in [ "g_signal_emitv", "g_signal_emit_valist", "g_signal_emit", "g_signal_emit_by_name", "_g_closure_invoke_va", ]: end = end + 1 else: break signal_frames = self.queue[start:end] new_frames = [SignalFrame(signal_frames)] self.queue[start:end] = new_frames return self.queue.pop(0) def __next__(self): return self.next() class GFrameFilter(object): name = "glib" enabled = True priority = 100 def filter(self, iterator): return GFrameDecorator(iterator) def register(obj): if obj is None: obj = gdb if HAVE_GDB_FRAMEDECORATOR: filter = GFrameFilter() obj.frame_filters[filter.name] = filter obj.pretty_printers.append(pretty_printer_lookup)