def initial_hook(*a): if show_tip and not pwndbg.decorators.first_prompt: colored_tip = re.sub( "`(.*?)`", lambda s: message.warn(s.group()[1:-1]), get_tip_of_the_day() ) print( message.prompt("------- tip of the day") + message.system(" (disable with %s)" % message.notice("set show-tips off")) + message.prompt(" -------") ) print((colored_tip)) pwndbg.decorators.first_prompt = True prompt_hook(*a) gdb.prompt_hook = prompt_hook
def malloc_chunk(addr, fake=False): """ Prints out the malloc_chunk at the specified address. """ main_heap = pwndbg.heap.current if not isinstance(addr, six.integer_types): addr = int(addr) chunk = read_chunk(addr) size = int(chunk['size']) actual_size = size & ~7 prev_inuse, is_mmapped, non_main_arena = main_heap.chunk_flags(size) arena = None if not fake and non_main_arena: arena = main_heap.get_heap(addr)['ar_ptr'] fastbins = [] if fake else main_heap.fastbins(arena) header = M.get(addr) if fake: header += message.prompt(' FAKE') if prev_inuse: if actual_size in fastbins: header += message.hint(' FASTBIN') else: header += message.hint(' PREV_INUSE') if is_mmapped: header += message.hint(' IS_MMAPED') if non_main_arena: header += message.hint(' NON_MAIN_ARENA') print(header, chunk["value"]) return chunk
def malloc_chunk(addr,fake=False): """ Prints out the malloc_chunk at the specified address. """ main_heap = pwndbg.heap.current if not isinstance(addr, six.integer_types): addr = int(addr) chunk = read_chunk(addr) size = int(chunk['size']) actual_size = size & ~7 prev_inuse, is_mmapped, non_main_arena = main_heap.chunk_flags(size) arena = None if not fake and non_main_arena: arena = main_heap.get_heap(addr)['ar_ptr'] fastbins = [] if fake else main_heap.fastbins(arena) header = M.get(addr) if fake: header += message.prompt(' FAKE') if prev_inuse: if actual_size in fastbins: header += message.hint(' FASTBIN') else: header += message.hint(' PREV_INUSE') if is_mmapped: header += message.hint(' IS_MMAPED') if non_main_arena: header += message.hint(' NON_MAIN_ARENA') print(header, chunk["value"]) return chunk
def set_prompt(): prompt = "pwndbg> " if not disable_colors: prompt = "\x02" + prompt + "\x01" # STX + prompt + SOH prompt = message.prompt(prompt) prompt = "\x01" + prompt + "\x02" # SOH + prompt + STX gdb.execute('set prompt %s' % prompt)
def malloc_chunk(addr, fake=False): """ Prints out the malloc_chunk at the specified address. """ main_heap = pwndbg.heap.current if not isinstance(addr, six.integer_types): addr = int(addr) chunk = read_chunk(addr) size = int(chunk['size']) actual_size = size & ~7 prev_inuse, is_mmapped, non_main_arena = main_heap.chunk_flags(size) arena = None if not fake and non_main_arena: arena = main_heap.get_heap(addr)['ar_ptr'] fastbins = [] if fake else main_heap.fastbins(arena) header = M.get(addr) if fake: header += message.prompt(' FAKE') if prev_inuse: if actual_size in fastbins: header += message.hint(' FASTBIN') else: header += message.hint(' PREV_INUSE') if is_mmapped: header += message.hint(' IS_MMAPED') if non_main_arena: header += message.hint(' NON_MAIN_ARENA') ## edit start chunk_str = '{\n' for key in chunk["value"].type.keys(): if (str(key) == "prev_size" or str(key) == "size"): chunk_str += ' %s = %s [%s]\n' % (str(key), hex(int(chunk["value"][key])), int(chunk["value"][key])) else: chunk_str += ' %s = %s\n' % (str(key), hex(int(chunk["value"][key]))) chunk_str += '}' print(header, chunk_str) ## edit end return chunk
import pwndbg.decorators import pwndbg.events import pwndbg.gdbutils import pwndbg.memoize from pwndbg.color import disable_colors from pwndbg.color import message funcs_list_str = ', '.join(message.notice('$' + f.name) for f in pwndbg.gdbutils.functions.functions) hint_lines = ( 'loaded %i commands. Type %s for a list.' % (len(pwndbg.commands.commands), message.notice('pwndbg [filter]')), 'created %s gdb functions (can be used with print/break)' % funcs_list_str ) for line in hint_lines: print(message.prompt('pwndbg: ') + message.system(line)) cur = (gdb.selected_inferior(), gdb.selected_thread()) def prompt_hook(*a): global cur pwndbg.decorators.first_prompt = True new = (gdb.selected_inferior(), gdb.selected_thread()) if cur != new: pwndbg.events.after_reload(start=False) cur = new if pwndbg.proc.alive and pwndbg.proc.thread_is_stopped:
from pwndbg.color import disable_colors from pwndbg.color import message from pwndbg.tips import get_tip_of_the_day funcs_list_str = ", ".join( message.notice("$" + f.name) for f in pwndbg.gdbutils.functions.functions ) hint_lines = ( "loaded %i commands. Type %s for a list." % (len(pwndbg.commands.commands), message.notice("pwndbg [filter]")), "created %s gdb functions (can be used with print/break)" % funcs_list_str, ) for line in hint_lines: print(message.prompt("pwndbg: ") + message.system(line)) # noinspection PyPackageRequirements show_tip = pwndbg.config.Parameter( "show-tips", True, "whether to display the tip of the day on startup" ) cur = None def initial_hook(*a): if show_tip and not pwndbg.decorators.first_prompt: colored_tip = re.sub( "`(.*?)`", lambda s: message.warn(s.group()[1:-1]), get_tip_of_the_day() ) print(