mirror of https://github.com/pwndbg/pwndbg.git
Add retaddr command
parent
e8b4fbf8e5
commit
5f0e84294c
@ -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…
Reference in new issue