mirror of
https://github.com/rizinorg/rz-pipe.git
synced 2026-11-08 09:29:34 -10:00
68 lines
1.2 KiB
Python
68 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
import rzpipe
|
|
import sys
|
|
import os
|
|
|
|
rz = rzpipe.open("/bin/ls")
|
|
libpath = ["", ".", "/lib", "/usr/lib"]
|
|
output = "aa"
|
|
# output = 'dot'
|
|
|
|
done = {}
|
|
|
|
|
|
def findlib(lib):
|
|
if os.path.isfile(lib):
|
|
return lib
|
|
for a in libpath:
|
|
if os.path.isfile("%s/%s" % (a, lib)):
|
|
return "%s/%s" % (a, lib)
|
|
return []
|
|
|
|
|
|
def getlibs(lib):
|
|
return rz.syscmdj("rabin2 -lj %s" % (lib))["libs"]
|
|
|
|
|
|
def filter(s):
|
|
return s.replace("-", "_").replace("+", "x")
|
|
|
|
|
|
def makeNode(name):
|
|
rz.cmd("agn %s" % (filter(name)))
|
|
|
|
|
|
def makeEdge(f, t):
|
|
rz.cmd("age %s %s" % (filter(f), filter(t)))
|
|
|
|
|
|
def graphlibs(src, root):
|
|
hs = src.replace("/", "_")
|
|
hs = hs.replace("-", "_")
|
|
hs = hs.replace("+", "x")
|
|
try:
|
|
if done[hs]:
|
|
return
|
|
except:
|
|
done[hs] = True
|
|
src = findlib(src)
|
|
makeNode(src)
|
|
for lib in getlibs(src):
|
|
lib = findlib(lib)
|
|
makeNode(lib)
|
|
makeEdge(src, lib)
|
|
graphlibs(lib, src)
|
|
|
|
|
|
if len(sys.argv) > 1:
|
|
path = sys.argv[1]
|
|
graphlibs(path, None)
|
|
if output == "dot":
|
|
print(rz.cmd("aggd"))
|
|
else:
|
|
print(rz.cmd("e scr.color=true;agg"))
|
|
rz.quit()
|
|
else:
|
|
print("Usage: libgraph.py [path-to-bin]")
|
|
sys.exit(1)
|