C/C++void *memset(void *s, int ch, size_t n)的关键之处

本文详细探讨了memset函数如何将指定字节数设置为特定值,特别是在处理int类型内存时的非预期效果。通过实例解析,揭示了memset在设置4字节整型变量时,实际填充的是0x01010101的奥秘,提醒开发者在使用该函数时需谨慎理解其工作原理。

函数解释:将s中当前位置后面的n个字节设置为ch值,注意是“字节”,那么int类型的内存就是4个字节,其memset(*s, 1, n)得到并不是int元素的值为1,而是0x01010101。

切记此处理解,分享之!!!

// bad sp value at call has been detected, the output may be wrong! int __cdecl main(int argc, const char **argv, const char **envp) { _DWORD *_main_v3; // eax _DWORD *_main_v4; // eax int _main_v5; // eax struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai_2; // eax _DWORD *_main_v8; // esi _DWORD *_main_v9; // eax int _main_v10; // eax void *_main_v11; // eax int _main_v12; // eax int _main_v13; // [esp-8h] [ebp-1F4h] struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai; // [esp-4h] [ebp-1F0h] struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai_1; // [esp-4h] [ebp-1F0h] _DWORD _main_v16[10]; // [esp+0h] [ebp-1ECh] BYREF _DWORD _main_v17[24]; // [esp+28h] [ebp-1C4h] BYREF _BYTE _main_v18[4]; // [esp+88h] [ebp-164h] BYREF _DWORD _main_v19[24]; // [esp+8Ch] [ebp-160h] BYREF _BYTE _main_v20[4]; // [esp+ECh] [ebp-100h] BYREF int _main_v21; // [esp+F0h] [ebp-FCh] int _main_v22; // [esp+F8h] [ebp-F4h] int _main_v23; // [esp+FCh] [ebp-F0h] int _main_v24; // [esp+100h] [ebp-ECh] char _main_v25; // [esp+104h] [ebp-E8h] BYREF char _main_v26; // [esp+105h] [ebp-E7h] BYREF char _main_v27; // [esp+106h] [ebp-E6h] BYREF _BYTE _main_v29[24]; // [esp+108h] [ebp-E4h] BYREF _BYTE _main_v30[24]; // [esp+120h] [ebp-CCh] BYREF _BYTE _main_v31[24]; // [esp+138h] [ebp-B4h] BYREF _BYTE _main_v32[24]; // [esp+150h] [ebp-9Ch] BYREF _BYTE _main_v33[24]; // [esp+168h] [ebp-84h] BYREF _BYTE _main_v34[24]; // [esp+180h] [ebp-6Ch] BYREF _BYTE _main_v35[12]; // [esp+198h] [ebp-54h] BYREF _BYTE _main_v36[12]; // [esp+1A4h] [ebp-48h] BYREF _BYTE _main_v37[12]; // [esp+1B0h] [ebp-3Ch] BYREF _BYTE _main_v38[12]; // [esp+1BCh] [ebp-30h] BYREF _DWORD _main_v39[6]; // [esp+1C8h] [ebp-24h] BYREF int n5; // [esp+1E8h] [ebp-4h] _main_v39[5] = _main_v16; /* Inline expansion of sub_4029B0 */ void *__thiscall sub_4029B0(void *this) { unsigned __int8 sub_4029B0_v3; // [esp+7h] [ebp-1h] /* Inline expansion of sub_403FB0 */ _Cnd_internal_imp_t *__thiscall sub_403FB0(_Cnd_internal_imp_t *this, int a2) { _Cnd_internal_imp_t::_get_cv(this); /* Inline expansion of sub_4046E0 */ _DWORD *__thiscall sub_4046E0(_DWORD *this) { /* Inline expansion of unknown_libname_18 */ /* [Max depth reached at unknown_libname_18] */ /* End inline unknown_libname_18 */ this[4] = 0; this[5] = 0; return this; } /* End inline sub_4046E0 */ return this; } /* End inline sub_403FB0 */ /* Inline expansion of unknown_libname_3 */ // Microsoft VisualC 14/net runtime void __stdcall unknown_libname_3(int a1) { ; } /* End inline unknown_libname_3 */ /* Inline expansion of sub_402D60 */ int __thiscall sub_402D60(_DWORD *this) { char sub_402D60_v2; // [esp+Bh] [ebp-1h] BYREF this[4] = 0; this[5] = 15; sub_402D60_v2 = 0; return unknown_libname_14(this, &sub_402D60_v2); } /* End inline sub_402D60 */ return this; } /* End inline sub_4029B0 */ n5 = 0; /* Inline expansion of memset_w */ void *__thiscall sub_402390(void *this, size_t Size) { return memset(this, 0, Size); } /* End inline memset_w */ _main_v19[0] = 104; _main_v19[1] = 84; _main_v19[2] = 153; _main_v19[3] = 98; _main_v19[4] = 66; _main_v19[5] = 2; _main_v19[6] = 232; _main_v19[7] = 140; _main_v19[8] = 178; _main_v19[9] = 151; _main_v19[10] = 10; _main_v19[11] = 173; _main_v19[12] = 154; _main_v19[13] = 51; _main_v19[14] = 86; _main_v19[15] = 18; _main_v19[16] = 79; _main_v19[17] = 66; _main_v19[18] = 197; _main_v19[19] = 202; _main_v19[20] = 63; _main_v19[21] = 184; _main_v19[22] = 60; _main_v19[23] = 146; cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai = _Cnd_internal_imp_t::_get_cv((_Cnd_internal_imp_t *)&_main_v27); _main_v3 = (_DWORD *)unknown_libname_4(_main_v19, _main_v20); /* Inline expansion of sub_402450 */ const struct std::_Container_base0 *__thiscall sub_402450( const struct std::_Container_base0 *this, char a2, int a3, struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai) { int sub_402450_v4; // eax int sub_402450_v6; // [esp-8h] [ebp-1Ch] unsigned __int8 sub_402450_v7; // [esp+6h] [ebp-Eh] unsigned __int8 sub_402450_v8; // [esp+7h] [ebp-Dh] char sub_402450_v10; // [esp+Fh] [ebp-5h] BYREF /* Inline expansion of sub_403C90 */ void *__thiscall sub_403C90( void *this, int a2, struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai) { /* Inline expansion of unknown_libname_9 */ // Microsoft VisualC 14/net runtime int __cdecl unknown_libname_9(int a1) { return a1; } /* End inline unknown_libname_9 */ /* Inline expansion of sub_404610 */ _DWORD *__thiscall sub_404610(_DWORD *this) { *this = 0; this[1] = 0; this[2] = 0; return this; } /* End inline sub_404610 */ return this; } /* End inline sub_403C90 */ std::_Fake_proxy_ptr_impl::_Fake_proxy_ptr_impl( (std::_Fake_proxy_ptr_impl *)&sub_402450_v10, (const struct std::_Fake_allocator *)&unk_40725D, this); sub_402450_v6 = unknown_libname_6(&a2); sub_402450_v4 = unknown_libname_7(&a2); /* Inline expansion of sub_403CC0 */ int __thiscall sub_403CC0(_DWORD *this, int a2, int a3, int a4) { int sub_403CC0_v4; // eax int sub_403CC0_result; // eax _DWORD *sub_403CC0_v7; // [esp+10h] [ebp-14h] BYREF int sub_403CC0_v8; // [esp+20h] [ebp-4h] sub_403CC0_v4 = sub_404DE0(a2, a3); sub_403CC0_result = unknown_libname_9(sub_403CC0_v4); if ( sub_403CC0_result ) { /* Inline expansion of sub_404640 */ int __thiscall sub_404640(void *this, unsigned int a2) { if ( a2 > std::_Tree<std::_Tmap_traits<void *,`anonymous namespace'::_Mutex_count_pair,std::less<void *>,std::_Crt_allocator<std::pair<void * const,`anonymous namespace'::_Mutex_count_pair>>,0>>::max_size(this) ) /* Inline expansion of sub_404810 */ /* [Max depth reached at sub_404810] */ /* End inline sub_404810 */ return sub_404820(a2); } /* End inline sub_404640 */ sub_403CC0_v7 = this; sub_403CC0_v8 = 0; this[1] = sub_404DF0(a2, a3, *this); sub_403CC0_v7 = 0; sub_403CC0_v8 = -1; return sub_404420(&sub_403CC0_v7); } return sub_403CC0_result; } /* End inline sub_403CC0 */ /* Inline expansion of unknown_libname_2 */ // Microsoft VisualC 14/net runtime void unknown_libname_2() { ; } /* End inline unknown_libname_2 */ return this; } /* End inline sub_402450 */ LOBYTE(n5) = 1; /* Inline expansion of memset_w */ /* [Skipped recursive call to memset_w] */ /* End inline memset_w */ _main_v17[0] = 18; _main_v17[1] = 26; _main_v17[2] = 125; _main_v17[3] = 6; _main_v17[4] = 7; _main_v17[5] = 111; _main_v17[6] = 76; _main_v17[7] = 104; _main_v17[8] = 122; _main_v17[9] = 4; _main_v17[10] = 124; _main_v17[11] = 13; _main_v17[12] = 93; _main_v17[13] = 112; _main_v17[14] = 103; _main_v17[15] = 9; _main_v17[16] = 97; _main_v17[17] = 112; _main_v17[18] = 111; _main_v17[19] = 93; _main_v17[20] = 105; _main_v17[21] = 99; _main_v17[22] = 79; _main_v17[23] = 10; cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai_1 = _Cnd_internal_imp_t::_get_cv((_Cnd_internal_imp_t *)&_main_v26); _main_v4 = (_DWORD *)unknown_libname_4(_main_v17, _main_v18); /* Inline expansion of sub_402450 */ /* [Skipped recursive call to sub_402450] */ /* End inline sub_402450 */ LOBYTE(n5) = 2; /* Inline expansion of sub_402870 */ _Cnd_internal_imp_t *__thiscall sub_402870(_Cnd_internal_imp_t *this, void *Src) { unsigned __int8 sub_402870_v3; // [esp+Bh] [ebp-19h] char sub_402870_v5; // [esp+13h] [ebp-11h] BYREF int sub_402870_v6; // [esp+20h] [ebp-4h] /* Inline expansion of sub_403FB0 */ /* [Skipped recursive call to sub_403FB0] */ /* End inline sub_403FB0 */ sub_402870_v6 = 0; std::_Fake_proxy_ptr_impl::_Fake_proxy_ptr_impl( (std::_Fake_proxy_ptr_impl *)&sub_402870_v5, (const struct std::_Fake_allocator *)&unk_40725D, this); /* Inline expansion of sub_402D60 */ /* [Skipped recursive call to sub_402D60] */ /* End inline sub_402D60 */ std::string::assign(Src); /* Inline expansion of unknown_libname_2 */ /* [Skipped recursive call to unknown_libname_2] */ /* End inline unknown_libname_2 */ return this; } /* End inline sub_402870 */ LOBYTE(n5) = 3; /* Inline expansion of sub_4038F0 */ int __cdecl sub_4038F0(int a1, int a2) { __int64 sub_4038F0_v2; // rax _DWORD sub_4038F0_v4[4]; // [esp+0h] [ebp-90h] BYREF __int64 sub_4038F0_v5; // [esp+10h] [ebp-80h] __int64 sub_4038F0_v6; // [esp+18h] [ebp-78h] __int64 sub_4038F0_v7; // [esp+20h] [ebp-70h] int sub_4038F0_v8; // [esp+28h] [ebp-68h] int sub_4038F0_v9; // [esp+2Ch] [ebp-64h] BYREF int sub_4038F0_v10; // [esp+30h] [ebp-60h] BYREF int sub_4038F0_v11; // [esp+34h] [ebp-5Ch] int sub_4038F0_v12; // [esp+38h] [ebp-58h] int sub_4038F0_v13; // [esp+3Ch] [ebp-54h] int sub_4038F0_v14; // [esp+40h] [ebp-50h] BYREF int sub_4038F0_v15; // [esp+44h] [ebp-4Ch] BYREF int sub_4038F0_v16; // [esp+48h] [ebp-48h] int sub_4038F0_v17; // [esp+4Ch] [ebp-44h] int sub_4038F0_v18; // [esp+50h] [ebp-40h] __int64 sub_4038F0_v19; // [esp+54h] [ebp-3Ch] __int64 sub_4038F0_v20; // [esp+5Ch] [ebp-34h] __int64 sub_4038F0_v21; // [esp+64h] [ebp-2Ch] unsigned __int8 sub_4038F0_v22; // [esp+6Eh] [ebp-22h] unsigned __int8 sub_4038F0_v23; // [esp+6Fh] [ebp-21h] int sub_4038F0_v24; // [esp+70h] [ebp-20h] _BYTE sub_4038F0_v25[8]; // [esp+74h] [ebp-1Ch] BYREF _DWORD *sub_4038F0_v26; // [esp+80h] [ebp-10h] int sub_4038F0_v27; // [esp+8Ch] [ebp-4h] sub_4038F0_v26 = sub_4038F0_v4; sub_4038F0_v24 = 0; sub_4038F0_v20 = (unsigned int)unknown_libname_11(a2); sub_4038F0_v7 = std::ios_base::width((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1)); if ( sub_4038F0_v7 <= 0 || (sub_4038F0_v6 = std::ios_base::width((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1)), sub_4038F0_v6 <= sub_4038F0_v20) ) { sub_4038F0_v19 = 0; } else { sub_4038F0_v2 = std::ios_base::width((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1)); sub_4038F0_v19 = sub_4038F0_v2 - sub_4038F0_v20; } sub_4038F0_v21 = sub_4038F0_v19; /* Inline expansion of sub_4044E0 */ _BYTE *__thiscall sub_4044E0(_BYTE *this, int a2) { int sub_4044E0_v3; // [esp+4h] [ebp-14h] /* Inline expansion of sub_404780 */ void *__thiscall sub_404780(void *this, int a2) { int sub_404780_v4; // [esp+8h] [ebp-4h] *(_DWORD *)this = a2; sub_404780_v4 = std::ios::rdbuf(*(_DWORD *)(**(_DWORD **)this + 4) + *(_DWORD *)this); if ( sub_404780_v4 ) (*(void (__thiscall **)(int))(*(_DWORD *)sub_404780_v4 + 4))(sub_404780_v4); return this; } /* End inline sub_404780 */ if ( std::ios_base::good((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2)) ) { sub_4044E0_v3 = std::ios::tie(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2); if ( sub_4044E0_v3 && sub_4044E0_v3 != a2 ) { std::ostream::flush(sub_4044E0_v3); this[4] = std::ios_base::good((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2)); } else { this[4] = 1; } } else { this[4] = 0; } return this; } /* End inline sub_4044E0 */ sub_4038F0_v27 = 0; if ( (unsigned __int8)unknown_libname_17(sub_4038F0_v25) ) { LOBYTE(sub_4038F0_v27) = 1; sub_4038F0_v18 = std::ios_base::flags((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1)); if ( (sub_4038F0_v18 & 0x1C0) != 0x40 ) { while ( sub_4038F0_v21 > 0 ) { sub_4038F0_v23 = std::ios::fill(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1); sub_4038F0_v17 = std::ios::rdbuf(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1); sub_4038F0_v16 = std::streambuf::sputc(sub_4038F0_v17, sub_4038F0_v23); sub_4038F0_v15 = sub_4038F0_v16; sub_4038F0_v14 = std::numeric_limits<unsigned int>::max(); if ( (unsigned __int8)unknown_libname_10(&sub_4038F0_v14, &sub_4038F0_v15) ) { sub_4038F0_v24 |= 4u; break; } --sub_4038F0_v21; } } if ( !sub_4038F0_v24 ) { sub_4038F0_v13 = std::ios::rdbuf(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1); sub_4038F0_v5 = std::streambuf::sputn(sub_4038F0_v13, a2, sub_4038F0_v20, HIDWORD(sub_4038F0_v20)); if ( sub_4038F0_v5 != sub_4038F0_v20 ) sub_4038F0_v24 |= 4u; } if ( !sub_4038F0_v24 ) { while ( sub_4038F0_v21 > 0 ) { sub_4038F0_v22 = std::ios::fill(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1); sub_4038F0_v12 = std::ios::rdbuf(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1); sub_4038F0_v11 = std::streambuf::sputc(sub_4038F0_v12, sub_4038F0_v22); sub_4038F0_v10 = sub_4038F0_v11; sub_4038F0_v9 = std::numeric_limits<unsigned int>::max(); if ( (unsigned __int8)unknown_libname_10(&sub_4038F0_v9, &sub_4038F0_v10) ) { sub_4038F0_v24 |= 4u; break; } --sub_4038F0_v21; } } std::ios_base::width((std::ios_base *)(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1), 0); sub_4038F0_v27 = 0; } else { sub_4038F0_v24 |= 4u; } std::ios::setstate(*(_DWORD *)(*(_DWORD *)a1 + 4) + a1, sub_4038F0_v24, 0); sub_4038F0_v8 = a1; sub_4038F0_v27 = -1; /* Inline expansion of sub_404460 */ int __thiscall sub_404460(_DWORD *this) { if ( !std::uncaught_exception() ) std::ostream::_Osfx(*this); return sub_404710(this); } /* End inline sub_404460 */ return sub_4038F0_v8; } /* End inline sub_4038F0 */ /* Inline expansion of sub_403C30 */ int __cdecl sub_403C30(int ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A, _BYTE *a2) { int sub_403C30_v2; // eax sub_403C30_v2 = unknown_libname_9(?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A); return sub_4049A0(sub_403C30_v2, a2); } /* End inline sub_403C30 */ if ( unknown_libname_5(_main_v34) == 24 ) { /* [Library call preserved: memset] */ memset(_main_v39, 0, 16); /* Inline expansion of memset_w */ /* [Skipped recursive call to memset_w] */ /* End inline memset_w */ cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai_2 = _Cnd_internal_imp_t::_get_cv((_Cnd_internal_imp_t *)&_main_v25); /* Inline expansion of sub_402650 */ void *__thiscall sub_402650( void *this, int n6, struct Concurrency::details::stl_condition_variable_win7 *cv@_Cnd_internal_imp_t@@QAEPAVstl_condition_variable_win7@detai) { _BYTE sub_402650_v5[2]; // [esp+6h] [ebp-2h] BYREF /* Inline expansion of sub_403C90 */ /* [Skipped recursive call to sub_403C90] */ /* End inline sub_403C90 */ /* Inline expansion of sub_403E70 */ void __thiscall sub_403E70(const struct std::_Container_base0 *this, unsigned int n6, _BYTE *a3) { const struct std::_Container_base0 *sub_403E70_v5; // [esp+10h] [ebp-18h] BYREF char sub_403E70_v6; // [esp+17h] [ebp-11h] BYREF int sub_403E70_v7; // [esp+24h] [ebp-4h] std::_Fake_proxy_ptr_impl::_Fake_proxy_ptr_impl( (std::_Fake_proxy_ptr_impl *)&sub_403E70_v6, (const struct std::_Fake_allocator *)&unk_40725D, this); if ( n6 ) { /* Inline expansion of sub_404640 */ /* [Skipped recursive call to sub_404640] */ /* End inline sub_404640 */ sub_403E70_v5 = this; sub_403E70_v7 = 0; *((_DWORD *)this + 1) = sub_404680(*(_DWORD *)this, n6, (unsigned __int8)*a3); sub_403E70_v5 = 0; sub_403E70_v7 = -1; /* Inline expansion of sub_404420 */ _DWORD *__thiscall sub_404420(_DWORD *this) { _DWORD *sub_404420_result; // eax sub_404420_result = this; if ( *this ) return (_DWORD *)sub_402B30(this); return sub_404420_result; } /* End inline sub_404420 */ } /* Inline expansion of unknown_libname_2 */ /* [Skipped recursive call to unknown_libname_2] */ /* End inline unknown_libname_2 */ } /* End inline sub_403E70 */ return this; } /* End inline sub_402650 */ LOBYTE(n5) = 4; _main_v8 = (_DWORD *)sub_402610(_main_v38); _main_v9 = (_DWORD *)sub_4026E0(_main_v34); *_main_v8 = *_main_v9; _main_v8[1] = _main_v9[1]; _main_v8[2] = _main_v9[2]; _main_v8[3] = _main_v9[3]; _main_v8[4] = _main_v9[4]; _main_v8[5] = _main_v9[5]; _main_v13 = sub_402400(_main_v38); _main_v10 = sub_402610(_main_v38); /* Inline expansion of sub_401600 */ int __cdecl sub_401600(int *a1, int a2, int a3) { int sub_401600_v3; // ecx int sub_401600_v4; // eax int sub_401600_v5; // edx int sub_401600_result; // eax int sub_401600_v7; // ecx int sub_401600_v8; // edx int sub_401600_v9; // [esp+18h] [ebp-18h] int sub_401600_v10; // [esp+18h] [ebp-18h] int sub_401600_v11; // [esp+1Ch] [ebp-14h] unsigned int sub_401600_v12; // [esp+20h] [ebp-10h] unsigned int sub_401600_v13; // [esp+20h] [ebp-10h] unsigned int sub_401600_v14; // [esp+24h] [ebp-Ch] unsigned int sub_401600_v15; // [esp+28h] [ebp-8h] unsigned int j; // [esp+2Ch] [ebp-4h] int i; // [esp+2Ch] [ebp-4h] int sub_401600_v18; // [esp+3Ch] [ebp+Ch] if ( a2 <= 1 ) { if ( a2 < -1 ) { sub_401600_v18 = -a2; sub_401600_v13 = -1640531527 * (52 / sub_401600_v18 + 6); sub_401600_v14 = *a1; do { sub_401600_v10 = (sub_401600_v13 >> 2) & 3; for ( i = sub_401600_v18 - 1; i; --i ) { sub_401600_v7 = a1[i] - (((a1[i - 1] ^ *(_DWORD *)(a3 + 4 * (sub_401600_v10 ^ i & 3))) + (sub_401600_v14 ^ sub_401600_v13)) ^ (((16 * a1[i - 1]) ^ (sub_401600_v14 >> 3)) + ((4 * sub_401600_v14) ^ ((unsigned int)a1[i - 1] >> 5)))); a1[i] = sub_401600_v7; sub_401600_v14 = sub_401600_v7; } sub_401600_v8 = *a1 - (((a1[sub_401600_v18 - 1] ^ *(_DWORD *)(a3 + 4 * sub_401600_v10)) + (sub_401600_v14 ^ sub_401600_v13)) ^ (((16 * a1[sub_401600_v18 - 1]) ^ (sub_401600_v14 >> 3)) + ((4 * sub_401600_v14) ^ ((unsigned int)a1[sub_401600_v18 - 1] >> 5)))); *a1 = sub_401600_v8; sub_401600_result = sub_401600_v8; sub_401600_v14 = sub_401600_v8; sub_401600_v13 += 1640531527; } while ( sub_401600_v13 ); } } else { sub_401600_v11 = 52 / a2 + 6; sub_401600_v12 = 0; sub_401600_v15 = a1[a2 - 1]; do { sub_401600_v12 -= 1640531527; sub_401600_v9 = (sub_401600_v12 >> 2) & 3; for ( j = 0; j < a2 - 1; ++j ) { sub_401600_v3 = ((sub_401600_v15 ^ *(_DWORD *)(a3 + 4 * (sub_401600_v9 ^ j & 3))) + (a1[j + 1] ^ sub_401600_v12)) ^ (((16 * sub_401600_v15) ^ ((unsigned int)a1[j + 1] >> 3)) + ((4 * a1[j + 1]) ^ (sub_401600_v15 >> 5))); sub_401600_v4 = a1[j]; a1[j] = sub_401600_v3 + sub_401600_v4; sub_401600_v15 = sub_401600_v3 + sub_401600_v4; } sub_401600_v5 = (((sub_401600_v15 ^ *(_DWORD *)(a3 + 4 * (sub_401600_v9 ^ j & 3))) + (*a1 ^ sub_401600_v12)) ^ (((16 * sub_401600_v15) ^ ((unsigned int)*a1 >> 3)) + ((4 * *a1) ^ (sub_401600_v15 >> 5)))) + a1[a2 - 1]; a1[a2 - 1] = sub_401600_v5; sub_401600_result = sub_401600_v5; sub_401600_v15 = sub_401600_v5; --sub_401600_v11; } while ( sub_401600_v11 ); } return sub_401600_result; } /* End inline sub_401600 */ _main_v11 = (void *)sub_402610(_main_v38); /* Inline expansion of sub_402910 */ _Cnd_internal_imp_t *__thiscall sub_402910(_Cnd_internal_imp_t *this, void *Src, size_t Size) { unsigned __int8 sub_402910_v4; // [esp+Bh] [ebp-19h] char sub_402910_v6; // [esp+13h] [ebp-11h] BYREF int sub_402910_v7; // [esp+20h] [ebp-4h] /* Inline expansion of sub_403FB0 */ /* [Skipped recursive call to sub_403FB0] */ /* End inline sub_403FB0 */ sub_402910_v7 = 0; std::_Fake_proxy_ptr_impl::_Fake_proxy_ptr_impl( (std::_Fake_proxy_ptr_impl *)&sub_402910_v6, (const struct std::_Fake_allocator *)&unk_40725D, this); /* Inline expansion of sub_402D60 */ /* [Skipped recursive call to sub_402D60] */ /* End inline sub_402D60 */ std::string::assign(Src, Size); /* Inline expansion of unknown_libname_2 */ /* [Skipped recursive call to unknown_libname_2] */ /* End inline unknown_libname_2 */ return this; } /* End inline sub_402910 */ LOBYTE(n5) = 5; /* Inline expansion of sub_401BA0 */ int __cdecl sub_401BA0(int a1, int a2) { _BYTE sub_401BA0_v3[24]; // [esp+4h] [ebp-7Ch] BYREF int sub_401BA0_v4[7]; // [esp+1Ch] [ebp-64h] BYREF int sub_401BA0_v5; // [esp+38h] [ebp-48h] int sub_401BA0_v6; // [esp+3Ch] [ebp-44h] int sub_401BA0_v7; // [esp+40h] [ebp-40h] int sub_401BA0_v8; // [esp+44h] [ebp-3Ch] int sub_401BA0_v9; // [esp+48h] [ebp-38h] int sub_401BA0_v10; // [esp+4Ch] [ebp-34h] unsigned __int8 *sub_401BA0_v11; // [esp+50h] [ebp-30h] unsigned __int8 sub_401BA0_v12; // [esp+57h] [ebp-29h] _BYTE sub_401BA0_v13[24]; // [esp+58h] [ebp-28h] BYREF int sub_401BA0_v14; // [esp+7Ch] [ebp-4h] sub_401BA0_v9 = 0; /* Inline expansion of sub_4029B0 */ /* [Skipped recursive call to sub_4029B0] */ /* End inline sub_4029B0 */ sub_401BA0_v14 = 0; sub_401BA0_v10 = a2; sub_401BA0_v11 = (unsigned __int8 *)sub_4026E0(a2); sub_401BA0_v8 = sub_402720(a2); while ( sub_401BA0_v11 != (unsigned __int8 *)sub_401BA0_v8 ) { sub_401BA0_v12 = *sub_401BA0_v11; sub_401BA0_v7 = sub_401590(sub_401BA0_v3, sub_401BA0_v12); sub_401BA0_v6 = sub_401BA0_v7; LOBYTE(sub_401BA0_v14) = 1; sub_401BA0_v5 = sub_4038B0((int)sub_401BA0_v4, sub_401BA0_v7, " "); sub_401BA0_v4[6] = sub_401BA0_v5; LOBYTE(sub_401BA0_v14) = 2; /* Inline expansion of sub_4027A0 */ int __stdcall sub_4027A0(int a1) { return sub_402770(a1); } /* End inline sub_4027A0 */ LOBYTE(sub_401BA0_v14) = 1; std::string::~string(sub_401BA0_v4); LOBYTE(sub_401BA0_v14) = 0; std::string::~string(sub_401BA0_v3); ++sub_401BA0_v11; } /* Inline expansion of sub_402820 */ int __thiscall sub_402820(void *this, int a2) { int sub_402820_v2; // eax int sub_402820_v3; // eax int sub_402820_v5; // [esp+0h] [ebp-8h] unsigned __int8 sub_402820_v6; // [esp+7h] [ebp-1h] sub_402820_v2 = sub_402C80(a2, this); sub_402820_v3 = unknown_libname_9(sub_402820_v2); /* Inline expansion of sub_403F80 */ _DWORD *__thiscall sub_403F80(_DWORD *this, int a2, int a3) { /* Inline expansion of unknown_libname_9 */ /* [Skipped recursive call to unknown_libname_9] */ /* End inline unknown_libname_9 */ /* Inline expansion of sub_4046E0 */ /* [Skipped recursive call to sub_4046E0] */ /* End inline sub_4046E0 */ return this; } /* End inline sub_403F80 */ /* Inline expansion of unknown_libname_3 */ /* [Skipped recursive call to unknown_libname_3] */ /* End inline unknown_libname_3 */ /* Inline expansion of sub_4031F0 */ int __stdcall sub_4031F0(_DWORD *a1) { /* Inline expansion of sub_403530 */ /* [Max depth reached at sub_403530] */ /* End inline sub_403530 */ return sub_402D60(a1); } /* End inline sub_4031F0 */ return sub_402820_v5; } /* End inline sub_402820 */ sub_401BA0_v9 |= 1u; sub_401BA0_v14 = -1; std::string::~string(sub_401BA0_v13); return a1; } /* End inline sub_401BA0 */ LOBYTE(n5) = 6; if ( (unsigned __int8)sub_401CC0(_main_v32, _main_v36) ) _main_v12 = sub_4038F0(std::cout, "You find flag?"); else _main_v12 = sub_4038F0(std::cout, "Wrong!"); std::ostream::operator<<(_main_v12); LOBYTE(n5) = 7; /* Inline expansion of memset_w */ /* [Skipped recursive call to memset_w] */ /* End inline memset_w */ /* Inline expansion of sub_402690 */ void *__thiscall sub_402690(void *this) { unsigned __int8 sub_402690_v3; // [esp+7h] [ebp-1h] /* Inline expansion of sub_403F30 */ _Cnd_internal_imp_t *__thiscall sub_403F30(_Cnd_internal_imp_t *this, int a2) { _Cnd_internal_imp_t::_get_cv(this); /* Inline expansion of sub_404610 */ /* [Skipped recursive call to sub_404610] */ /* End inline sub_404610 */ return this; } /* End inline sub_403F30 */ /* Inline expansion of unknown_libname_3 */ /* [Skipped recursive call to unknown_libname_3] */ /* End inline unknown_libname_3 */ return this; } /* End inline sub_402690 */ LOBYTE(n5) = 8; _main_v16[9] = sub_4018B0(_main_v33, _main_v34, _main_v31, _main_v35); LOBYTE(n5) = 9; _main_v16[8] = sub_401BA0(_main_v30, _main_v33); LOBYTE(n5) = 10; if ( (unsigned __int8)sub_401CC0(_main_v33, _main_v37) ) { _main_v23 = sub_4038F0(std::cout, "You find flag!"); std::ostream::operator<<(_main_v23); } else { _main_v22 = sub_4038F0(std::cout, "Wrong!"); std::ostream::operator<<(_main_v22); } LOBYTE(n5) = 9; std::string::~string(_main_v30); LOBYTE(n5) = 8; std::string::~string(_main_v33); LOBYTE(n5) = 7; /* Inline expansion of sub_402430 */ int __thiscall sub_402430(void *this) { return sub_402B30(this); } /* End inline sub_402430 */ n5 = 5; _main_v21 = 0; std::string::~string(_main_v29); LOBYTE(n5) = 4; std::string::~string(_main_v32); LOBYTE(n5) = 3; /* Inline expansion of sub_402430 */ /* [Skipped recursive call to sub_402430] */ /* End inline sub_402430 */ LOBYTE(n5) = 2; std::string::~string(_main_v31); LOBYTE(n5) = 1; /* Inline expansion of sub_402430 */ /* [Skipped recursive call to sub_402430] */ /* End inline sub_402430 */ LOBYTE(n5) = 0; /* Inline expansion of sub_402430 */ /* [Skipped recursive call to sub_402430] */ /* End inline sub_402430 */ n5 = -1; std::string::~string(_main_v34); return _main_v21; } else { _main_v5 = sub_4038F0(std::cerr, "The entered string length is not 24!"); std::ostream::operator<<(_main_v5); _main_v24 = -1; LOBYTE(n5) = 2; std::string::~string(_main_v31); LOBYTE(n5) = 1; /* Inline expansion of sub_402430 */ /* [Skipped recursive call to sub_402430] */ /* End inline sub_402430 */ LOBYTE(n5) = 0; /* Inline expansion of sub_402430 */ /* [Skipped recursive call to sub_402430] */ /* End inline sub_402430 */ n5 = -1; std::string::~string(_main_v34); return _main_v24; } }分析代码的作用与主要功能,列出关键变量与函数
09-11
请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 特别注意: 1.保持所有原始功能不变 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.不使用 auto,使用显式 for 循环 6.结构体采用32位定义 7.不要使用小函数,保持原始的函数定义 8.严格保持protobuf字段映射关系 函数中的 HDDMXng::BelUsageAttrib::BelUsageAttrib 映射为 message BelUsageAttrib { optional uint32 flags = 1; optional uint32 type = 2; optional uint32 bitwidth = 3; optional string attribname = 4; optional sint32 defint = 5; optional double defdouble = 6; optional bool defbool = 7; optional string defstring = 8; repeated sint32 listofints = 9 [packed = true]; repeated double listofdoubles = 10 [packed = true]; repeated bool listofbools = 11 [packed = true]; repeated string listofstrings = 12; optional uint32 precision = 13; } void __fastcall HDDMBelUsageAttrib::readme_pb(HDDMBelUsageAttrib *this, std::istream *stream, HDDMDevice *hddmDevice) { google::protobuf::Message *v4; // rdx unsigned int v5; // ecx bool v6; // zf _QWORD *v7; // r12 _QWORD *qword30_1; // rbp unsigned __int64 v9; // r15 _QWORD *qword28_8; // r13 __int64 v11; // rbp __int64 v12; // rax __int64 v13; // rcx __int64 v14; // rdi unsigned __int64 v15; // rdx int v16; // esi __int64 v17; // rsi void *n_23; // r14 char *s2_4; // rbp __int64 qword48_3; // r13 char *p_char40_6; // r15 int v22; // eax unsigned __int64 n_24; // r12 size_t n_9; // rdx __int64 n0x7FFFFFFF_3; // r12 unsigned __int64 n_25; // rcx size_t n_10; // rdx int v28; // eax __int64 p_char40_7; // rax int v30; // eax __int64 *qword28_9; // rax unsigned __int64 v32; // rdx unsigned __int64 v33; // rsi __int64 v34; // r12 __int64 qword28_10; // rax __int64 qword28_6; // r13 unsigned __int64 n_6; // r14 char *s_2; // rbp __int64 v39; // rax char *v40; // r15 __int64 v41; // r12 int v42; // edi char v43; // si __int64 *v44; // rdi __int64 v45; // rax __int64 v46; // rax void *n_19; // r13 __int64 *s2_3; // rbp __int64 qword48_2; // r14 char *p_char40_4; // r15 int v51; // eax unsigned __int64 n_20; // r12 size_t n_7; // rdx __int64 n0x7FFFFFFF_2; // r12 unsigned __int64 n_21; // rcx size_t n_8; // rdx int v57; // eax __int64 p_char40_5; // rax int v59; // r13d char **qword28_7; // rax unsigned __int64 v61; // rdx unsigned __int64 v62; // rsi unsigned __int64 v63; // r13 _QWORD *qword28_5; // rax _QWORD *qword28_3; // r12 unsigned __int64 n_3; // r13 char *s_1; // rax char *v68; // r14 char *s_4; // rbp int v70; // r8d void *n_15; // r14 __int64 *s2_2; // rbp __int64 qword48_1; // r13 char *p_char40_2; // r15 int v75; // eax unsigned __int64 n_16; // r12 size_t n_4; // rdx __int64 n0x7FFFFFFF_1; // r12 unsigned __int64 n_17; // rcx size_t n_5; // rdx int v81; // eax __int64 p_char40_3; // rax char **qword28_4; // rax unsigned __int64 v84; // rdx __int64 v85; // rsi unsigned __int64 v86; // r13 _QWORD *qword28_1; // rax _QWORD *qword28_2; // r12 unsigned __int64 n; // r13 char *s; // rax char *v91; // r14 char *s_3; // rbp int v93; // r9d __int64 v94; // rcx void *n_11; // r14 __int64 *s2_1; // rbp __int64 qword48; // r13 char *p_char40; // r15 int v99; // eax unsigned __int64 n_12; // r12 size_t n_1; // rdx __int64 n0x7FFFFFFF; // r12 unsigned __int64 n_13; // rcx size_t n_2; // rdx int v105; // eax __int64 p_char40_1; // rax char **voidVec; // rax unsigned __int64 v108; // rdx __int64 v109; // rsi signed __int64 v110; // r9 signed __int64 v111; // r9 signed __int64 v112; // r9 signed __int64 v113; // r9 int v114; // eax int v115; // ecx int v116; // edx unsigned __int64 v117; // [rsp+0h] [rbp-1E8h] unsigned __int64 v118; // [rsp+0h] [rbp-1E8h] int v119; // [rsp+0h] [rbp-1E8h] int v120; // [rsp+0h] [rbp-1E8h] int v121[2]; // [rsp+8h] [rbp-1E0h] int v122[2]; // [rsp+8h] [rbp-1E0h] unsigned __int64 n_26; // [rsp+20h] [rbp-1C8h] unsigned __int64 n_22; // [rsp+20h] [rbp-1C8h] unsigned __int64 n_18; // [rsp+20h] [rbp-1C8h] unsigned __int64 n_14; // [rsp+20h] [rbp-1C8h] void **s1_1; // [rsp+40h] [rbp-1A8h] BYREF void **s1_2; // [rsp+50h] [rbp-198h] BYREF void **s1_3; // [rsp+60h] [rbp-188h] BYREF void **s2_5; // [rsp+70h] [rbp-178h] BYREF void *s1_4[2]; // [rsp+80h] [rbp-168h] BYREF __int64 v132; // [rsp+90h] [rbp-158h] BYREF void *s1_5[2]; // [rsp+A0h] [rbp-148h] BYREF __int64 v134; // [rsp+B0h] [rbp-138h] BYREF void *s1[2]; // [rsp+C0h] [rbp-128h] BYREF __int64 v136; // [rsp+D0h] [rbp-118h] BYREF void *s2[2]; // [rsp+E0h] [rbp-108h] BYREF char v138; // [rsp+F0h] [rbp-F8h] BYREF _BYTE attrib_msg[24]; // [rsp+100h] [rbp-E8h] BYREF int v140; // [rsp+118h] [rbp-D0h] __int64 v141; // [rsp+120h] [rbp-C8h] int v142; // [rsp+130h] [rbp-B8h] __int64 v143; // [rsp+138h] [rbp-B0h] int v144; // [rsp+148h] [rbp-A0h] __int64 v145; // [rsp+150h] [rbp-98h] int v146; // [rsp+168h] [rbp-80h] __int64 v147; // [rsp+170h] [rbp-78h] __int64 v148; // [rsp+178h] [rbp-70h] _QWORD *v149; // [rsp+180h] [rbp-68h] unsigned int v150; // [rsp+188h] [rbp-60h] char v151; // [rsp+18Ch] [rbp-5Ch] __int16 v152; // [rsp+190h] [rbp-58h] int v153; // [rsp+194h] [rbp-54h] __int64 qword30; // [rsp+198h] [rbp-50h] char v155; // [rsp+1A0h] [rbp-48h] char v156; // [rsp+1A4h] [rbp-44h] if ( HDDMDeviceDump::useXngMarks ) std::istream::read(stream, HDDMDeviceDump::markBuffer, 14); HDDMXng::BelUsageAttrib::BelUsageAttrib((HDDMXng::BelUsageAttrib *)attrib_msg); HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)attrib_msg, v4); v5 = (4 * ((v150 >> 3) & 1)) | (2 * ((v150 >> 2) & 1)) & 0xFFFFFFBB | ((v150 & 2) != 0) | HIBYTE(this->attrib_code) & 0xB8 | (((v150 >> 4) & 1) << 6); BYTE1(this->attrib_code1) = ((unsigned __int8)(v150 >> 7) << 7) | (((v150 & 0x40) != 0) << 6) & 0x7F | (32 * ((v150 & 0x20) != 0)) & 0x7F | BYTE1(this->attrib_code1) & 0x1F; v6 = (attrib_msg[16] & 0x10) == 0; HIBYTE(this->attrib_code) = (8 * (v151 & 7)) | v5 & 0xC7; if ( !v6 ) LOWORD(this->attrib_code) = v152 & 0xFFF | this->attrib_code & 0xF000; std::string::_M_assign(&this->attrib_name, v148); switch ( (HIBYTE(this->attrib_code) >> 3) & 7 ) { case 1: v86 = v140; qword28_1 = (_QWORD *)operator new(0x18u); qword28_2 = qword28_1; *qword28_1 = 0; qword28_1[1] = 0; qword28_1[2] = 0; if ( !v86 ) { v115 = v140; qword28_1[2] = 0; qword28_1[1] = 0; this->voidVec = qword28_1; if ( v115 <= 0 ) goto LABEL_158; goto LABEL_163; } if ( v86 > 0x3FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); n = 4 * v86; s = (char *)operator new(n); v91 = &s[n]; *qword28_2 = s; s_3 = s; qword28_2[2] = &s[n]; memset(s, 0, n); v93 = v140; qword28_2[1] = v91; this->voidVec = qword28_2; if ( v93 <= 0 ) goto LABEL_158; if ( !n ) { LABEL_163: v109 = 0; v108 = 0; LABEL_164: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v109, v108); } *(_QWORD *)v122 = 0; v94 = 0; v120 = 0; while ( 2 ) { *(_DWORD *)&s_3[4 * v94] = *(_DWORD *)(v141 + 4LL * v120 + 8); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s1_4); if ( !this->qword48 ) { p_char40 = &this->char40; goto LABEL_149; } n_11 = s1_4[1]; s2_1 = (__int64 *)s1_4[0]; qword48 = this->qword48; p_char40 = &this->char40; do { while ( 1 ) { n_12 = *(_QWORD *)(qword48 + 40); n_1 = (size_t)n_11; if ( n_12 <= (unsigned __int64)n_11 ) n_1 = *(_QWORD *)(qword48 + 40); if ( !n_1 ) break; v99 = memcmp(*(const void **)(qword48 + 32), s2_1, n_1); if ( !v99 ) break; if ( v99 < 0 ) goto LABEL_122; LABEL_115: p_char40 = (char *)qword48; qword48 = *(_QWORD *)(qword48 + 16); if ( !qword48 ) goto LABEL_123; } n0x7FFFFFFF = n_12 - (_QWORD)n_11; if ( n0x7FFFFFFF > 0x7FFFFFFF || n0x7FFFFFFF >= (__int64)0xFFFFFFFF80000000LL && (int)n0x7FFFFFFF >= 0 ) goto LABEL_115; LABEL_122: qword48 = *(_QWORD *)(qword48 + 24); } while ( qword48 ); LABEL_123: if ( p_char40 == &this->char40 ) goto LABEL_149; n_13 = *((_QWORD *)p_char40 + 5); n_2 = (size_t)n_11; if ( n_13 <= (unsigned __int64)n_11 ) n_2 = *((_QWORD *)p_char40 + 5); if ( n_2 && (n_14 = *((_QWORD *)p_char40 + 5), v105 = memcmp(s2_1, *((const void **)p_char40 + 4), n_2), n_13 = n_14, v105) ) { if ( v105 >= 0 ) goto LABEL_129; LABEL_149: s1_1 = s1_4; p_char40_1 = sub_F187E0(this->gap38, p_char40, &s1_1); s2_1 = (__int64 *)s1_4[0]; } else { p_char40_1 = (__int64)p_char40; v112 = (signed __int64)n_11 - n_13; if ( (__int64)((__int64)n_11 - n_13) <= 0x7FFFFFFF ) { if ( v112 < (__int64)0xFFFFFFFF80000000LL || (int)v112 < 0 ) goto LABEL_149; LABEL_129: p_char40_1 = (__int64)p_char40; } } *(_WORD *)(p_char40_1 + 64) = v120; if ( s2_1 != &v132 ) operator delete(s2_1); if ( ++v120 < v140 ) { voidVec = (char **)this->voidVec; v94 = ++*(_QWORD *)v122; s_3 = *voidVec; v108 = (voidVec[1] - *voidVec) >> 2; if ( v108 <= *(_QWORD *)v122 ) { v109 = *(_QWORD *)v122; goto LABEL_164; } continue; } break; } LABEL_158: LODWORD(this->voidVec1) = v153; LABEL_7: if ( (attrib_msg[17] & 1) != 0 ) BYTE1(this->attrib_code1) = (4 * (v156 & 7)) | BYTE1(this->attrib_code1) & 0xE3 | 2; HDDMXng::BelUsageAttrib::~BelUsageAttrib((HDDMXng::BelUsageAttrib *)attrib_msg); return; case 2: v63 = v142; qword28_5 = (_QWORD *)operator new(0x18u); qword28_3 = qword28_5; *qword28_5 = 0; qword28_5[1] = 0; qword28_5[2] = 0; if ( v63 ) { if ( v63 > 0x1FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); n_3 = 8 * v63; s_1 = (char *)operator new(n_3); v68 = &s_1[n_3]; *qword28_3 = s_1; s_4 = s_1; qword28_3[2] = &s_1[n_3]; memset(s_1, 0, n_3); v70 = v142; qword28_3[1] = v68; this->voidVec = qword28_3; if ( v70 > 0 ) { *(_QWORD *)v121 = 0; if ( n_3 ) { v119 = 0; while ( 1 ) { *(_QWORD *)&s_4[8 * *(_QWORD *)v121] = *(_QWORD *)(v143 + 8LL * v119 + 8); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s1_5); if ( !this->qword48 ) { p_char40_2 = &this->char40; goto LABEL_153; } n_15 = s1_5[1]; s2_2 = (__int64 *)s1_5[0]; qword48_1 = this->qword48; p_char40_2 = &this->char40; do { while ( 1 ) { n_16 = *(_QWORD *)(qword48_1 + 40); n_4 = (size_t)n_15; if ( n_16 <= (unsigned __int64)n_15 ) n_4 = *(_QWORD *)(qword48_1 + 40); if ( !n_4 ) break; v75 = memcmp(*(const void **)(qword48_1 + 32), s2_2, n_4); if ( !v75 ) break; if ( v75 < 0 ) goto LABEL_93; LABEL_86: p_char40_2 = (char *)qword48_1; qword48_1 = *(_QWORD *)(qword48_1 + 16); if ( !qword48_1 ) goto LABEL_94; } n0x7FFFFFFF_1 = n_16 - (_QWORD)n_15; if ( n0x7FFFFFFF_1 > 0x7FFFFFFF || n0x7FFFFFFF_1 >= (__int64)0xFFFFFFFF80000000LL && (int)n0x7FFFFFFF_1 >= 0 ) { goto LABEL_86; } LABEL_93: qword48_1 = *(_QWORD *)(qword48_1 + 24); } while ( qword48_1 ); LABEL_94: if ( p_char40_2 == &this->char40 ) goto LABEL_153; n_17 = *((_QWORD *)p_char40_2 + 5); n_5 = (size_t)n_15; if ( n_17 <= (unsigned __int64)n_15 ) n_5 = *((_QWORD *)p_char40_2 + 5); if ( n_5 && (n_18 = *((_QWORD *)p_char40_2 + 5), v81 = memcmp(s2_2, *((const void **)p_char40_2 + 4), n_5), n_17 = n_18, v81) ) { if ( v81 >= 0 ) goto LABEL_100; LABEL_153: s1_2 = s1_5; p_char40_3 = sub_F187E0(this->gap38, p_char40_2, &s1_2); s2_2 = (__int64 *)s1_5[0]; } else { p_char40_3 = (__int64)p_char40_2; v113 = (signed __int64)n_15 - n_17; if ( (__int64)((__int64)n_15 - n_17) <= 0x7FFFFFFF ) { if ( v113 < (__int64)0xFFFFFFFF80000000LL || (int)v113 < 0 ) goto LABEL_153; LABEL_100: p_char40_3 = (__int64)p_char40_2; } } *(_WORD *)(p_char40_3 + 64) = v119; if ( s2_2 != &v134 ) operator delete(s2_2); if ( v142 <= ++v119 ) goto LABEL_157; qword28_4 = (char **)this->voidVec; ++*(_QWORD *)v121; s_4 = *qword28_4; v84 = (qword28_4[1] - *qword28_4) >> 3; if ( v84 <= *(_QWORD *)v121 ) { v85 = *(_QWORD *)v121; goto LABEL_167; } } } LABEL_166: v85 = 0; v84 = 0; LABEL_167: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v85, v84); } } else { v116 = v142; qword28_5[2] = 0; qword28_5[1] = 0; this->voidVec = qword28_5; if ( v116 > 0 ) goto LABEL_166; } LABEL_157: this->voidVec1 = qword30; goto LABEL_7; case 3: v34 = v144; qword28_10 = operator new(0x28u); *(_QWORD *)qword28_10 = 0; *(_DWORD *)(qword28_10 + 8) = 0; *(_QWORD *)(qword28_10 + 16) = 0; *(_DWORD *)(qword28_10 + 24) = 0; qword28_6 = qword28_10; *(_QWORD *)(qword28_10 + 32) = 0; n_6 = 8 * ((unsigned __int64)(v34 + 63) >> 6); s_2 = (char *)operator new(n_6); *(_QWORD *)qword28_6 = s_2; v39 = v34 + 63; *(_DWORD *)(qword28_6 + 8) = 0; *(_QWORD *)(qword28_6 + 32) = &s_2[n_6]; if ( v34 >= 0 ) v39 = v34; v40 = &s_2[8 * (v39 >> 6)]; v41 = v34 % 64; if ( v41 < 0 ) { v41 += 64; v40 -= 8; } *(_QWORD *)(qword28_6 + 16) = v40; *(_DWORD *)(qword28_6 + 24) = v41; if ( s_2 != &s_2[n_6] ) memset(s_2, 0, n_6); v42 = v144; this->voidVec = qword28_6; if ( v42 <= 0 ) goto LABEL_141; v43 = *(_BYTE *)(v145 + 8); if ( !(v41 + 8 * (v40 - s_2)) ) { v62 = 0; v61 = 0; LABEL_172: std::__throw_out_of_range_fmt( "vector<bool>::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v62, v61); } v118 = 0; LABEL_51: v44 = (__int64 *)&s_2[8 * (v118 >> 6)]; v45 = 1LL << v118; if ( v43 ) v46 = *v44 | v45; else v46 = *v44 & ~v45; *v44 = v46; HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s1); if ( !this->qword48 ) { p_char40_4 = &this->char40; goto LABEL_138; } n_19 = s1[1]; s2_3 = (__int64 *)s1[0]; qword48_2 = this->qword48; p_char40_4 = &this->char40; while ( 1 ) { while ( 1 ) { n_20 = *(_QWORD *)(qword48_2 + 40); n_7 = (size_t)n_19; if ( n_20 <= (unsigned __int64)n_19 ) n_7 = *(_QWORD *)(qword48_2 + 40); if ( n_7 ) { v51 = memcmp(*(const void **)(qword48_2 + 32), s2_3, n_7); if ( v51 ) break; } n0x7FFFFFFF_2 = n_20 - (_QWORD)n_19; if ( n0x7FFFFFFF_2 > 0x7FFFFFFF || n0x7FFFFFFF_2 >= (__int64)0xFFFFFFFF80000000LL && (int)n0x7FFFFFFF_2 >= 0 ) goto LABEL_57; LABEL_64: qword48_2 = *(_QWORD *)(qword48_2 + 24); if ( !qword48_2 ) { LABEL_65: if ( &this->char40 == p_char40_4 ) goto LABEL_138; n_21 = *((_QWORD *)p_char40_4 + 5); n_8 = (size_t)n_19; if ( n_21 <= (unsigned __int64)n_19 ) n_8 = *((_QWORD *)p_char40_4 + 5); if ( n_8 && (n_22 = *((_QWORD *)p_char40_4 + 5), v57 = memcmp(s2_3, *((const void **)p_char40_4 + 4), n_8), n_21 = n_22, v57) ) { if ( v57 >= 0 ) goto LABEL_71; LABEL_138: s1_3 = s1; p_char40_5 = sub_F187E0(this->gap38, p_char40_4, &s1_3); s2_3 = (__int64 *)s1[0]; } else { p_char40_5 = (__int64)p_char40_4; v110 = (signed __int64)n_19 - n_21; if ( (__int64)((__int64)n_19 - n_21) <= 0x7FFFFFFF ) { if ( v110 < (__int64)0xFFFFFFFF80000000LL || (int)v110 < 0 ) goto LABEL_138; LABEL_71: p_char40_5 = (__int64)p_char40_4; } } *(_WORD *)(p_char40_5 + 64) = v118; if ( s2_3 != &v136 ) operator delete(s2_3); v59 = v118 + 1; if ( v144 <= (int)v118 + 1 ) { LABEL_141: LOBYTE(this->voidVec1) = v155; goto LABEL_7; } ++v118; v43 = *(_BYTE *)(v145 + v59 + 8); qword28_7 = (char **)this->voidVec; s_2 = *qword28_7; v61 = *((unsigned int *)qword28_7 + 6) + 8 * (qword28_7[2] - *qword28_7) - *((unsigned int *)qword28_7 + 2); if ( v118 >= v61 ) { v62 = v118; goto LABEL_172; } goto LABEL_51; } } if ( v51 < 0 ) goto LABEL_64; LABEL_57: p_char40_4 = (char *)qword48_2; qword48_2 = *(_QWORD *)(qword48_2 + 16); if ( !qword48_2 ) goto LABEL_65; } case 4: case 5: case 6: v9 = v146; v117 = v146; qword28_8 = (_QWORD *)operator new(0x18u); *qword28_8 = 0; qword28_8[1] = 0; qword28_8[2] = 0; if ( v9 ) { if ( v9 > 0x7FFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v11 = 32 * v117; v12 = operator new(32 * v117); v13 = v12 + 32 * v117; v14 = v12; *qword28_8 = v12; qword28_8[1] = v12; v15 = v117; qword28_8[2] = v13; do { if ( v12 ) { *(_QWORD *)(v12 + 8) = 0; *(_BYTE *)(v12 + 16) = 0; *(_QWORD *)v12 = v12 + 16; } v12 += 32; --v15; } while ( v15 ); v16 = v146; v117 = 0; qword28_8[1] = v13; this->voidVec = qword28_8; if ( v16 > 0 ) { v17 = *(_QWORD *)(v147 + 8); if ( v11 ) { while ( 1 ) { std::string::_M_assign(32 * v117 + v14, v17); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s2); if ( !this->qword48 ) { p_char40_6 = &this->char40; goto LABEL_145; } n_23 = s2[1]; s2_4 = (char *)s2[0]; qword48_3 = this->qword48; p_char40_6 = &this->char40; do { while ( 1 ) { n_24 = *(_QWORD *)(qword48_3 + 40); n_9 = (size_t)n_23; if ( n_24 <= (unsigned __int64)n_23 ) n_9 = *(_QWORD *)(qword48_3 + 40); if ( !n_9 ) break; v22 = memcmp(*(const void **)(qword48_3 + 32), s2_4, n_9); if ( !v22 ) break; if ( v22 < 0 ) goto LABEL_29; LABEL_22: p_char40_6 = (char *)qword48_3; qword48_3 = *(_QWORD *)(qword48_3 + 16); if ( !qword48_3 ) goto LABEL_30; } n0x7FFFFFFF_3 = n_24 - (_QWORD)n_23; if ( n0x7FFFFFFF_3 > 0x7FFFFFFF || n0x7FFFFFFF_3 >= (__int64)0xFFFFFFFF80000000LL && (int)n0x7FFFFFFF_3 >= 0 ) { goto LABEL_22; } LABEL_29: qword48_3 = *(_QWORD *)(qword48_3 + 24); } while ( qword48_3 ); LABEL_30: if ( p_char40_6 == &this->char40 ) goto LABEL_145; n_25 = *((_QWORD *)p_char40_6 + 5); n_10 = (size_t)n_23; if ( n_25 <= (unsigned __int64)n_23 ) n_10 = *((_QWORD *)p_char40_6 + 5); if ( n_10 && (n_26 = *((_QWORD *)p_char40_6 + 5), v28 = memcmp(s2_4, *((const void **)p_char40_6 + 4), n_10), n_25 = n_26, v28) ) { if ( v28 >= 0 ) goto LABEL_36; LABEL_145: s2_5 = s2; p_char40_7 = sub_F187E0(this->gap38, p_char40_6, &s2_5); s2_4 = (char *)s2[0]; } else { p_char40_7 = (__int64)p_char40_6; v111 = (signed __int64)n_23 - n_25; if ( (__int64)((__int64)n_23 - n_25) <= 0x7FFFFFFF ) { if ( v111 < (__int64)0xFFFFFFFF80000000LL || (int)v111 < 0 ) goto LABEL_145; LABEL_36: p_char40_7 = (__int64)p_char40_6; } } *(_WORD *)(p_char40_7 + 64) = v117; if ( s2_4 != &v138 ) operator delete(s2_4); v30 = v117 + 1; if ( v146 <= (int)v117 + 1 ) goto LABEL_6; ++v117; v17 = *(_QWORD *)(v147 + 8LL * v30 + 8); qword28_9 = (__int64 *)this->voidVec; v14 = *qword28_9; v32 = (qword28_9[1] - *qword28_9) >> 5; if ( v32 <= v117 ) { v33 = v117; goto LABEL_161; } } } LABEL_160: v33 = v117; v32 = 0; LABEL_161: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v33, v32); } } else { v114 = v146; qword28_8[2] = 0; qword28_8[1] = 0; this->voidVec = qword28_8; if ( v114 > 0 ) goto LABEL_160; } LABEL_6: v7 = v149; qword30_1 = (_QWORD *)operator new(0x20u); *qword30_1 = qword30_1 + 2; sub_F12340(qword30_1, *v7, v7[1] + *v7); this->voidVec1 = qword30_1; goto LABEL_7; default: goto LABEL_7; } }
最新发布
10-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeff_ROS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值