Files
2020-12-09 17:57:17 +08:00

95 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Author: [email protected]
#
# $ rizin -qc '#!pipe python ipython.py' /bin/ls
#
import os
import sys
import rzpipe
import IPython
rz = None
try:
pipes = [int(os.environ["RZ_PIPE_IN"]), int(os.environ["RZ_PIPE_OUT"])]
rz = rzpipe.open("#!pipe")
except:
print("This script must be run from inside rizin:")
print(" $ rizin -qi ipython.py /bin/ls")
sys.exit(1)
class RizinBin:
rz = None
def __init__(self, rz):
self.rz = rz
self.baddr = 0
self.filename = rz.cmd("i~file:0[1]").strip()
def imports(self):
if self.baddr != 0:
return self.rz.syscmdj(
"rz-bin -B %d -ij '%s'" % (self.baddr, self.filename)
)["imports"]
else:
return self.rz.syscmdj("rz-bin -ij '%s'" % (self.filename))["imports"]
def symbols(self):
if self.baddr != 0:
return self.rz.syscmdj(
"rz-bin -B %d -sj '%s'" % (self.baddr, self.filename)
)["symbols"]
else:
return self.rz.syscmdj("rz-bin -sj '%s'" % (self.filename))["symbols"]
def entries(self):
if self.baddr != 0:
return self.rz.syscmdj(
"rz-bin -B %d -ej '%s'" % (self.baddr, self.filename)
)["entries"]
else:
return self.rz.syscmdj("rz-bin -ej '%s'" % (self.filename))["entries"]
class Rizin:
rz = None
Bin = None
def __init__(self, rz):
self.rz = rz
self.Bin = RizinBin(rz)
def seek(self, address):
if type(address) == int:
address = str(address)
self.rz.cmd("s %s" % (address))
return self
def disasm(self, *arg): # address, count):
address = ""
count = 16
if len(arg) > 0:
address = arg[0]
if type(address) == int:
address = str(address)
if len(arg) > 1:
count = arg[1]
print(self.rz.cmd("e scr.color=true;pd %d @ %s" % (count, address)))
return self
def hexdump(self, address, count):
if type(address) == int:
address = str(address)
print(self.rz.cmd("e scr.color=true;px %d @ %s" % (count, address)))
return self
r = Rizin(rz)
r.disasm("entry0", 10)
r.hexdump("entry0", 10)
# Enter the shell
IPython.embed()