Add retaddr command

pull/157/head^2
Zach Riggle 9 years ago
parent e8b4fbf8e5
commit 5f0e84294c

@ -39,6 +39,7 @@ import pwndbg.commands.ropper
import pwndbg.commands.search
import pwndbg.commands.segments
import pwndbg.commands.shell
import pwndbg.commands.stack
import pwndbg.commands.start
import pwndbg.commands.telescope
import pwndbg.commands.theme

@ -0,0 +1,38 @@
import argparse
import gdb
import pwndbg.arch
import pwndbg.chain
import pwndbg.commands
import pwndbg.regs
import pwndbg.vmmap
p = argparse.ArgumentParser(description='''
Print out the stack addresses that contain return addresses
''')
@pwndbg.commands.ArgparsedCommand(p)
def retaddr():
sp = pwndbg.regs.sp
stack = pwndbg.vmmap.find(sp)
# Enumerate all return addresses
frame = gdb.newest_frame()
addresses = []
while frame:
addresses.append(frame.pc())
frame = frame.older()
# Find all of them on the stack
start = stack.vaddr
stop = start + stack.memsz
while addresses and start < sp < stop:
value = pwndbg.memory.u(sp)
if value in addresses:
index = addresses.index(value)
del addresses[:index]
print(pwndbg.chain.format(sp))
sp += pwndbg.arch.ptrsize
Loading…
Cancel
Save