Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __fastcall ReadNormalField(__int64 a1, __int64 a2, __int64 a3, __int64 a4, char a5)
- {
- __int64 v5; // rsi@1
- int v6; // edi@1
- unsigned int v7; // er11@1
- signed __int64 v8; // r8@1
- struct_v9 *v9; // r9@1
- struct_v10_3 *v10; // r10@1
- __int64 v11; // rdx@3
- unsigned int v12; // ebx@3
- __int64 v13; // rax@3
- FieldDescriptor *Field; // rax@3
- struct_v15_2 *v15; // rbp@4
- struct_v16_2 *v16; // rdi@5
- __int64 v17; // rsi@6
- ComplexField *CField; // rcx@9
- __int64 v19; // r8@10
- __int64 v20; // r8@11
- char v21; // r9@12
- __int64 v22; // rbx@14
- FieldDescriptor *v23; // rax@20
- ComplexField *v24; // rax@23
- unsigned int v25; // edx@24
- unsigned int v26; // ecx@24
- __int64 v27; // r9@41
- int v29; // [sp+30h] [bp-148h]@3
- unsigned int v30; // [sp+34h] [bp-144h]@2
- signed __int64 v31; // [sp+38h] [bp-140h]@3
- __int64 v32; // [sp+40h] [bp-138h]@3
- struct_v9 *v33; // [sp+48h] [bp-130h]@3
- __int64 v34[37]; // [sp+50h] [bp-128h]@41
- __int64 v35; // [sp+180h] [bp+8h]@1
- unsigned int v36; // [sp+188h] [bp+10h]@3
- __int64 v37; // [sp+190h] [bp+18h]@1
- __int64 v38; // [sp+198h] [bp+20h]@1
- v38 = a4;
- v37 = a3;
- v35 = a1;
- v5 = a3;
- v6 = 0;
- v7 = 0;
- v8 = 0i64;
- v9 = (struct_v9 *)a2;
- v10 = (struct_v10_3 *)a1;
- while ( 1 )
- {
- v30 = v7;
- LABEL_3:
- v11 = v9->byte8;
- v12 = v7;
- v13 = v9->dword4;
- v33 = v9;
- v29 = v6;
- Field = &v10->struct_streamreader30.EBXEntry.FieldDescStart[v13];
- v31 = v8;
- v36 = v11;
- LODWORD(v32) = v7;
- if ( v7 < (unsigned int)v11 )
- {
- v15 = (struct_v15_2 *)&Field[v7].reference;
- do
- {
- LODWORD(Field) = v15->dword6;
- v16 = (struct_v16_2 *)(v5 + v15->dword2);
- if ( (_DWORD)Field != -1 )
- {
- v17 = v38 + (unsigned int)Field;
- LODWORD(Field) = ((unsigned int)HIWORD(v15[-1].dword6) >> 4) & 0x1F;
- switch ( (_DWORD)Field )
- {
- case 4:
- Field = (FieldDescriptor *)v10->qword370;
- *(_QWORD *)v17 = v10->qword4C0 + *(&Field->hash + LODWORD(v16->data));
- goto LABEL_35;
- case 3:
- LODWORD(Field) = ReadField_0(&v10->struct_streamreader30, (unsigned int *)&v16->data, (_QWORD *)v17);
- goto LABEL_35;
- case 2:
- CField = &v10->struct_streamreader30.EBXEntry.ComplexDescOffset[v15->word0];
- if ( (CField->type >> 15) & 1 )
- {
- v19 = CField->offset;
- LODWORD(Field) = sub_1441D0E8C();
- goto LABEL_35;
- }
- Field = (FieldDescriptor *)v10->qword418;
- v20 = *((_QWORD *)&Field->hash + v15->word0);
- if ( !v20 )
- {
- goto LABEL_36;
- }
- v21 = a5;
- if ( !a5 && !((*(_WORD *)(*(_QWORD *)v20 + 8i64) >> 14) & 1) )
- {
- v22 = CField->secondarySize;
- sub_142FD04E4(v20);
- sub_1441D0E8C();
- v12 = v32;
- v10 = (struct_v10_3 *)v35;
- v21 = 1;
- }
- LODWORD(Field) = ReadNormalField(
- (__int64)v10,
- (__int64)&v10->struct_streamreader30.EBXEntry.ComplexDescOffset[v15->word0],
- (__int64)v16,
- v17,
- v21);
- goto LABEL_35;
- case 0xA:
- case 0xB:
- case 0xC:
- LODWORD(Field) = LOBYTE(v16->data);
- *(_BYTE *)v17 = (_BYTE)Field;
- goto LABEL_36;
- case 0xD:
- case 0xE:
- LODWORD(Field) = LOWORD(v16->data);
- *(_WORD *)v17 = (_WORD)Field;
- goto LABEL_36;
- case 0xF:
- case 0x10:
- case 0x13:
- goto LABEL_18;
- case 0x11:
- case 0x12:
- case 0x14:
- Field = (FieldDescriptor *)v16->data;
- *(_QWORD *)v17 = v16->data;
- goto LABEL_36;
- case 7:
- v23 = (FieldDescriptor *)LODWORD(v16->data);
- if ( (_DWORD)v23 == -1 )
- {
- v32 = (__int64)&unk_14289EA50;
- sub_142FCFFAF((__int64)&v32, v11);
- v11 = v36;
- Field = (FieldDescriptor *)&unk_14289EA50;
- *(_QWORD *)v17 = &unk_14289EA50;
- }
- else
- {
- Field = (FieldDescriptor *)((char *)v23 + v10->qword4D0);
- *(_QWORD *)v17 = Field;
- }
- goto LABEL_36;
- case 8:
- v24 = &v10->struct_streamreader30.EBXEntry.ComplexDescOffset[v15->word0];
- if ( !(v24->secondarySize & 0x8000) )
- {
- LABEL_18:
- LODWORD(Field) = LODWORD(v16->data);
- *(_DWORD *)v17 = LODWORD(v16->data);
- goto LABEL_36;
- }
- v25 = v24->numField;
- v26 = 0;
- Field = &v10->struct_streamreader30.EBXEntry.FieldDescStart[v24->fieldStartIndex];
- if ( !v25 )
- {
- goto LABEL_35;
- }
- break;
- case 0x15:
- *(_DWORD *)v17 = LODWORD(v16->data);
- *(_DWORD *)(v17 + 4) = HIDWORD(v16->data);
- *(_DWORD *)(v17 + 8) = v16->dword8;
- LODWORD(Field) = v16->dwordC;
- *(_DWORD *)(v17 + 12) = (_DWORD)Field;
- goto LABEL_36;
- case 0x16:
- *(_QWORD *)v17 = v16->data;
- *(_QWORD *)(v17 + 8) = *(_QWORD *)&v16->dword8;
- LODWORD(Field) = v16->dword10;
- *(_DWORD *)(v17 + 16) = (_DWORD)Field;
- goto LABEL_36;
- case 0x17:
- if ( v17 )
- {
- Field = (FieldDescriptor *)v16->data;
- *(_QWORD *)v17 = v16->data;
- }
- if ( !*(_QWORD *)v17 )
- {
- goto LABEL_36;
- }
- LODWORD(Field) = sub_14302DC07(*(_QWORD *)&v10->struct_streamreader30.EBXEntry.gap0[0], v17);
- goto LABEL_35;
- default:
- goto LABEL_36;
- case 0:
- v7 = v30;
- v5 = v37;
- v27 = v15->word0;
- v34[v31] = (__int64)v33;
- v8 = v31 + 1;
- v6 = v29 + 1;
- v9 = (struct_v9 *)&v10->struct_streamreader30.EBXEntry.ComplexDescOffset[v27];
- goto LABEL_3;
- }
- while ( Field->offset != LODWORD(v16->data) )
- {
- ++v26;
- ++Field;
- if ( v26 >= v25 )
- {
- goto LABEL_35;
- }
- }
- *(_DWORD *)v17 = Field->secondaryOffset;
- LABEL_35:
- v11 = v36;
- LABEL_36:
- v5 = v37;
- }
- v10 = (struct_v10_3 *)v35;
- ++v12;
- v15 = (struct_v15_2 *)((char *)v15 + 16);
- LODWORD(v32) = v12;
- }
- while ( v12 < (unsigned int)v11 );
- v8 = v31;
- v6 = v29;
- }
- if ( !v8 )
- {
- return (signed int)Field;
- }
- v9 = *(&v33 + v8);
- --v6;
- --v8;
- v7 = 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement