Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __int16 __cdecl commonPacketParser(void *class_ptr, int is_data_begin_start, char *packet_data, __int16 packet_size, void *Dst)
- {
- int header_size; // eax@1
- _DWORD *v6; // ecx@2
- int v7; // edx@2
- int v8; // eax@3
- int v9; // eax@4
- char *data; // esi@6
- int v11; // eax@10
- int v12; // eax@11
- int v13; // eax@13
- void **v14; // ebp@19
- char *v15; // ebx@19
- unsigned __int16 parse_type; // ax@23
- int v17; // edi@25
- int i; // eax@25
- unsigned __int16 v19; // dx@26
- unsigned __int16 v20; // ax@30
- unsigned __int16 v21; // dx@34
- unsigned __int16 *v22; // eax@38
- int v24; // [sp+4h] [bp-Ch]@0
- signed int v25; // [sp+8h] [bp-8h]@2
- int v26; // [sp+Ch] [bp-4h]@2
- LOWORD(header_size) = *((_WORD *)class_ptr + 38024);
- if ( (_WORD)header_size )
- {
- v6 = Dst;
- v7 = (signed __int16)header_size;
- v26 = 0;
- v25 = 1;
- header_size = (signed __int16)header_size;
- if ( is_data_begin_start )
- {
- v8 = header_size - 1;
- if ( v8 )
- {
- v9 = v8 - 1;
- if ( !v9 )
- {
- v24 = *(_WORD *)(packet_data + 9);
- data = &packet_data[v7 + 9];
- goto LABEL_18;
- }
- if ( v9 == 2 )
- {
- v24 = *(_DWORD *)(packet_data + 9);
- data = &packet_data[v7 + 9];
- LABEL_18:
- if ( !*((_WORD *)class_ptr + 38020) )
- {
- LABEL_57:
- LOWORD(header_size) = 1;
- return header_size;
- }
- v14 = &Dst;
- v15 = (char *)class_ptr + 75784;
- while ( 1 )
- {
- if ( v25 & v24 )
- {
- if ( is_data_begin_start && data > &packet_data[packet_size] )
- goto LABEL_45;
- parse_type = *(_WORD *)v15;
- if ( *(_WORD *)v15 == 12 )
- {
- if ( *((_WORD *)v15 + 64) <= 1u )
- {
- v20 = *(_WORD *)data;
- if ( v6 )
- *v6 = data;
- data += v20 + 2;
- }
- else
- {
- v17 = *data++;
- for ( i = 0; i < v17; data += v19 + 2 )
- {
- v19 = *(_WORD *)data;
- if ( v6 )
- v6[i] = data;
- ++i;
- }
- }
- }
- else if ( parse_type == 13 )
- {
- v21 = *(_WORD *)data;
- if ( v6 )
- *v6 = data + 2;
- data += v21 + 2;
- if ( is_data_begin_start && data > &packet_data[packet_size] )
- goto LABEL_45;
- v22 = (unsigned __int16 *)v14[1];
- ++v14;
- if ( v22 )
- *v22 = v21;
- }
- else if ( parse_type )
- {
- if ( is_data_begin_start
- && &data[dword_802B80[parse_type] * *((_WORD *)v15 + 64)] > &packet_data[packet_size] )
- {
- goto LABEL_45;
- }
- if ( v6 )
- memcpy(v6, data, dword_802B80[parse_type] * *((_WORD *)v15 + 64));
- data += dword_802B80[*(_WORD *)v15] * *((_WORD *)v15 + 64);
- }
- else
- {
- if ( v6 )
- *v6 = data;
- data += dword_802B80[*(_WORD *)v15] * *((_WORD *)v15 + 64);
- if ( is_data_begin_start && data > &packet_data[packet_size] )
- {
- LABEL_45:
- LOWORD(header_size) = 0;
- return header_size;
- }
- }
- }
- else if ( v6 && *(_WORD *)v15 == 12 )
- {
- *v6 = 0;
- }
- else if ( *(_WORD *)v15 == 13 )
- {
- ++v14;
- }
- v25 *= 2;
- v6 = v14[1];
- ++v14;
- v15 += 2;
- if ( ++v26 >= *((_WORD *)class_ptr + 38020) )
- goto LABEL_57;
- }
- }
- }
- else
- {
- v24 = (unsigned __int8)packet_data[9];
- }
- data = &packet_data[v7 + 9];
- goto LABEL_18;
- }
- v11 = header_size - 1;
- if ( v11 )
- {
- v12 = v11 - 1;
- if ( v12 )
- {
- if ( v12 != 2 )
- {
- LABEL_17:
- data = &packet_data[v7 + 2];
- goto LABEL_18;
- }
- v13 = *(_DWORD *)(packet_data + 2);
- }
- else
- {
- v13 = *((_WORD *)packet_data + 1);
- }
- }
- else
- {
- v13 = (unsigned __int8)packet_data[2];
- }
- v24 = v13;
- goto LABEL_17;
- }
- return header_size;
- }
Advertisement
Add Comment
Please, Sign In to add comment