{"name": "dao_output", "code": "__int64 __fastcall dao_output ( __int64 @@a1@@ , char @@a2@@ ) { __int64 result ; int v3 ; int v4 ; _QWORD * v5 ; __int64 @@v6@@ ; int v7 ; int v8 ; int v9 ; int v10 ; int v11 ; int v12 ; int v13 ; int v14 ; int v15 ; int v16 ; int v17 ; int v18 ; int v19 ; int v20 ; _QWORD @@src@@ [ Number ] ; unsigned __int8 @@v22@@ ; int @@v23@@ ; _BYTE * @@v24@@ ; __int64 @@v25@@ ; _QWORD * @@v26@@ ; result = get_global_addr ( @@src@@ ) ; if ( ( _DWORD ) result ) { @@v26@@ = * ( _QWORD * * ) ( @@a1@@ + Number ) ; @@v25@@ = @@v26@@ [ Number ] ; @@v24@@ = ( _BYTE * ) ( ( unsigned __int8 ) uip_ext_len + Number + Number L ) ; ++ dao_sequence ; @@v23@@ = Number ; * @@v24@@ = * ( _BYTE * ) ( @@v25@@ + Number ) ; @@v24@@ [ @@v23@@ ] = Number ; @@v24@@ [ @@v23@@ ++ ] |= Number ; v3 = @@v23@@ ++ ; @@v24@@ [ v3 ] = Number ; v4 = @@v23@@ ++ ; @@v24@@ [ v4 ] = dao_sequence ; v5 = & @@v24@@ [ @@v23@@ ] ; @@v6@@ = @@v26@@ [ Number ] ; * v5 = * @@v26@@ ; v5 [ Number ] = @@v6@@ ; @@v23@@ += Number ; @@v22@@ = Number ; v7 = @@v23@@ ++ ; @@v24@@ [ v7 ] = Number ; v8 = @@v22@@ + Number ; if ( v8 < Number ) v8 = @@v22@@ + Number ; v9 = v8 >> Number ; v10 = @@v23@@ ++ ; @@v24@@ [ v10 ] = v9 + Number ; v11 = @@v23@@ ++ ; @@v24@@ [ v11 ] = Number ; v12 = @@v23@@ ++ ; @@v24@@ [ v12 ] = @@v22@@ ; v13 = @@v22@@ + Number ; if ( v13 < Number ) v13 = @@v22@@ + Number ; memcpy ( & @@v24@@ [ @@v23@@ ] , @@src@@ , v13 >> Number ) ; v14 = @@v22@@ + Number ; if ( v14 < Number ) v14 = @@v22@@ + Number ; @@v23@@ += v14 >> Number ; v15 = @@v23@@ ++ ; @@v24@@ [ v15 ] = Number ; v16 = @@v23@@ ++ ; @@v24@@ [ v16 ] = Number ; v17 = @@v23@@ ++ ; @@v24@@ [ v17 ] = Number ; v18 = @@v23@@ ++ ; @@v24@@ [ v18 ] = Number ; v19 = @@v23@@ ++ ; @@v24@@ [ v19 ] = Number ; v20 = @@v23@@ ++ ; @@v24@@ [ v20 ] = @@a2@@ ; result = uip_icmp6_send ( ( _QWORD * ) ( @@a1@@ + Number ) , Number , Number , @@v23@@ ) ; } return result ; }", "source": [{"n": "v6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r16"}, {"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "char", "s": 1}, "location": "r64"}, {"n": "v25", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s16"}, {"n": "v24", "t": {"T": 3, "t": "_BYTE"}, "location": "s24"}, {"n": "v23", "t": {"T": 1, "n": "int", "s": 4}, "location": "s28"}, {"n": "v22", "t": {"T": 1, "n": "unsigned __int8", "s": 1}, "location": "s29"}, {"n": "src", "t": {"T": 2, "n": 2, "s": 8, "t": "_QWORD"}, "location": "s48"}, {"n": "v26", "t": {"T": 3, "t": "_QWORD"}, "location": "s8"}]}
{"name": "uip_icmp6_send", "code": "__int64 __fastcall uip_icmp6_send ( _QWORD * @@a1@@ , char @@a2@@ , char @@a3@@ , __int16 @@a4@@ ) { __int64 v4 ; uip_aligned_buf = Number ; * ( ( _BYTE * ) & uip_aligned_buf + Number ) = Number ; * ( ( _BYTE * ) & uip_aligned_buf + Number ) = byte_422C44 ; * ( ( _BYTE * ) & uip_aligned_buf + Number ) = ( unsigned __int16 ) ( @@a4@@ + Number ) >> Number ; * ( ( _BYTE * ) & uip_aligned_buf + Number ) = @@a4@@ + Number ; v4 = @@a1@@ [ Number ] ; unk_422798 = * @@a1@@ ; * ( ( _QWORD * ) & unk_422798 + Number ) = v4 ; uip_ds6_select_src ( byte_422788 , & unk_422798 ) ; * ( ( _BYTE * ) & uip_aligned_buf + ( unsigned __int8 ) uip_ext_len + Number ) = @@a2@@ ; * ( ( _BYTE * ) & uip_aligned_buf + ( unsigned __int8 ) uip_ext_len + Number ) = @@a3@@ ; * ( _WORD * ) ( ( char * ) & uip_aligned_buf + ( unsigned __int8 ) uip_ext_len + Number ) = Number ; * ( _WORD * ) ( ( char * ) & uip_aligned_buf + ( unsigned __int8 ) uip_ext_len + Number ) = ~ ( unsigned __int16 ) uip_icmp6chksum ( ) ; uip_len = @@a4@@ + Number ; return tcpip_ipv6_output ( ) ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "char", "s": 1}, "location": "r16"}, {"n": "a4", "t": {"T": 1, "n": "__int16", "s": 2}, "location": "r24"}, {"n": "a1", "t": {"T": 3, "t": "_QWORD"}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "char", "s": 1}, "location": "r64"}]} {"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_nullify_parent", "code": "__int64 __fastcall rpl_nullify_parent ( __int64 @@a1@@ , __int64 @@a2@@ ) { __int64 @@result@@ ; @@result@@ = * ( _QWORD * ) ( @@a1@@ + Number ) ; if ( @@a2@@ == @@result@@ ) { * ( _QWORD * ) ( @@a1@@ + Number ) = Number L ; * ( _WORD * ) ( @@a1@@ + Number ) = Number ; @@result@@ = * ( unsigned __int8 * ) ( @@a1@@ + Number ) ; if ( ( _BYTE ) @@result@@ ) { if ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) { uip_ds6_defrt_rm ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) ; * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) = Number L ; } @@result@@ = dao_output ( @@a2@@ , Number L ) ; } } return @@result@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}]} {"name": "get_global_addr", "code": "__int64 __fastcall get_global_addr ( _QWORD * @@a1@@ ) { __int64 @@v1@@ ; int @@i@@ ; for ( @@i@@ = Number ; @@i@@ <= Number ; ++ @@i@@ ) { if ( byte_422C58 [ Number * @@i@@ ] && ( ! byte_422C58 [ Number * @@i@@ + Number ] || byte_422C58 [ Number * @@i@@ + Number ] == Number ) && ( byte_422C58 [ Number * @@i@@ + Number ] != Number || byte_422C58 [ Number * @@i@@ + Number ] != Number ) ) { @@v1@@ = * ( _QWORD * ) & byte_422C58 [ Number * @@i@@ + Number ] ; * @@a1@@ = * ( _QWORD * ) & byte_422C58 [ Number * @@i@@ + Number ] ; @@a1@@ [ Number ] = @@v1@@ ; return Number L ; } } return Number L ; }", "source": [{"n": "v1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r16"}, {"n": "a1", "t": {"T": 3, "t": "_QWORD"}, "location": "r56"}, {"n": "i", "t": {"T": 1, "n": "int", "s": 4}, "location": "s4"}]} {"name": "handle_dao_timer", "code": "__int64 __fastcall handle_dao_timer ( __int64 @@a1@@ ) { if ( ! dio_send_ok && ! uip_ds6_get_link_local ( Number ) ) return ctimer_set ( @@a1@@ + Number , Number L , handle_dao_timer , @@a1@@ ) ; if ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) ) dao_output ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a1@@ + Number ) + Number L ) , * ( _BYTE * ) ( @@a1@@ + Number ) ) ; return ctimer_stop ( @@a1@@ + Number ) ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}]} {"name": "output", "code": "__int64 __fastcall output ( __int64 @@a1@@ ) { char @@v2@@ [ Number ] ; __int64 * @@v3@@ ; unsigned __int16 @@v4@@ ; uncomp_hdr_len = Number ; rime_hdr_len = Number ; packetbuf_clear ( ) ; rime_ptr = packetbuf_dataptr ( ) ; packetbuf_set_attr ( Number , Number ) ; if ( callback ) set_packet_attrs ( ) ; if ( * ( ( _BYTE * ) & uip_aligned_buf + Number ) != Number || ( * ( ( _BYTE * ) & dword_4227A8 + Number ) & Number ) != Number || ( * ( ( _BYTE * ) & dword_4227A8 + Number ) & Number ) == Number ) { if ( * ( ( _BYTE * ) & uip_aligned_buf + Number ) == Number && ( * ( ( _BYTE * ) & dword_4227A8 + Number ) & Number ) != Number ) packetbuf_set_attr ( Number , Number ) ; } else { packetbuf_set_attr ( Number , Number ) ; } if ( @@a1@@ ) rimeaddr_copy ( ( __int64 ) @@v2@@ , @@a1@@ ) ; else rimeaddr_copy ( ( __int64 ) @@v2@@ , ( __int64 ) & rimeaddr_null ) ; compress_hdr_hc06 ( @@v2@@ ) ; if ( ( unsigned __int16 ) uip_len - ( unsigned __int8 ) uncomp_hdr_len <= Number - ( unsigned __int8 ) rime_hdr_len ) { memcpy ( ( char * ) rime_ptr + ( unsigned __int8 ) rime_hdr_len , ( char * ) & uip_aligned_buf + ( unsigned __int8 ) uncomp_hdr_len , ( unsigned __int16 ) uip_len - ( unsigned __int8 ) uncomp_hdr_len ) ; packetbuf_set_datalen ( uip_len - ( unsigned __int8 ) uncomp_hdr_len + ( unsigned __int8 ) rime_hdr_len ) ; send_packet_1 ( ( __int64 ) @@v2@@ ) ; } else { memmove ( ( char * ) rime_ptr + Number , rime_ptr , ( unsigned __int8 ) rime_hdr_len ) ; * ( _BYTE * ) rime_ptr = HIBYTE ( uip_len ) | Number ; * ( ( _BYTE * ) rime_ptr + Number ) = uip_len ; * ( ( _BYTE * ) rime_ptr + Number ) = HIBYTE ( my_tag ) ; * ( ( _BYTE * ) rime_ptr + Number ) = my_tag ++ ; rime_hdr_len += Number ; rime_payload_len = ( Number - rime_hdr_len ) & Number ; memcpy ( ( char * ) rime_ptr + ( unsigned __int8 ) rime_hdr_len , ( char * ) & uip_aligned_buf + ( unsigned __int8 ) uncomp_hdr_len , ( Number - rime_hdr_len ) & Number ) ; packetbuf_set_datalen ( ( unsigned __int8 ) rime_payload_len + ( unsigned __int8 ) rime_hdr_len ) ; @@v3@@ = ( __int64 * ) queuebuf_new_from_packetbuf ( ) ; if ( ! @@v3@@ ) return Number L ; send_packet_1 ( ( __int64 ) @@v2@@ ) ; queuebuf_to_packetbuf ( ( unsigned __int64 ) @@v3@@ ) ; queuebuf_free ( @@v3@@ ) ; @@v3@@ = Number L ; if ( last_tx_status == Number || last_tx_status == Number || last_tx_status == Number ) return Number L ; @@v4@@ = ( unsigned __int8 ) rime_payload_len + ( unsigned __int8 ) uncomp_hdr_len ; rime_hdr_len = Number ; * ( _BYTE * ) rime_ptr = HIBYTE ( uip_len ) | Number ; * ( ( _BYTE * ) rime_ptr + Number ) = uip_len ; rime_payload_len = ( Number - rime_hdr_len ) & Number ; while ( @@v4@@ < ( unsigned __int16 ) uip_len ) { * ( ( _BYTE * ) rime_ptr + Number ) = @@v4@@ >> Number ; if ( ( unsigned __int16 ) uip_len - @@v4@@ < ( unsigned __int8 ) rime_payload_len ) rime_payload_len = uip_len - @@v4@@ ; memcpy ( ( char * ) rime_ptr + ( unsigned __int8 ) rime_hdr_len , ( char * ) & uip_aligned_buf + @@v4@@ , ( unsigned __int8 ) rime_payload_len ) ; packetbuf_set_datalen ( ( unsigned __int8 ) rime_payload_len + ( unsigned __int8 ) rime_hdr_len ) ; @@v3@@ = ( __int64 * ) queuebuf_new_from_packetbuf ( ) ; if ( ! @@v3@@ ) return Number L ; send_packet_1 ( ( __int64 ) @@v2@@ ) ; queuebuf_to_packetbuf ( ( unsigned __int64 ) @@v3@@ ) ; queuebuf_free ( @@v3@@ ) ; @@v3@@ = Number L ; @@v4@@ += ( unsigned __int8 ) rime_payload_len ; if ( last_tx_status == Number || last_tx_status == Number || last_tx_status == Number ) return Number L ; } } return Number L ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "v3", "t": {"T": 3, "t": "__int64"}, "location": "s16"}, {"n": "v4", "t": {"T": 1, "n": "unsigned __int16", "s": 2}, "location": "s2"}, {"n": "v2", "t": {"T": 2, "n": 8, "s": 1, "t": "char"}, "location": "s24"}]} {"name": "send", "code": "__int64 __fastcall send ( __int64 @@a1@@ , unsigned __int16 @@a2@@ ) { prepare ( @@a1@@ , @@a2@@ ) ; return transmit ( @@a2@@ ) ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned __int16", "s": 2}, "location": "r64"}]}