{"type": "func", "start": 6443699600, "end": 6443699725, "name": "strncmp", "pseudocode": "// \n// strncmp from 0x180130d90 to 0x180130e0d (125 bytes)\n// \n// 2 xrefs:\n// > sub_1800FAC10 @ 0x1800faeb0\n// > <???> @ 0x180202ea0\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\nint __cdecl strncmp(const char *Str1, const char *Str2, size_t MaxCount)\n{\n  signed __int64 v3; // rdx\n  unsigned __int8 v4; // al\n  __int64 v5; // rax\n  bool v6; // cc\n  __int64 v7; // rax\n\n  v3 = Str2 - Str1;\n  if ( MaxCount )\n  {\n    if ( ((unsigned __int8)Str1 & 7) != 0 )\n      goto comp_head_loop_begin;\nLABEL_7:\n    while ( (((_WORD)v3 + (_WORD)Str1) & 0xFFFu) <= 0xFF8 )\n    {\n      v5 = *(_QWORD *)Str1;\n      if ( *(_QWORD *)Str1 != *(_QWORD *)&Str1[v3] )\n        break;\n      Str1 += 8;\n      v6 = MaxCount <= 8;\n      MaxCount -= 8LL;\n      if ( v6 || ((v5 - 0x101010101010101LL) & ~v5 & 0x8080808080808080uLL) != 0 )\n        goto return_equal;\n    }\ncomp_head_loop_begin:\n    while ( 1 )\n    {\n      v4 = *Str1;\n      if ( *Str1 != Str1[v3] )\n        return -(__int64)(v4 < (unsigned int)Str1[v3]) | 1;\n      ++Str1;\n      if ( !--MaxCount || !v4 )\n        goto return_equal;\n      if ( ((unsigned __int8)Str1 & 7) == 0 )\n        goto LABEL_7;\n    }\n  }\n  else\n  {\nreturn_equal:\n    LODWORD(v7) = 0;\n  }\n  return v7;\n}", "assembly": "; \n; strncmp from 0x180130d90 to 0x180130e0d (125 bytes)\n; \n; 2 xrefs:\n; > sub_1800FAC10 @ 0x1800faeb0\n; > <???> @ 0x180202ea0\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\nsub     rdx, rcx                                                       ; +0x0, 0x180130d90\ntest    r8, r8                                                         ; +0x3, 0x180130d93\njz      short return_equal                                             ; +0x6, 0x180130d96\ntest    ecx, 7                                                         ; +0x8, 0x180130d98\njz      short _qword_loop_enter                                        ; +0xe, 0x180130d9e\nmovzx   eax, byte ptr [rcx]                                            ; +0x10, 0x180130da0\ncmp     al, [rdx+rcx]                                                  ; +0x13, 0x180130da3\njnz     short return_not_equal                                         ; +0x16, 0x180130da6\ninc     rcx                                                            ; +0x18, 0x180130da8\ndec     r8                                                             ; +0x1b, 0x180130dab\njz      short return_equal                                             ; +0x1e, 0x180130dae\ntest    al, al                                                         ; +0x20, 0x180130db0\njz      short return_equal                                             ; +0x22, 0x180130db2\ntest    rcx, 7                                                         ; +0x24, 0x180130db4\njnz     short comp_head_loop_begin                                     ; +0x2b, 0x180130dbb\nmov     r11, 8080808080808080h                                         ; +0x2d, 0x180130dbd\nmov     r10, 0FEFEFEFEFEFEFEFFh                                        ; +0x37, 0x180130dc7\nlea     eax, [rdx+rcx]                                                 ; +0x41, 0x180130dd1\nand     eax, 0FFFh                                                     ; +0x44, 0x180130dd4\ncmp     eax, 0FF8h                                                     ; +0x49, 0x180130dd9\nja      short comp_head_loop_begin                                     ; +0x4e, 0x180130dde\nmov     rax, [rcx]                                                     ; +0x50, 0x180130de0\ncmp     rax, [rdx+rcx]                                                 ; +0x53, 0x180130de3\njnz     short comp_head_loop_begin                                     ; +0x57, 0x180130de7\nadd     rcx, 8                                                         ; +0x59, 0x180130de9\nsub     r8, 8                                                          ; +0x5d, 0x180130ded\njbe     short return_equal                                             ; +0x61, 0x180130df1\nlea     r9, [r10+rax]                                                  ; +0x63, 0x180130df3\nnot     rax                                                            ; +0x67, 0x180130df7\nand     rax, r9                                                        ; +0x6a, 0x180130dfa\ntest    r11, rax                                                       ; +0x6d, 0x180130dfd\njz      short loc_180130DD1                                            ; +0x70, 0x180130e00\nxor     eax, eax                                                       ; +0x72, 0x180130e02\nretn                                                                   ; +0x74, 0x180130e04\nsbb     rax, rax                                                       ; +0x75, 0x180130e05\nor      rax, 1                                                         ; +0x78, 0x180130e08\nretn                                                                   ; +0x7c, 0x180130e0c", "xrefs": ["sub_1800FAC10 @ 0x1800faeb0", "<???> @ 0x180202ea0"], "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"}