IDA: Optimize function creation (#75)

This commit is contained in:
lifeengines
2020-09-22 02:25:35 +08:00
committed by GitHub
parent 2afdc8b421
commit db1805cb12
3 changed files with 22 additions and 5 deletions

View File

@@ -8,7 +8,7 @@ from ghidra.program.model.symbol import SourceType
def SetName(addr, name): def SetName(addr, name):
createLabel(toAddr(addr), name, True) createLabel(toAddr(addr), name, True)
def MakeFunction(start, name=None): def MakeFunction(start, name=None, addrMax=None):
addr = toAddr(start) addr = toAddr(start)
# Don't override existing functions # Don't override existing functions
fn = getFunctionAt(addr) fn = getFunctionAt(addr)

View File

@@ -7,8 +7,16 @@ def SetName(addr, name):
new_name = name + '_' + str(addr) new_name = name + '_' + str(addr)
ret = idc.set_name(addr, new_name, SN_NOWARN | SN_NOCHECK) ret = idc.set_name(addr, new_name, SN_NOWARN | SN_NOCHECK)
def MakeFunction(start): def MakeFunction(start, name=None, addrMax=None):
ida_funcs.add_func(start) ida_funcs.add_func(start)
#limit end function to maxAddr if any
if addrMax is None:
return
addrEnd = idc.get_func_attr(start,FUNCATTR_END)
if addrEnd == idaapi.BADADDR:
return
if addrEnd > addrMax:
idc.set_func_end(start,addrMax)
def MakeArray(addr, numItems, cppType): def MakeArray(addr, numItems, cppType):
SetType(addr, cppType) SetType(addr, cppType)

View File

@@ -97,8 +97,17 @@ def ProcessJSON(jsonData):
# Function boundaries # Function boundaries
print('Processing function boundaries') print('Processing function boundaries')
for d in jsonData['functionAddresses']: functionAddresses = jsonData['functionAddresses']
MakeFunction(int(d, 0)) functionAddresses.sort()
count = len(functionAddresses)
for i in range(count):
addrStart = int(functionAddresses[i],0)
if addrStart == 0:
continue
addrNext = None
if i != count -1:
addrNext = int(functionAddresses[i+1],0)
MakeFunction(addrStart,None,addrNext)
# IL2CPP type metadata # IL2CPP type metadata
print('Processing IL2CPP type metadata') print('Processing IL2CPP type metadata')