Skip to content

Commit

Permalink
Adjust radare2 output
Browse files Browse the repository at this point in the history
Forcing output to have \n\r using replace
  • Loading branch information
rubendal committed May 17, 2019
1 parent 719026b commit a31afd3
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 13 deletions.
9 changes: 8 additions & 1 deletion function_params.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,11 @@ method.app::sv_animcmd.wait_lua_State__float,1,Frames
method.app::sv_animcmd.ATTACK_lua_State,33,ID|Part|Bone|Damage|Angle|KBG|FKB|BKB|Size|X|Y|Z|Hitlag|SDI|Clang/Rebound|FacingRestrict|SetWeight|ShieldDamage|Trip|Rehit|Reflectable|Absorbable|Flinchless|DisableHitlag|Direct/Indirect|Ground/Air|Hitbits|CollisionPart|FriendlyFire|Effect|SFXLevel|SFXType|Type
method.app::sv_animcmd.ATTACK_lua_State,36,ID|Part|Bone|Damage|Angle|KBG|FKB|BKB|Size|X|Y|Z|X2|Y2|Z2|Hitlag|SDI|Clang/Rebound|FacingRestrict|SetWeight|ShieldDamage|Trip|Rehit|Reflectable|Absorbable|Flinchless|DisableHitlag|Direct/Indirect|Ground/Air|Hitbits|CollisionPart|FriendlyFire|Effect|SFXLevel|SFXType|Type
method.app::lua_bind.AttackModule__set_add_reaction_frame_impl_app::BattleObjectModuleAccessor__int_float_bool,3,ID|Frames|Unk
method.app::sv_animcmd.ATK_SET_SHIELD_SETOFF_MUL_lua_State,2,ID|ShieldHitstunMul
method.app::sv_animcmd.ATK_SET_SHIELD_SETOFF_MUL_lua_State,2,ID|ShieldHitstunMul
method.app::sv_animcmd.ATTACK_ABS_lua_State,16,Kind|ID|Damage|Angle|KBG|FKB|BKB|SDI|Hitlag|FacingRestrict|Unk|DisableHitlag|Effect|SFXLevel|SFXType|Type
method.app::lua_bind.WorkModule__on_flag_impl_app::BattleObjectModuleAccessor__int,1,Flag
method.app::lua_bind.WorkModule__off_flag_impl_app::BattleObjectModuleAccessor__int,1,Flag
method.app::lua_bind.AttackModule__clear_impl_app::BattleObjectModuleAccessor__int_bool,1,ID
method.app::lua_bind.GrabModule__set_rebound_impl_app::BattleObjectModuleAccessor__bool,1,CanCatchRebound
method.app::sv_animcmd.CATCH_lua_State,11,ID|Bone|Size|X|Y|Z|X2|Y2|Z2|Status|Ground/Air
method.app::sv_animcmd.CATCH_lua_State,8,ID|Bone|Size|X|Y|Z|Status|Ground/Air
9 changes: 5 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from parseAnimcmdList import ParseAnimcmdList
from parseAnimcmdStart import ParseAnimcmdStart
from scriptparser import Parser
from util import adjustr2Output

output = "output"
testParser = False
Expand All @@ -19,13 +20,13 @@ def dump(file):
return

r2 = r2pipe.open(file)
sections = SectionTable(r2.cmd("is")).sections
sections = SectionTable(adjustr2Output(r2.cmd("is"))).sections
r2.cmd('e anal.bb.maxsize = 0x10000')
game = next((x for x in sections if "lua2cpp::create_agent_fighter_animcmd_game_" in x.function and "_share_" not in x.function), None)
if game:
print("{0} found".format(game.function))

af = r2.cmd('s {0};af;pdf'.format(game.getAddress()))
af = adjustr2Output(r2.cmd('s {0};af;pdf'.format(game.getAddress())))

p = ParseAnimcmdList(af, sections)

Expand Down Expand Up @@ -60,11 +61,11 @@ def dump(file):
os.makedirs("{0}/{1}/{2}/{3}".format(output, filename, article.findHashValue(),"parser"))

for hash in article.scriptsHash:
scriptStart = r2.cmd('s {0};pd 20'.format(hash.getAddress()))
scriptStart = adjustr2Output(r2.cmd('s {0};pd 20'.format(hash.getAddress())))
scriptAddress = ParseAnimcmdStart(scriptStart).address

if scriptAddress:
script = r2.cmd('s {0};aF;pdf'.format(hex(scriptAddress)))
script = adjustr2Output(r2.cmd('s {0};aF;pdf'.format(hex(scriptAddress))))

if testParser:
try:
Expand Down
30 changes: 22 additions & 8 deletions scriptparser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import re
from hash40 import Hash40
from util import adjustr2Output

class Constant:
def __init__(self, index, name):
Expand Down Expand Up @@ -301,7 +302,7 @@ def parse_bl(self, bl):
if 'fcn.' in bl:
bl = bl.replace('fcn.', '0x')
if self.r2:
script = self.r2.cmd('s {0};aF;pdf'.format(hex(int(bl,16))))
script = adjustr2Output(self.r2.cmd('s {0};aF;pdf'.format(hex(int(bl,16)))))
self.SubScript = SubScript(self.r2, script, self.Sections)
elif bl == 'method.lib::L2CValue.L2CValue_int':
if isinstance(self.CurrentValue,Value):
Expand Down Expand Up @@ -447,23 +448,36 @@ def parse_ldr(self, ldr):
v = rn.value
else:
v = int(ldr.split(',')[2].replace(']','').replace('!','').strip(), 16)
register = next((x for x in self.Registers if x.register == r.replace('x', 'w') or x.register == r), None)
register = next((x for x in self.Registers if x.register == r), None)
if register:
register.value += v
if self.r2:
v = self.r2.cmd('s {0};pf f'.format(register.value))
v = adjustr2Output(self.r2.cmd('s {0};pf f'.format(register.value)))
v = float(v.split('=')[1].strip())
register2 = next((x for x in self.Registers if x.register == p.replace('x', 'w') or x.register == p), None)
register2 = next((x for x in self.Registers if x.register == p or x.register == p.replace('x', 'w')), None)
if register2:
register2.value = v
else:
self.Registers.append(Register(p, v))
self.CurrentValue = v
else:
self.Registers.append(Register(p, v))
if self.r2:
v = self.r2.cmd('s {0};pf f'.format(v))
self.CurrentValue = float(v.split('=')[1].strip())
register = next((x for x in self.Registers if x.register == r.replace('x','w')), None)
if register:
register.value += v
if self.r2:
v = adjustr2Output(self.r2.cmd('s {0};pf f'.format(register.value)))
v = float(v.split('=')[1].strip())
register2 = next((x for x in self.Registers if x.register == p or x.register == p.replace('x', 'w')), None)
if register2:
register2.value = v
else:
self.Registers.append(Register(p, v))
self.CurrentValue = v
else:
self.Registers.append(Register(p, v))
if self.r2:
v = adjustr2Output(self.r2.cmd('s {0};pf f'.format(v)))
self.CurrentValue = float(v.split('=')[1].strip())

def parse_orr(self, orr):
p = orr.split(',')[0]
Expand Down
4 changes: 4 additions & 0 deletions util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
def adjustr2Output(output):
if not '\r' in output:
return output.replace('\n','\n\r')
return output

0 comments on commit a31afd3

Please sign in to comment.