{"name": "check_prefix", "code": "void __fastcall check_prefix ( unsigned __int8 * @@a1@@ , unsigned __int8 * @@a2@@ ) { _QWORD @@v2@@ [ Number ] ; __int64 @@v3@@ ; if ( ! @@a1@@ || ! @@a2@@ || @@a1@@ [ Number ] != @@a2@@ [ Number ] || memcmp ( @@a1@@ , @@a2@@ , @@a2@@ [ Number ] >> Number ) || @@a1@@ [ Number ] != @@a2@@ [ Number ] ) { if ( @@a1@@ ) { set_ip_from_prefix ( @@v2@@ , @@a1@@ ) ; @@v3@@ = uip_ds6_addr_lookup ( @@v2@@ ) ; if ( @@v3@@ ) uip_ds6_addr_rm ( @@v3@@ ) ; } if ( @@a2@@ ) { set_ip_from_prefix ( @@v2@@ , @@a2@@ ) ; if ( ! uip_ds6_addr_lookup ( @@v2@@ ) ) uip_ds6_addr_add ( @@v2@@ , Number L , Number ) ; } } }", "source": [{"n": "a1", "t": {"T": 3, "t": "unsigned __int8"}, "location": "r56"}, {"n": "a2", "t": {"T": 3, "t": "unsigned __int8"}, "location": "r64"}, {"n": "v2", "t": {"T": 2, "n": 3, "s": 8, "t": "_QWORD"}, "location": "s32"}, {"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s8"}]}
{"name": "uip_ds6_addr_add", "code": "__int64 __fastcall uip_ds6_addr_add ( _QWORD * @@a1@@ , __int64 @@a2@@ , char @@a3@@ ) { __int64 @@v3@@ ; __int64 v4 ; if ( ( unsigned __int8 ) uip_ds6_list_loop ( byte_422C58 , Number , Number , @@a1@@ , Number , & locaddr ) != Number ) return Number L ; * ( _BYTE * ) locaddr = Number ; @@v3@@ = locaddr ; v4 = @@a1@@ [ Number ] ; * ( _QWORD * ) ( locaddr + Number ) = * @@a1@@ ; * ( _QWORD * ) ( @@v3@@ + Number ) = v4 ; * ( _BYTE * ) ( locaddr + Number ) = @@a3@@ ; if ( @@a2@@ ) { * ( _BYTE * ) ( locaddr + Number ) = Number ; stimer_set ( locaddr + Number , @@a2@@ ) ; } else { * ( _BYTE * ) ( locaddr + Number ) = Number ; } * ( _BYTE * ) ( locaddr + Number ) = Number ; loc_fipaddr = Number ; word_41FB92 = Number ; word_41FB94 = Number ; word_41FB96 = Number ; word_41FB98 = Number ; word_41FB9A = Number ; LOBYTE ( word_41FB9C ) = Number ; HIBYTE ( word_41FB9C ) = * ( ( _BYTE * ) @@a1@@ + Number ) ; word_41FB9E = * ( ( _WORD * ) @@a1@@ + Number ) ; uip_ds6_maddr_add ( & loc_fipaddr ) ; return locaddr ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "char", "s": 1}, "location": "r16"}, {"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r24"}, {"n": "a1", "t": {"T": 3, "t": "_QWORD"}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}]} {"name": "uip_ds6_addr_rm", "code": "void __fastcall uip_ds6_addr_rm ( __int64 @@a1@@ ) { if ( @@a1@@ ) { loc_fipaddr = Number ; word_41FB92 = Number ; word_41FB94 = Number ; word_41FB96 = Number ; word_41FB98 = Number ; word_41FB9A = Number ; LOBYTE ( word_41FB9C ) = Number ; HIBYTE ( word_41FB9C ) = * ( _BYTE * ) ( @@a1@@ + Number ) ; word_41FB9E = * ( _WORD * ) ( @@a1@@ + Number ) ; locmaddr = uip_ds6_maddr_lookup ( & loc_fipaddr ) ; if ( locmaddr ) uip_ds6_maddr_rm ( locmaddr ) ; * ( _BYTE * ) @@a1@@ = Number ; } }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}]} {"name": "uip_ds6_addr_lookup", "code": "__int64 __fastcall uip_ds6_addr_lookup ( const void * @@a1@@ ) { __int64 @@result@@ ; if ( ( unsigned __int8 ) uip_ds6_list_loop ( byte_422C58 , Number , Number , @@a1@@ , Number , & locaddr ) ) @@result@@ = Number L ; else @@result@@ = locaddr ; return @@result@@ ; }", "source": [{"n": "a1", "t": {"T": 3, "t": "const void"}, "location": "r56"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}]} {"name": "set_ip_from_prefix", "code": "__int64 __fastcall set_ip_from_prefix ( void * @@a1@@ , unsigned __int8 * @@a2@@ ) { int @@v2@@ ; memset ( @@a1@@ , Number , Number ) ; @@v2@@ = @@a2@@ [ Number ] + Number ; if ( @@v2@@ < Number ) @@v2@@ = @@a2@@ [ Number ] + Number ; memcpy ( @@a1@@ , @@a2@@ , @@v2@@ >> Number ) ; return uip_ds6_set_addr_iid ( ( __int64 ) @@a1@@ , & uip_lladdr ) ; }", "source": [{"n": "a1", "t": {"T": 3, "t": "void"}, "location": "r56"}, {"n": "a2", "t": {"T": 3, "t": "unsigned __int8"}, "location": "r64"}, {"n": "v2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r8"}]} {"name": "rpl_set_prefix", "code": "__int64 __fastcall rpl_set_prefix ( _BYTE * @@a1@@ , const void * @@a2@@ , unsigned int @@a3@@ ) { if ( @@a3@@ > Number ) return Number L ; memset ( @@a1@@ + Number , Number , Number ) ; memcpy ( @@a1@@ + Number , @@a2@@ , ( @@a3@@ + Number ) >> Number ) ; @@a1@@ [ Number ] = @@a3@@ ; @@a1@@ [ Number ] = Number ; check_prefix ( Number L , @@a1@@ + Number ) ; return Number L ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r16"}, {"n": "a1", "t": {"T": 3, "t": "_BYTE"}, "location": "r56"}, {"n": "a2", "t": {"T": 3, "t": "const void"}, "location": "r64"}]} {"name": "rpl_free_dag", "code": "_BYTE * __fastcall rpl_free_dag ( _BYTE * @@a1@@ ) { _BYTE * @@result@@ ; if ( @@a1@@ [ Number ] ) { @@a1@@ [ Number ] = Number ; rpl_remove_routes ( ( __int64 ) @@a1@@ ) ; if ( ( @@a1@@ [ Number ] & Number ) != Number ) check_prefix ( @@a1@@ + Number , Number L ) ; remove_parents ( ( __int64 ) @@a1@@ , Number ) ; } @@result@@ = @@a1@@ ; @@a1@@ [ Number ] = Number ; return @@result@@ ; }", "source": [{"n": "a1", "t": {"T": 3, "t": "_BYTE"}, "location": "r56"}, {"n": "result", "t": {"T": 3, "t": "_BYTE"}, "location": "r8"}]} {"name": "rpl_select_dag", "code": "__int64 __fastcall rpl_select_dag ( __int64 @@a1@@ , __int64 @@a2@@ ) { __int64 @@v3@@ ; __int64 @@v4@@ ; unsigned __int64 @@i@@ ; @@v3@@ = * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ; @@v4@@ = * ( _QWORD * ) ( @@a1@@ + Number ) ; if ( * ( _WORD * ) ( @@v4@@ + Number ) != * ( _WORD * ) ( @@a1@@ + Number ) ) { if ( rpl_select_parent ( * ( _QWORD * ) ( @@a2@@ + Number ) ) ) { if ( @@v4@@ != * ( _QWORD * ) ( @@a2@@ + Number ) ) @@v4@@ = ( * ( __int64 ( __fastcall * * ) ( __int64 , _QWORD ) ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) ( @@v4@@ , * ( _QWORD * ) ( @@a2@@ + Number ) ) ; } else if ( @@v4@@ == * ( _QWORD * ) ( @@a2@@ + Number ) ) { @@v4@@ = Number L ; for ( @@i@@ = @@a1@@ + Number ; @@i@@ < @@a1@@ + Number ; @@i@@ += Number L ) { if ( * ( _BYTE * ) ( @@i@@ + Number ) && * ( _QWORD * ) ( @@i@@ + Number ) && * ( _WORD * ) ( * ( _QWORD * ) ( @@i@@ + Number ) + Number L ) != Number ) { if ( @@v4@@ ) @@v4@@ = ( * ( __int64 ( __fastcall * * ) ( __int64 , unsigned __int64 ) ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) ( @@v4@@ , @@i@@ ) ; else @@v4@@ = @@i@@ ; } } } } if ( ! @@v4@@ ) return Number L ; if ( @@v4@@ != * ( _QWORD * ) ( @@a1@@ + Number ) ) { rpl_remove_routes ( * ( _QWORD * ) ( @@a1@@ + Number ) ) ; if ( ( * ( _BYTE * ) ( @@v4@@ + Number ) & Number ) != Number ) { check_prefix ( ( unsigned __int8 * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) , ( unsigned __int8 * ) ( @@v4@@ + Number ) ) ; } else if ( ( * ( _BYTE * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) & Number ) != Number ) { check_prefix ( ( unsigned __int8 * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) , Number L ) ; } * ( _BYTE * ) ( @@v4@@ + Number ) = Number ; * ( _BYTE * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) = Number ; * ( _QWORD * ) ( @@a1@@ + Number ) = @@v4@@ ; } ( * ( void ( __fastcall * * ) ( __int64 ) ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) ( @@a1@@ ) ; * ( _WORD * ) ( @@v4@@ + Number ) = ( * ( __int64 ( __fastcall * * ) ( _QWORD , _QWORD ) ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) ( * ( _QWORD * ) ( @@v4@@ + Number ) , Number L ) ; if ( * ( _WORD * ) ( @@v4@@ + Number ) < * ( _WORD * ) ( @@v4@@ + Number ) ) { * ( _WORD * ) ( @@v4@@ + Number ) = * ( _WORD * ) ( @@v4@@ + Number ) ; LABEL_30 : if ( @@v3@@ != * ( _QWORD * ) ( @@v4@@ + Number ) ) { rpl_set_default_route ( @@a1@@ , ( _QWORD * ) ( * ( _QWORD * ) ( @@v4@@ + Number ) + Number L ) ) ; if ( * ( _BYTE * ) ( @@a1@@ + Number ) ) { if ( @@v3@@ ) dao_output ( @@v3@@ , Number L ) ; ++ * ( _BYTE * ) ( @@a1@@ + Number ) ; rpl_schedule_dao ( @@a1@@ ) ; } rpl_reset_dio_timer ( @@a1@@ ) ; } return @@v4@@ ; } if ( acceptable_rank ( @@v4@@ , * ( _WORD * ) ( @@v4@@ + Number ) ) ) goto LABEL_30 ; * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) = Number L ; if ( * ( _BYTE * ) ( @@a1@@ + Number ) && @@v3@@ ) dao_output ( @@v3@@ , Number L ) ; return Number L ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}, {"n": "v4", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s16"}, {"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s32"}, {"n": "i", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "s8"}]} {"name": "rpl_join_instance", "code": "__int64 __fastcall rpl_join_instance ( _QWORD * @@a1@@ , __int64 @@a2@@ ) { __int64 @@result@@ ; __int64 @@v3@@ ; __int64 ( __fastcall * * @@v4@@ ) ( ) ; __int64 @@v5@@ ; __int64 @@v6@@ ; __int64 @@v7@@ ; @@result@@ = ( __int64 ) rpl_alloc_dag ( * ( _BYTE * ) ( @@a2@@ + Number ) ) ; @@v7@@ = @@result@@ ; if ( @@result@@ ) { @@v6@@ = * ( _QWORD * ) ( @@result@@ + Number ) ; @@v5@@ = rpl_add_parent ( @@result@@ , @@a2@@ , @@a1@@ ) ; if ( @@v5@@ ) { * ( _BYTE * ) ( @@v5@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; @@v4@@ = rpl_find_of ( * ( _WORD * ) ( @@a2@@ + Number ) ) ; if ( @@v4@@ ) { if ( ( * ( _BYTE * ) ( @@a2@@ + Number ) & Number ) != Number ) check_prefix ( Number L , ( unsigned __int8 * ) ( @@a2@@ + Number ) ) ; * ( _BYTE * ) ( @@v7@@ + Number ) = Number ; * ( _BYTE * ) ( @@v7@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v7@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v7@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _QWORD * ) ( @@v6@@ + Number ) = @@v4@@ ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _QWORD * ) ( @@v6@@ + Number ) = @@v7@@ ; * ( _BYTE * ) ( @@v6@@ + Number ) = Number ; * ( _WORD * ) ( @@v6@@ + Number ) = * ( _WORD * ) ( @@a2@@ + Number ) ; * ( _WORD * ) ( @@v6@@ + Number ) = * ( _WORD * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@v6@@ + Number ) + * ( _BYTE * ) ( @@v6@@ + Number ) ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _BYTE * ) ( @@v6@@ + Number ) = * ( _BYTE * ) ( @@a2@@ + Number ) ; * ( _WORD * ) ( @@v6@@ + Number ) = * ( _WORD * ) ( @@a2@@ + Number ) ; @@v3@@ = * ( _QWORD * ) ( @@a2@@ + Number ) ; * ( _QWORD * ) @@v7@@ = * ( _QWORD * ) @@a2@@ ; * ( _QWORD * ) ( @@v7@@ + Number ) = @@v3@@ ; memcpy ( ( void * ) ( @@v7@@ + Number ) , ( const void * ) ( @@a2@@ + Number ) , Number ) ; * ( _QWORD * ) ( @@v7@@ + Number ) = @@v5@@ ; ( * ( void ( __fastcall * * ) ( __int64 ) ) ( * ( _QWORD * ) ( @@v6@@ + Number ) + Number L ) ) ( @@v6@@ ) ; * ( _WORD * ) ( @@v7@@ + Number ) = ( * ( __int64 ( __fastcall * * ) ( __int64 , _QWORD ) ) ( * ( _QWORD * ) ( @@v6@@ + Number ) + Number L ) ) ( @@v5@@ , Number L ) ; * ( _WORD * ) ( @@v7@@ + Number ) = * ( _WORD * ) ( @@v7@@ + Number ) ; if ( ! default_instance ) default_instance = @@v6@@ ; rpl_reset_dio_timer ( @@v6@@ ) ; rpl_set_default_route ( @@v6@@ , @@a1@@ ) ; @@result@@ = * ( unsigned __int8 * ) ( @@v6@@ + Number ) ; if ( ( _BYTE ) @@result@@ ) @@result@@ = rpl_schedule_dao ( @@v6@@ ) ; } else { rpl_remove_parent ( @@v7@@ , @@v5@@ ) ; @@result@@ = @@v6@@ ; * ( _BYTE * ) ( @@v6@@ + Number ) = Number ; } } else { @@result@@ = @@v6@@ ; * ( _BYTE * ) ( @@v6@@ + Number ) = Number ; } } return @@result@@ ; }", "source": [{"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r16"}, {"n": "a1", "t": {"T": 3, "t": "_QWORD"}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}, {"n": "v6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s16"}, {"n": "v5", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "v4", "t": {"T": 9, "n": "__int64 (__fastcall **)()"}, "location": "s32"}, {"n": "v7", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s8"}]}