// // strpbrk from 0x1801407b0 to 0x180140b78 (968 bytes) // // 2 xrefs: // > common_expand_argv_wildcards @ 0x180139aa4 // > @ 0x180203c38 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // char *__cdecl strpbrk(const char *Str, const char *Control) { __int64 v2; // r10 const __m128i *v3; // rdi char *v5; // r8 __m128i v6; // xmm1 unsigned int v7; // eax unsigned int v8; // edx BOOL v9; // r11d __m128i v10; // xmm2 unsigned int v11; // eax unsigned int v13; // ecx char v14; // al __m128i v15; // xmm0 __m128i v16; // xmm0 v2 = (unsigned __int8)Control & 0xF; v3 = (const __m128i *)&Control[-v2]; v5 = (char *)Str; v6 = _mm_loadu_si128((const __m128i *)&Control[-v2]); switch ( (unsigned __int8)Control & 0xF ) { case 1: v6 = _mm_srli_si128(v6, 1); break; case 2: v6 = _mm_srli_si128(v6, 2); break; case 3: v6 = _mm_srli_si128(v6, 3); break; case 4: v6 = _mm_srli_si128(v6, 4); break; case 5: v6 = _mm_srli_si128(v6, 5); break; case 6: v6 = _mm_srli_si128(v6, 6); break; case 7: v6 = _mm_srli_si128(v6, 7); break; case 8: v6 = _mm_srli_si128(v6, 8); break; case 9: v6 = _mm_srli_si128(v6, 9); break; case 0xA: v6 = _mm_srli_si128(v6, 10); break; case 0xB: v6 = _mm_srli_si128(v6, 11); break; case 0xC: v6 = _mm_srli_si128(v6, 12); break; case 0xD: v6 = _mm_srli_si128(v6, 13); break; case 0xE: v6 = _mm_srli_si128(v6, 14); break; case 0xF: v6 = _mm_srli_si128(v6, 15); break; default: break; } v7 = _mm_movemask_epi8(_mm_cmpeq_epi8((__m128i)0LL, v6)); if ( v7 ) { _BitScanForward(&v8, v7); if ( v2 ) v9 = v8 < (unsigned __int64)(16 - v2); else v9 = 1; if ( 15 - v8 <= 0xF ) { switch ( 15 - v8 ) { case 0u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 1), 1); break; case 1u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 2), 2); break; case 2u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 3), 3); break; case 3u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 4), 4); break; case 4u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 5), 5); break; case 5u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 6), 6); break; case 6u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 7), 7); break; case 7u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 8), 8); break; case 8u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 9), 9); break; case 9u: v6 = _mm_srli_si128(_mm_slli_si128(v6, 10), 10); break; case 0xAu: v6 = _mm_srli_si128(_mm_slli_si128(v6, 11), 11); break; case 0xBu: v6 = _mm_srli_si128(_mm_slli_si128(v6, 12), 12); break; case 0xCu: v6 = _mm_srli_si128(_mm_slli_si128(v6, 13), 13); break; case 0xDu: v6 = _mm_srli_si128(_mm_slli_si128(v6, 14), 14); break; case 0xEu: v6 = _mm_srli_si128(_mm_slli_si128(v6, 15), 15); break; case 0xFu: v6 = 0; break; } } if ( !v9 ) goto LABEL_40; } else { if ( ((unsigned __int8)Control & 0xF) != 0 ) { LABEL_40: v10 = _mm_loadu_si128(v3 + 1); v11 = _mm_movemask_epi8(_mm_cmpeq_epi8(v10, (__m128i)0LL)); if ( !v11 ) return unknown_libname_74(v5, (unsigned __int8 *)Control); _BitScanForward(&v13, v11); if ( (unsigned __int64)v13 - v2 < 0xFFFFFFFFFFFFFFF0uLL && v13 - v2 != 0 ) return unknown_libname_74(v5, (unsigned __int8 *)Control); switch ( 15 - v13 ) { case 0u: v10 = _mm_slli_si128(v10, 1); break; case 1u: v10 = _mm_slli_si128(v10, 2); break; case 2u: v10 = _mm_slli_si128(v10, 3); break; case 3u: v10 = _mm_slli_si128(v10, 4); break; case 4u: v10 = _mm_slli_si128(v10, 5); break; case 5u: v10 = _mm_slli_si128(v10, 6); break; case 6u: v10 = _mm_slli_si128(v10, 7); break; case 7u: v10 = _mm_slli_si128(v10, 8); break; case 8u: v10 = _mm_slli_si128(v10, 9); break; case 9u: v10 = _mm_slli_si128(v10, 10); break; case 0xAu: v10 = _mm_slli_si128(v10, 11); break; case 0xBu: v10 = _mm_slli_si128(v10, 12); break; case 0xCu: v10 = _mm_slli_si128(v10, 13); break; case 0xDu: v10 = _mm_slli_si128(v10, 14); break; case 0xEu: v10 = _mm_slli_si128(v10, 15); break; case 0xFu: v10 = 0; break; default: break; } v6 = _mm_or_si128(v10, v6); goto LABEL_64; } if ( v3->m128i_i8[1] ) return unknown_libname_74(Str, (unsigned __int8 *)Control); } LABEL_64: v14 = *v5; if ( !*v5 ) return nullptr; while ( 1 ) { v15 = _mm_cvtsi32_si128(v14); v16 = _mm_unpacklo_epi8(v15, v15); if ( _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_shuffle_epi32(_mm_unpacklo_epi8(v16, v16), 0), v6)) ) break; v14 = *++v5; if ( !v14 ) return nullptr; } return v5; }