{"type": "func", "start": 6443648944, "end": 6443649143, "name": "memcmp", "pseudocode": "// \n// memcmp from 0x1801247b0 to 0x180124877 (199 bytes)\n// \n// 7 xrefs:\n// > sub_180045B60 @ 0x180045f2b\n// > sub_18005A650 @ 0x18005a90d\n// > sub_1800B80C0 @ 0x1800b813b\n// > sub_1800D4BB0 @ 0x1800d4be3\n// > sub_1800EABD0 @ 0x1800ead6a\n// > sub_1800EB320 @ 0x1800eb411\n// > <???> @ 0x18020266c\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 memcmp(const void *Buf1, const void *Buf2, size_t Size)\n{\n  signed __int64 v3; // rdx\n  bool v4; // cf\n  size_t v6; // r9\n  unsigned __int64 v7; // rax\n  size_t v8; // r9\n\n  v3 = (_BYTE *)Buf2 - (_BYTE *)Buf1;\n  if ( Size < 8 )\n    goto mcmp30;\n  for ( ; ((unsigned __int8)Buf1 & 7) != 0; --Size )\n  {\n    v4 = *(_BYTE *)Buf1 < *((_BYTE *)Buf1 + v3);\n    if ( *(_BYTE *)Buf1 != *((_BYTE *)Buf1 + v3) )\n      return -v4 - (v4 - 1);\n    Buf1 = (char *)Buf1 + 1;\n  }\n  if ( !(Size >> 3) )\n  {\nmcmp30:\n    if ( !Size )\n      return 0;\n    while ( 1 )\n    {\n      v4 = *(_BYTE *)Buf1 < *((_BYTE *)Buf1 + v3);\n      if ( *(_BYTE *)Buf1 != *((_BYTE *)Buf1 + v3) )\n        break;\n      Buf1 = (char *)Buf1 + 1;\n      if ( !--Size )\n        return 0;\n    }\n    return -v4 - (v4 - 1);\n  }\n  v6 = Size >> 5;\n  if ( Size >> 5 )\n  {\n    while ( 1 )\n    {\n      v7 = *(_QWORD *)Buf1;\n      if ( *(_QWORD *)Buf1 != *(_QWORD *)((char *)Buf1 + v3) )\n        break;\n      v7 = *((_QWORD *)Buf1 + 1);\n      if ( v7 != *(_QWORD *)((char *)Buf1 + v3 + 8) )\n        goto mcmp_adjust8;\n      v7 = *((_QWORD *)Buf1 + 2);\n      if ( v7 != *(_QWORD *)((char *)Buf1 + v3 + 16) )\n        goto mcmp_adjust16;\n      v7 = *((_QWORD *)Buf1 + 3);\n      if ( v7 != *(_QWORD *)((char *)Buf1 + v3 + 24) )\n      {\n        Buf1 = (char *)Buf1 + 8;\nmcmp_adjust16:\n        Buf1 = (char *)Buf1 + 8;\nmcmp_adjust8:\n        Buf1 = (char *)Buf1 + 8;\n        break;\n      }\n      Buf1 = (char *)Buf1 + 32;\n      if ( !--v6 )\n      {\n        Size &= 0x1Fu;\n        goto mcmp70;\n      }\n    }\n  }\n  else\n  {\nmcmp70:\n    v8 = Size >> 3;\n    if ( !(Size >> 3) )\n      goto mcmp30;\n    while ( 1 )\n    {\n      v7 = *(_QWORD *)Buf1;\n      if ( *(_QWORD *)Buf1 != *(_QWORD *)((char *)Buf1 + v3) )\n        break;\n      Buf1 = (char *)Buf1 + 8;\n      if ( !--v8 )\n      {\n        Size &= 7u;\n        goto mcmp30;\n      }\n    }\n  }\n  v4 = _byteswap_uint64(v7) < _byteswap_uint64(*(_QWORD *)((char *)Buf1 + v3));\n  return -v4 - (v4 - 1);\n}", "assembly": "; \n; memcmp from 0x1801247b0 to 0x180124877 (199 bytes)\n; \n; 7 xrefs:\n; > sub_180045B60 @ 0x180045f2b\n; > sub_18005A650 @ 0x18005a90d\n; > sub_1800B80C0 @ 0x1800b813b\n; > sub_1800D4BB0 @ 0x1800d4be3\n; > sub_1800EABD0 @ 0x1800ead6a\n; > sub_1800EB320 @ 0x1800eb411\n; > <???> @ 0x18020266c\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, 0x1801247b0\ncmp     r8, 8                                                          ; +0x3, 0x1801247b3\njb      short mcmp30                                                   ; +0x7, 0x1801247b7\ntest    cl, 7                                                          ; +0x9, 0x1801247b9\njz      short mcmp20                                                   ; +0xc, 0x1801247bc\nxchg    ax, ax                                                         ; +0xe, 0x1801247be\nmov     al, [rcx]                                                      ; +0x10, 0x1801247c0\ncmp     al, [rcx+rdx]                                                  ; +0x12, 0x1801247c2\njnz     short mcmp_not_equal                                           ; +0x15, 0x1801247c5\ninc     rcx                                                            ; +0x17, 0x1801247c7\ndec     r8                                                             ; +0x1a, 0x1801247ca\ntest    cl, 7                                                          ; +0x1d, 0x1801247cd\njnz     short mcmp10                                                   ; +0x20, 0x1801247d0\nmov     r9, r8                                                         ; +0x22, 0x1801247d2\nshr     r9, 3                                                          ; +0x25, 0x1801247d5\njnz     short mcmp50                                                   ; +0x29, 0x1801247d9\ntest    r8, r8                                                         ; +0x2b, 0x1801247db\njz      short mcmp_equal                                               ; +0x2e, 0x1801247de\nmov     al, [rcx]                                                      ; +0x30, 0x1801247e0\ncmp     al, [rcx+rdx]                                                  ; +0x32, 0x1801247e2\njnz     short mcmp_not_equal                                           ; +0x35, 0x1801247e5\ninc     rcx                                                            ; +0x37, 0x1801247e7\ndec     r8                                                             ; +0x3a, 0x1801247ea\njnz     short mcmp40                                                   ; +0x3d, 0x1801247ed\nxor     rax, rax                                                       ; +0x3f, 0x1801247ef\nretn                                                                   ; +0x42, 0x1801247f2\nsbb     eax, eax                                                       ; +0x43, 0x1801247f3\nsbb     eax, 0FFFFFFFFh                                                ; +0x45, 0x1801247f5\nretn                                                                   ; +0x48, 0x1801247f8\nalign 2                                                                ; +0x49, 0x1801247f9\nshr     r9, 2                                                          ; +0x4a, 0x1801247fa\njz      short mcmp70                                                   ; +0x4e, 0x1801247fe\nmov     rax, [rcx]                                                     ; +0x50, 0x180124800\ncmp     rax, [rcx+rdx]                                                 ; +0x53, 0x180124803\njnz     short mcmp_adjust0                                             ; +0x57, 0x180124807\nmov     rax, [rcx+8]                                                   ; +0x59, 0x180124809\ncmp     rax, [rcx+rdx+8]                                               ; +0x5d, 0x18012480d\njnz     short mcmp_adjust8                                             ; +0x62, 0x180124812\nmov     rax, [rcx+10h]                                                 ; +0x64, 0x180124814\ncmp     rax, [rcx+rdx+10h]                                             ; +0x68, 0x180124818\njnz     short mcmp_adjust16                                            ; +0x6d, 0x18012481d\nmov     rax, [rcx+18h]                                                 ; +0x6f, 0x18012481f\ncmp     rax, [rcx+rdx+18h]                                             ; +0x73, 0x180124823\njnz     short mcmp_adjust24                                            ; +0x78, 0x180124828\nadd     rcx, 20h ; ' '                                                 ; +0x7a, 0x18012482a\ndec     r9                                                             ; +0x7e, 0x18012482e\njnz     short mcmp60                                                   ; +0x81, 0x180124831\nand     r8, 1Fh                                                        ; +0x83, 0x180124833\nmov     r9, r8                                                         ; +0x87, 0x180124837\nshr     r9, 3                                                          ; +0x8a, 0x18012483a\njz      short mcmp30                                                   ; +0x8e, 0x18012483e\nmov     rax, [rcx]                                                     ; +0x90, 0x180124840\ncmp     rax, [rcx+rdx]                                                 ; +0x93, 0x180124843\njnz     short mcmp_adjust0                                             ; +0x97, 0x180124847\nadd     rcx, 8                                                         ; +0x99, 0x180124849\ndec     r9                                                             ; +0x9d, 0x18012484d\njnz     short mcmp80                                                   ; +0xa0, 0x180124850\nand     r8, 7                                                          ; +0xa2, 0x180124852\njmp     short mcmp30                                                   ; +0xa6, 0x180124856\nadd     rcx, 8                                                         ; +0xa8, 0x180124858\nadd     rcx, 8                                                         ; +0xac, 0x18012485c\nadd     rcx, 8                                                         ; +0xb0, 0x180124860\nmov     rcx, [rdx+rcx]                                                 ; +0xb4, 0x180124864\nbswap   rax                                                            ; +0xb8, 0x180124868\nbswap   rcx                                                            ; +0xbb, 0x18012486b\ncmp     rax, rcx                                                       ; +0xbe, 0x18012486e\nsbb     eax, eax                                                       ; +0xc1, 0x180124871\nsbb     eax, 0FFFFFFFFh                                                ; +0xc3, 0x180124873\nretn                                                                   ; +0xc6, 0x180124876", "xrefs": ["sub_180045B60 @ 0x180045f2b", "sub_18005A650 @ 0x18005a90d", "sub_1800B80C0 @ 0x1800b813b", "sub_1800D4BB0 @ 0x1800d4be3", "sub_1800EABD0 @ 0x1800ead6a", "sub_1800EB320 @ 0x1800eb411", "<???> @ 0x18020266c"], "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"}