Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __fastcall bgadFunction(_DWORD *a1, int a2, _DWORD *stringFileSizeParam, int a4, int a5, int shouldCeil, _WORD *a7)
- {
- _DWORD *safeFileFlag; // r10
- _DWORD *stringFileSize; // r4
- int a2Ref; // r11
- int v10; // r1
- int v11; // r8
- signed int errorFlag; // r9
- __int64 v13; // r0
- signed int wrongFileFlag; // r0
- signed int logModifier; // r1
- _DWORD *v16; // r5
- __int64 nameCheck; // r0
- int last4Bytes; // r0
- int compressed_data_sizeRef; // r0
- int v20; // r1
- _BYTE *v21; // r6
- int v22; // r4
- int result; // r0
- int v24; // r0
- unsigned int v25; // r1
- _DWORD *v26; // r6
- int v27; // r0
- _DWORD *v28; // r0
- int a4Ref; // [sp+8h] [bp-40h]
- _DWORD *a1Ref; // [sp+Ch] [bp-3Ch]
- int preLast4Bytes; // [sp+10h] [bp-38h]
- int last4BytesRef; // [sp+14h] [bp-34h]
- int v33; // [sp+18h] [bp-30h]
- _DWORD *roundedLog; // [sp+1Ch] [bp-2Ch]
- int magic; // [sp+20h] [bp-28h]
- __int16 const1; // [sp+24h] [bp-24h]
- __int16 flag0; // [sp+26h] [bp-22h]
- int header_size_name_size; // [sp+28h] [bp-20h]
- __int16 var1; // [sp+2Ch] [bp-1Ch]
- unsigned __int16 flag1; // [sp+2Eh] [bp-1Ah]
- int compressed_data_size; // [sp+30h] [bp-18h]
- int uncompressed_data_size; // [sp+34h] [bp-14h]
- int initial_data; // [sp+38h] [bp-10h]
- a1Ref = a1;
- safeFileFlag = 0;
- stringFileSize = stringFileSizeParam;
- a4Ref = a4;
- a2Ref = a2;
- preLast4Bytes = 0;
- last4BytesRef = 0;
- (*(void (**)(void))(*(_DWORD *)*stringFileSizeParam + 12))();
- v11 = v10;
- errorFlag = 1;
- LODWORD(v13) = (*(int (__cdecl **)(_DWORD, int *))(*(_DWORD *)*stringFileSize + 8))(*stringFileSize, &magic);
- if ( v13 == 1 )
- {
- wrongFileFlag = 0;
- if ( magic != 0x44414742 )
- wrongFileFlag = 1;
- if ( wrongFileFlag )
- {
- errorFlag = 1;
- }
- else if ( (unsigned __int16)(const1 - 1) > 1u )
- {
- errorFlag = 1;
- safeFileFlag = 0;
- }
- else
- { // floor / ciel (log2(compressedDataSize))
- // 12 8 5 2
- // if (!a6)
- // 12 8 8 4
- // else
- // 16 12 8 4
- logModifier = 3;
- if ( shouldCeil )
- logModifier = 4;
- roundedLog = (_DWORD *)((compressed_data_size + logModifier) & 4294967292);
- v16 = (_DWORD *)(*(int (**)(void))(**(_DWORD **)(a2Ref + 16) + 24))();// v16 = 0x14?
- errorFlag = 1;
- safeFileFlag = 0;
- if ( v16 )
- {
- (*(void (__cdecl **)(_DWORD))(*(_DWORD *)*stringFileSize + 16))(*stringFileSize);
- LODWORD(nameCheck) = (*(int (__cdecl **)(_DWORD, _DWORD *))(*(_DWORD *)*stringFileSize + 8))(
- *stringFileSize,
- v16);
- if ( nameCheck != 1 )
- goto LABEL_43;
- if ( flag0 & 4 ) // If the fourth bit of flag 0 is set
- {
- compressed_data_size -= 8;
- last4Bytes = *(_DWORD *)((char *)v16 + compressed_data_size + 4);
- preLast4Bytes = *(_DWORD *)((char *)v16 + compressed_data_size);
- last4BytesRef = last4Bytes;
- }
- switch ( var1 )
- {
- case 0:
- goto LABEL_32;
- case 1:
- compressed_data_sizeRef = compressed_data_size;
- if ( compressed_data_size )
- {
- v20 = HIWORD(header_size_name_size);
- v21 = v16;
- do
- {
- v20 = 0x19660D * v20 + 0x3C6EF35F;
- --compressed_data_sizeRef;
- *v21++ ^= v20;
- }
- while ( compressed_data_sizeRef );
- }
- goto LABEL_32;
- case 2:
- goto LABEL_26;
- case 3:
- safeFileFlag = 0;
- if ( !sub_7F0CB4((int)v16, compressed_data_size, a4Ref, a5, (int)&preLast4Bytes, 0) )
- goto LABEL_32;
- errorFlag = 1;
- goto LABEL_43;
- default:
- goto def_7F0B0A;
- }
- goto def_7F0B0A;
- }
- }
- }
- v22 = 0;
- v16 = 0;
- while ( 1 )
- {
- roundedLog = (_DWORD *)v22;
- (*(void (**)(void))(**(_DWORD **)(a2Ref + 40) + 24))();
- roundedLog = v16;
- (*(void (**)(void))(**(_DWORD **)(a2Ref + 40) + 24))();
- if ( errorFlag == 1 )
- {
- *a1Ref = 0;
- a1Ref[1] = 0;
- }
- else
- {
- if ( a7 )
- *a7 = flag0;
- v16 = (_DWORD *)operator new(0x38u);
- v16[1] = 0;
- v16[2] = 0;
- *v16 = &off_EB1684;
- v16[4] = &off_EB16AC;
- v16[5] = safeFileFlag;
- v16[6] = v11;
- sub_231E80(v16 + 8, a2Ref + 24);
- *a1Ref = v16 + 4;
- a1Ref[1] = v16;
- }
- result = _stack_chk_guard - initial_data;
- if ( _stack_chk_guard == initial_data )
- return result;
- LABEL_26:
- if ( (unsigned int)(compressed_data_size + 3) >> 2 )
- {
- v24 = HIWORD(header_size_name_size);
- v25 = (unsigned int)(compressed_data_size + 3) >> 2;
- v26 = v16;
- do
- {
- v24 = 0x19660D * v24 + 0x3C6EF35F;
- --v25;
- *v26 ^= v24;
- ++v26;
- }
- while ( v25 );
- }
- LABEL_32:
- if ( (unsigned int)flag1 - 1 >= 2 )
- {
- if ( !flag1 )
- {
- v11 = compressed_data_size;
- v28 = 0;
- safeFileFlag = v16;
- goto LABEL_39;
- }
- def_7F0B0A:
- errorFlag = 1;
- safeFileFlag = 0;
- LABEL_43:
- v22 = 0;
- }
- else
- {
- v33 = uncompressed_data_size;
- roundedLog = (_DWORD *)(uncompressed_data_size + shouldCeil);
- v27 = (*(int (**)(void))(**(_DWORD **)(a2Ref + 16) + 24))();
- v22 = v27;
- if ( !v27 )
- goto def_7F0B0A;
- if ( j_uncompress(v27, &v33, (int)v16, compressed_data_size) || (v11 = v33, v33 != uncompressed_data_size) )
- {
- errorFlag = 1;
- safeFileFlag = 0;
- }
- else
- {
- safeFileFlag = (_DWORD *)v22;
- v28 = v16;
- LABEL_39:
- v22 = 0;
- v16 = v28;
- errorFlag = 0;
- if ( shouldCeil == 1 )
- *((_BYTE *)safeFileFlag + v11) = 0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement