mirror of
https://github.com/rizinorg/rz-pipe.git
synced 2026-11-07 17:51:11 -10:00
95 lines
2.3 KiB
Python
Executable File
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()
|