{"type": "func", "start": 6443772136, "end": 6443772261, "name": "strchr", "pseudocode": "// \n// strchr from 0x1801428e8 to 0x180142965 (125 bytes)\n// \n// 1 xrefs:\n// > common_set_variable_in_environment_nolock<char> @ 0x18013ade8\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\nchar *__cdecl strchr(const char *Str, int Val)\n{\n  __m128i *v2; // r8\n  unsigned int v3; // r10d\n  char *v4; // r9\n  __m128i v5; // xmm2\n  __int64 v6; // rdx\n  char *v7; // rdx\n\n  v2 = (__m128i *)((unsigned __int64)Str & 0xFFFFFFFFFFFFFFF0uLL);\n  v3 = (unsigned __int8)Val | ((unsigned __int8)Val << 8);\n  v4 = nullptr;\n  v5 = _mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_cvtsi32_si128(v3), 0), 0);\n  for ( LODWORD(v6) = (-1 << ((unsigned __int8)Str & 0xF))\n                    & _mm_movemask_epi8(\n                        _mm_or_si128(\n                          _mm_cmpeq_epi8(v5, *(__m128i *)((unsigned __int64)Str & 0xFFFFFFFFFFFFFFF0uLL)),\n                          _mm_cmpeq_epi8((__m128i)0LL, *(__m128i *)((unsigned __int64)Str & 0xFFFFFFFFFFFFFFF0uLL))));\n        !(_DWORD)v6;\n        LODWORD(v6) = _mm_movemask_epi8(_mm_or_si128(_mm_cmpeq_epi8(v5, *v2), _mm_cmpeq_epi8((__m128i)0LL, *v2))) )\n  {\n    ++v2;\n  }\n  _BitScanForward((unsigned int *)&v6, v6);\n  v7 = &v2->m128i_i8[v6];\n  if ( *v7 == (_BYTE)v3 )\n    return v7;\n  return v4;\n}", "assembly": "; \n; strchr from 0x1801428e8 to 0x180142965 (125 bytes)\n; \n; 1 xrefs:\n; > common_set_variable_in_environment_nolock<char> @ 0x18013ade8\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmovzx   eax, dl                                                        ; +0x0, 0x1801428e8\nmov     r8, rcx                                                        ; +0x3, 0x1801428eb\nmov     r10d, eax                                                      ; +0x6, 0x1801428ee\nand     r8, 0FFFFFFFFFFFFFFF0h                                         ; +0x9, 0x1801428f1\nshl     r10d, 8                                                        ; +0xd, 0x1801428f5\nand     ecx, 0Fh                                                       ; +0x11, 0x1801428f9\nor      r10d, eax                                                      ; +0x14, 0x1801428fc\nxor     r9d, r9d                                                       ; +0x17, 0x1801428ff\nor      eax, 0FFFFFFFFh                                                ; +0x1a, 0x180142902\nshl     eax, cl                                                        ; +0x1d, 0x180142905\nmovd    xmm0, r10d                                                     ; +0x1f, 0x180142907\npshuflw xmm1, xmm0, 0                                                  ; +0x24, 0x18014290c\nxorps   xmm0, xmm0                                                     ; +0x29, 0x180142911\npcmpeqb xmm0, xmmword ptr [r8]                                         ; +0x2c, 0x180142914\npshufd  xmm2, xmm1, 0                                                  ; +0x31, 0x180142919\nmovdqa  xmm1, xmm2                                                     ; +0x36, 0x18014291e\npcmpeqb xmm1, xmmword ptr [r8]                                         ; +0x3a, 0x180142922\npor     xmm1, xmm0                                                     ; +0x3f, 0x180142927\npmovmskb edx, xmm1                                                     ; +0x43, 0x18014292b\nand     edx, eax                                                       ; +0x47, 0x18014292f\njnz     short loc_180142954                                            ; +0x49, 0x180142931\nadd     r8, 10h                                                        ; +0x4b, 0x180142933\nmovdqa  xmm1, xmm2                                                     ; +0x4f, 0x180142937\nxorps   xmm0, xmm0                                                     ; +0x53, 0x18014293b\npcmpeqb xmm1, xmmword ptr [r8]                                         ; +0x56, 0x18014293e\npcmpeqb xmm0, xmmword ptr [r8]                                         ; +0x5b, 0x180142943\npor     xmm1, xmm0                                                     ; +0x60, 0x180142948\npmovmskb edx, xmm1                                                     ; +0x64, 0x18014294c\ntest    edx, edx                                                       ; +0x68, 0x180142950\njz      short loc_180142933                                            ; +0x6a, 0x180142952\nbsf     edx, edx                                                       ; +0x6c, 0x180142954\nadd     rdx, r8                                                        ; +0x6f, 0x180142957\ncmp     [rdx], r10b                                                    ; +0x72, 0x18014295a\ncmovz   r9, rdx                                                        ; +0x75, 0x18014295d\nmov     rax, r9                                                        ; +0x79, 0x180142961\nretn                                                                   ; +0x7c, 0x180142964", "xrefs": ["common_set_variable_in_environment_nolock<char> @ 0x18013ade8"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}