{"type": "func", "start": 6443680752, "end": 6443680899, "name": "__crt_stdio_output::crop_zeroes", "pseudocode": "// \n// __crt_stdio_output::crop_zeroes from 0x18012c3f0 to 0x18012c483 (147 bytes)\n// \n// 3 xrefs:\n// > unknown_libname_44 @ 0x18012dee8\n// > unknown_libname_45 @ 0x18012e0bd\n// > unknown_libname_46 @ 0x18012e29d\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\nvoid __fastcall __crt_stdio_output::crop_zeroes(\n        __crt_stdio_output *this,\n        char *a2,\n        struct __crt_locale_pointers *const a3)\n{\n  char v3; // r9\n  char v4; // al\n  char v5; // dl\n  char *v6; // rcx\n  char i; // al\n  char v8; // al\n  char *v9; // r8\n  char *j; // rcx\n  char *v11; // rdx\n  char v12; // al\n\n  v3 = ***(_BYTE ***)(*(_QWORD *)a2 + 248LL);\n  v4 = *(_BYTE *)this;\n  if ( *(_BYTE *)this )\n  {\n    v5 = *(_BYTE *)this;\n    do\n    {\n      v4 = v5;\n      if ( v5 == v3 )\n        break;\n      v4 = *((_BYTE *)this + 1);\n      this = (__crt_stdio_output *)((char *)this + 1);\n      v5 = v4;\n    }\n    while ( v4 );\n  }\n  v6 = (char *)this + 1;\n  if ( v4 )\n  {\n    for ( i = *v6; i; i = *++v6 )\n    {\n      if ( ((i - 69) & 0xDF) == 0 )\n        break;\n    }\n    v8 = *(v6 - 1);\n    v9 = v6;\n    for ( j = v6 - 1; v8 == 48; --j )\n      v8 = *(j - 1);\n    v11 = j - 1;\n    if ( v8 != v3 )\n      v11 = j;\n    do\n    {\n      v12 = *v9;\n      *++v11 = *v9++;\n    }\n    while ( v12 );\n  }\n}", "assembly": "; \n; __crt_stdio_output::crop_zeroes from 0x18012c3f0 to 0x18012c483 (147 bytes)\n; \n; 3 xrefs:\n; > unknown_libname_44 @ 0x18012dee8\n; > unknown_libname_45 @ 0x18012e0bd\n; > unknown_libname_46 @ 0x18012e29d\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\nmov     rax, [rdx]                                                     ; +0x0, 0x18012c3f0\nmov     rdx, [rax+0F8h]                                                ; +0x3, 0x18012c3f3\nmov     rax, [rdx]                                                     ; +0xa, 0x18012c3fa\nmovzx   r9d, byte ptr [rax]                                            ; +0xd, 0x18012c3fd\nmovzx   eax, byte ptr [rcx]                                            ; +0x11, 0x18012c401\ntest    al, al                                                         ; +0x14, 0x18012c404\njz      short loc_18012C426                                            ; +0x16, 0x18012c406\nmovzx   edx, al                                                        ; +0x18, 0x18012c408\nnop     dword ptr [rax+rax+00h]                                        ; +0x1b, 0x18012c40b\nmovzx   eax, dl                                                        ; +0x20, 0x18012c410\ncmp     dl, r9b                                                        ; +0x23, 0x18012c413\njz      short loc_18012C426                                            ; +0x26, 0x18012c416\nmovzx   eax, byte ptr [rcx+1]                                          ; +0x28, 0x18012c418\ninc     rcx                                                            ; +0x2c, 0x18012c41c\nmovzx   edx, al                                                        ; +0x2f, 0x18012c41f\ntest    al, al                                                         ; +0x32, 0x18012c422\njnz     short loc_18012C410                                            ; +0x34, 0x18012c424\ninc     rcx                                                            ; +0x36, 0x18012c426\ntest    al, al                                                         ; +0x39, 0x18012c429\njz      short locret_18012C482                                         ; +0x3b, 0x18012c42b\nmovzx   eax, byte ptr [rcx]                                            ; +0x3d, 0x18012c42d\ntest    al, al                                                         ; +0x40, 0x18012c430\njz      short loc_18012C445                                            ; +0x42, 0x18012c432\nsub     al, 45h ; 'E'                                                  ; +0x44, 0x18012c434\ntest    al, 0DFh                                                       ; +0x46, 0x18012c436\njz      short loc_18012C445                                            ; +0x48, 0x18012c438\nmovzx   eax, byte ptr [rcx+1]                                          ; +0x4a, 0x18012c43a\ninc     rcx                                                            ; +0x4e, 0x18012c43e\ntest    al, al                                                         ; +0x51, 0x18012c441\njnz     short loc_18012C434                                            ; +0x53, 0x18012c443\nmovzx   eax, byte ptr [rcx-1]                                          ; +0x55, 0x18012c445\nmov     r8, rcx                                                        ; +0x59, 0x18012c449\ndec     rcx                                                            ; +0x5c, 0x18012c44c\ncmp     al, 30h ; '0'                                                  ; +0x5f, 0x18012c44f\njnz     short loc_18012C45E                                            ; +0x61, 0x18012c451\nmovzx   eax, byte ptr [rcx-1]                                          ; +0x63, 0x18012c453\ndec     rcx                                                            ; +0x67, 0x18012c457\ncmp     al, 30h ; '0'                                                  ; +0x6a, 0x18012c45a\njz      short loc_18012C453                                            ; +0x6c, 0x18012c45c\ncmp     al, r9b                                                        ; +0x6e, 0x18012c45e\nlea     rdx, [rcx-1]                                                   ; +0x71, 0x18012c461\ncmovnz  rdx, rcx                                                       ; +0x75, 0x18012c465\nnop     dword ptr [rax+00000000h]                                      ; +0x79, 0x18012c469\nmovzx   eax, byte ptr [r8]                                             ; +0x80, 0x18012c470\nlea     rdx, [rdx+1]                                                   ; +0x84, 0x18012c474\nmov     [rdx], al                                                      ; +0x88, 0x18012c478\nlea     r8, [r8+1]                                                     ; +0x8a, 0x18012c47a\ntest    al, al                                                         ; +0x8e, 0x18012c47e\njnz     short loc_18012C470                                            ; +0x90, 0x18012c480\nretn                                                                   ; +0x92, 0x18012c482", "xrefs": ["unknown_libname_44 @ 0x18012dee8", "unknown_libname_45 @ 0x18012e0bd", "unknown_libname_46 @ 0x18012e29d"], "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"}