def get_resolve():
    # il2cpp::vm::InternalCalls::Resolve
    resolve = idc.LocByName('_ZN6il2cpp2vm13InternalCalls7ResolveEPKc')
    addr = idc.RfirstB(resolve)

    while addr != idc.BADADDR:
        name = idc.Name(addr)

        if name == '__ZN6il2cpp2vm13InternalCalls7ResolveEPKc':
            return addr

        addr = idc.RnextB(resolve, addr)

    return idc.BADADDR
def analyze_invoke_unityengine():
    print('analyze_invoke_unityengine')

    resolve = get_resolve()

    print('  %X: %s' % (resolve, idc.Name(resolve)))

    if resolve != idc.BADADDR:
        return

    addr = idc.RfirstB(resolve)

    while addr != idc.BADADDR:
        analyze_invoke(addr)

        addr = idc.RnextB(resolve, addr)
def analyze_invoke_library():
  print('analyze_invoke_library')

  resolve = idc.LocByName('._ZN6il2cpp2vm14PlatformInvoke7ResolveERK16PInvokeArguments')

  print('  %X: %s' % (resolve, idc.Name(resolve)))

  if resolve == idc.BADADDR:
    return

  addr = idc.RfirstB(resolve)

  while addr != idc.BADADDR:
    analyze_invoke2(addr)

    addr = idc.RnextB(resolve, addr)