{"type": "func", "start": 6443736140, "end": 6443736531, "name": "copy_and_add_argument_to_buffer<char>", "pseudocode": "// \n// copy_and_add_argument_to_buffer<char> from 0x180139c4c to 0x180139dd3 (391 bytes)\n// \n// 5 xrefs:\n// > common_expand_argv_wildcards<char> @ 0x180139aba\n// > _wsetlocale_set_cat @ 0x180139e58\n// > _wsetlocale_set_cat @ 0x180139f54\n// > _wsetlocale_set_cat @ 0x18013a02a\n// > <???> @ 0x180203818\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\n__int64 __fastcall copy_and_add_argument_to_buffer<char>(char *Source, char *a2, rsize_t MaxCount, __int64 a4)\n{\n  __int64 v4; // rbp\n  unsigned int v6; // esi\n  rsize_t v10; // rbp\n  size_t v12; // r15\n  char *v13; // rax\n  char *v14; // rbx\n  _QWORD *v15; // rcx\n  _QWORD *v16; // r14\n  unsigned __int64 v17; // r14\n  char *v18; // rax\n\n  v4 = -1;\n  v6 = 0;\n  do\n    ++v4;\n  while ( Source[v4] );\n  v10 = v4 + 1;\n  if ( v10 > ~MaxCount )\n    return 12;\n  v12 = v10 + MaxCount + 1;\n  v13 = (char *)calloc_base(v12, 1u);\n  v14 = v13;\n  if ( MaxCount && strncpy_s(v13, v12, a2, MaxCount) || strncpy_s(&v14[MaxCount], v12 - MaxCount, Source, v10) )\n    invoke_watson(nullptr, nullptr, nullptr, 0, 0);\n  v15 = *(_QWORD **)(a4 + 8);\n  v16 = *(_QWORD **)(a4 + 16);\n  if ( v15 != v16 )\n    goto LABEL_18;\n  if ( *(_QWORD *)a4 )\n  {\n    v17 = ((__int64)v16 - *(_QWORD *)a4) >> 3;\n    if ( v17 <= 0x7FFFFFFFFFFFFFFFLL )\n    {\n      v18 = (char *)recalloc_base(*(void **)a4, 2 * v17, 8u);\n      if ( v18 )\n      {\n        *(_QWORD *)a4 = v18;\n        *(_QWORD *)(a4 + 8) = &v18[8 * v17];\n        *(_QWORD *)(a4 + 16) = &v18[16 * v17];\n        free_base(nullptr);\n        v15 = *(_QWORD **)(a4 + 8);\n        goto LABEL_18;\n      }\n      free_base(nullptr);\n    }\n  }\n  else\n  {\n    *(_QWORD *)a4 = calloc_base(4u, 8u);\n    free_base(nullptr);\n    v15 = *(_QWORD **)a4;\n    if ( *(_QWORD *)a4 )\n    {\n      *(_QWORD *)(a4 + 8) = v15;\n      *(_QWORD *)(a4 + 16) = v15 + 4;\nLABEL_18:\n      *v15 = v14;\n      *(_QWORD *)(a4 + 8) += 8LL;\n      goto LABEL_16;\n    }\n  }\n  free_base(v14);\n  v6 = 12;\nLABEL_16:\n  free_base(nullptr);\n  return v6;\n}", "assembly": "; \n; copy_and_add_argument_to_buffer<char> from 0x180139c4c to 0x180139dd3 (391 bytes)\n; \n; 5 xrefs:\n; > common_expand_argv_wildcards<char> @ 0x180139aba\n; > _wsetlocale_set_cat @ 0x180139e58\n; > _wsetlocale_set_cat @ 0x180139f54\n; > _wsetlocale_set_cat @ 0x18013a02a\n; > <???> @ 0x180203818\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     [rsp+arg_0], rbx                                               ; +0x0, 0x180139c4c\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180139c51\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x180139c56\npush    rdi                                                            ; +0xf, 0x180139c5b\npush    r12                                                            ; +0x10, 0x180139c5c\npush    r13                                                            ; +0x12, 0x180139c5e\npush    r14                                                            ; +0x14, 0x180139c60\npush    r15                                                            ; +0x16, 0x180139c62\nsub     rsp, 30h                                                       ; +0x18, 0x180139c64\nor      rbp, 0FFFFFFFFFFFFFFFFh                                        ; +0x1c, 0x180139c68\nmov     rdi, r9                                                        ; +0x20, 0x180139c6c\nxor     esi, esi                                                       ; +0x23, 0x180139c6f\nmov     r14, r8                                                        ; +0x25, 0x180139c71\nmov     r13, rdx                                                       ; +0x28, 0x180139c74\nmov     r12, rcx                                                       ; +0x2b, 0x180139c77\ninc     rbp                                                            ; +0x2e, 0x180139c7a\ncmp     [rcx+rbp], sil                                                 ; +0x31, 0x180139c7d\njnz     short loc_180139C7A                                            ; +0x35, 0x180139c81\nmov     edx, 1; Size                                                   ; +0x37, 0x180139c83\nmov     rax, r14                                                       ; +0x3c, 0x180139c88\nadd     rbp, rdx                                                       ; +0x3f, 0x180139c8b\nnot     rax                                                            ; +0x42, 0x180139c8e\ncmp     rbp, rax                                                       ; +0x45, 0x180139c91\njbe     short loc_180139CB6                                            ; +0x48, 0x180139c94\nlea     eax, [rdx+0Bh]                                                 ; +0x4a, 0x180139c96\nmov     rbx, [rsp+58h+arg_0]                                           ; +0x4d, 0x180139c99\nmov     rbp, [rsp+58h+arg_8]                                           ; +0x52, 0x180139c9e\nmov     rsi, [rsp+58h+arg_10]                                          ; +0x57, 0x180139ca3\nadd     rsp, 30h                                                       ; +0x5c, 0x180139ca8\npop     r15                                                            ; +0x60, 0x180139cac\npop     r14                                                            ; +0x62, 0x180139cae\npop     r13                                                            ; +0x64, 0x180139cb0\npop     r12                                                            ; +0x66, 0x180139cb2\npop     rdi                                                            ; +0x68, 0x180139cb4\nretn                                                                   ; +0x69, 0x180139cb5\nlea     r15, [r8+1]                                                    ; +0x6a, 0x180139cb6\nadd     r15, rbp                                                       ; +0x6e, 0x180139cba\nmov     rcx, r15; Count                                                ; +0x71, 0x180139cbd\ncall    _calloc_base                                                   ; +0x74, 0x180139cc0\nmov     rbx, rax                                                       ; +0x79, 0x180139cc5\ntest    r14, r14                                                       ; +0x7c, 0x180139cc8\njz      short loc_180139CE6                                            ; +0x7f, 0x180139ccb\nmov     r9, r14; MaxCount                                              ; +0x81, 0x180139ccd\nmov     r8, r13; Source                                                ; +0x84, 0x180139cd0\nmov     rdx, r15; SizeInBytes                                          ; +0x87, 0x180139cd3\nmov     rcx, rax; Destination                                          ; +0x8a, 0x180139cd6\ncall    strncpy_s                                                      ; +0x8d, 0x180139cd9\ntest    eax, eax                                                       ; +0x92, 0x180139cde\njnz     loc_180139DBE                                                  ; +0x94, 0x180139ce0\nsub     r15, r14                                                       ; +0x9a, 0x180139ce6\nlea     rcx, [rbx+r14]; Destination                                    ; +0x9d, 0x180139ce9\nmov     rdx, r15; SizeInBytes                                          ; +0xa1, 0x180139ced\nmov     r9, rbp; MaxCount                                              ; +0xa4, 0x180139cf0\nmov     r8, r12; Source                                                ; +0xa7, 0x180139cf3\ncall    strncpy_s                                                      ; +0xaa, 0x180139cf6\ntest    eax, eax                                                       ; +0xaf, 0x180139cfb\njnz     loc_180139DBE                                                  ; +0xb1, 0x180139cfd\nmov     rcx, [rdi+8]                                                   ; +0xb7, 0x180139d03\nlea     r15d, [rax+8]                                                  ; +0xbb, 0x180139d07\nmov     r14, [rdi+10h]                                                 ; +0xbf, 0x180139d0b\ncmp     rcx, r14                                                       ; +0xc3, 0x180139d0f\njnz     loc_180139DB5                                                  ; +0xc6, 0x180139d12\ncmp     [rdi], rsi                                                     ; +0xcc, 0x180139d18\njnz     short loc_180139D48                                            ; +0xcf, 0x180139d1b\nmov     edx, r15d; Size                                                ; +0xd1, 0x180139d1d\nlea     ecx, [rax+4]; Count                                            ; +0xd4, 0x180139d20\ncall    _calloc_base                                                   ; +0xd7, 0x180139d23\nxor     ecx, ecx; Block                                                ; +0xdc, 0x180139d28\nmov     [rdi], rax                                                     ; +0xde, 0x180139d2a\ncall    _free_base                                                     ; +0xe1, 0x180139d2d\nmov     rcx, [rdi]                                                     ; +0xe6, 0x180139d32\ntest    rcx, rcx                                                       ; +0xe9, 0x180139d35\njz      short loc_180139D7C                                            ; +0xec, 0x180139d38\nlea     rax, [rcx+20h]                                                 ; +0xee, 0x180139d3a\nmov     [rdi+8], rcx                                                   ; +0xf2, 0x180139d3e\nmov     [rdi+10h], rax                                                 ; +0xf6, 0x180139d42\njmp     short loc_180139DB5                                            ; +0xfa, 0x180139d46\nsub     r14, [rdi]                                                     ; +0xfc, 0x180139d48\nmov     rax, 7FFFFFFFFFFFFFFFh                                         ; +0xff, 0x180139d4b\nsar     r14, 3                                                         ; +0x109, 0x180139d55\ncmp     r14, rax                                                       ; +0x10d, 0x180139d59\nja      short loc_180139D7C                                            ; +0x110, 0x180139d5c\nmov     rcx, [rdi]; Block                                              ; +0x112, 0x180139d5e\nlea     rbp, [r14+r14]                                                 ; +0x115, 0x180139d61\nmov     rdx, rbp; Count                                                ; +0x119, 0x180139d65\nmov     r8, r15; Size                                                  ; +0x11c, 0x180139d68\ncall    _recalloc_base                                                 ; +0x11f, 0x180139d6b\ntest    rax, rax                                                       ; +0x124, 0x180139d70\njnz     short loc_180139D97                                            ; +0x127, 0x180139d73\nxor     ecx, ecx; Block                                                ; +0x129, 0x180139d75\ncall    _free_base                                                     ; +0x12b, 0x180139d77\nmov     rcx, rbx; Block                                                ; +0x130, 0x180139d7c\ncall    _free_base                                                     ; +0x133, 0x180139d7f\nmov     esi, 0Ch                                                       ; +0x138, 0x180139d84\nxor     ecx, ecx; Block                                                ; +0x13d, 0x180139d89\ncall    _free_base                                                     ; +0x13f, 0x180139d8b\nmov     eax, esi                                                       ; +0x144, 0x180139d90\njmp     loc_180139C99                                                  ; +0x146, 0x180139d92\nlea     rcx, [rax+r14*8]                                               ; +0x14b, 0x180139d97\nmov     [rdi], rax                                                     ; +0x14f, 0x180139d9b\nmov     [rdi+8], rcx                                                   ; +0x152, 0x180139d9e\nlea     rcx, [rax+rbp*8]                                               ; +0x156, 0x180139da2\nmov     [rdi+10h], rcx                                                 ; +0x15a, 0x180139da6\nxor     ecx, ecx; Block                                                ; +0x15e, 0x180139daa\ncall    _free_base                                                     ; +0x160, 0x180139dac\nmov     rcx, [rdi+8]                                                   ; +0x165, 0x180139db1\nmov     [rcx], rbx                                                     ; +0x169, 0x180139db5\nadd     [rdi+8], r15                                                   ; +0x16c, 0x180139db8\njmp     short loc_180139D89                                            ; +0x170, 0x180139dbc\nxor     r9d, r9d; LineNo                                               ; +0x172, 0x180139dbe\nmov     [rsp+58h+Reserved], rsi; Reserved                              ; +0x175, 0x180139dc1\nxor     r8d, r8d; FileName                                             ; +0x17a, 0x180139dc6\nxor     edx, edx; FunctionName                                         ; +0x17d, 0x180139dc9\nxor     ecx, ecx; Expression                                           ; +0x17f, 0x180139dcb\ncall    _invoke_watson                                                 ; +0x181, 0x180139dcd\ndb 0CCh                                                                ; +0x186, 0x180139dd2", "xrefs": ["common_expand_argv_wildcards<char> @ 0x180139aba", "_wsetlocale_set_cat @ 0x180139e58", "_wsetlocale_set_cat @ 0x180139f54", "_wsetlocale_set_cat @ 0x18013a02a", "<???> @ 0x180203818"], "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"}