Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import idautils
- import idc
- REGISTERS = {
- 1: 'R0',
- 2: 'R1',
- 3: 'R2',
- 4: 'R3',
- }
- def get_debug_func_ea(function_str):
- for f in Functions():
- name = idaapi.get_func_name(f)
- if name == function_str:
- return f
- return None
- def get_nth_arg(start_ea, end_ea, n=0):
- for addr in range(start_ea, end_ea, 4)[::-1]:
- if not DecodeInstruction(addr):
- continue
- if DecodeInstruction(addr).get_canon_mnem() == 'LDR' and idc.print_operand(addr, 0) == REGISTERS[n]:
- return idc.get_operand_value(addr, 1)
- return None
- ea = get_debug_func_ea('ProcUserLog')
- for ref in CodeRefsTo(ea, 1):
- caller_name = idaapi.get_func_name(ref)
- caller_address = idc.get_name_ea_simple(caller_name)
- if not caller_name:
- continue
- if caller_name.startswith('sub_'):
- if not ref:
- continue
- ea = get_nth_arg(ref - 0x20, ref, 3)
- if ea:
- if get_segm_name(ea) == '.text':
- ea = idc.get_wide_dword(ea)
- if get_segm_name(ea) == '.rodata':
- fn_name = idc.get_strlit_contents(ea)
- if fn_name:
- print '--------------------------------------------------------'
- print 'Function Address: ' + hex(caller_address)
- print 'Function Old Name: ' + caller_name
- print 'Function New Name: ' + fn_name
- print '---------------------------------------------------------'
- idc.set_name(caller_address, fn_name, 0x800)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement