1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#!/usr/bin/python
# -- pancake
import sys
from r_asm import *
from r_util import *
from r_bin import *
try:
program = sys.argv[1]
except:
print "Usage: test-r2rc [path-to-program]"
sys.exit (1)
a = RAsm ()
a.use ("x86.nasm")
b = RBin ()
off_printf = 0
b.load (program, None)
baddr = b.get_baddr ()
for i in b.get_imports ():
if i.name == "printf":
off_printf = baddr+i.rva
break
if off_printf == 0:
print "Program %s does not imports 'printf'"%program
sys.exit(1)
r2rc_code="""
printf@alias(0x%08lx);
main@global(32,32) {
printf ("Hello World\n");
}
"""%(off_printf)
r2rc_asm = RSystem.cmd_str ("r2rc", r2rc_code)[0]
code = a.massemble (r2rc_asm)
if code is None:
print "Cannot assemble"
else:
print code.buf_hex
|