// // copy_and_add_argument_to_buffer from 0x180139c4c to 0x180139dd3 (391 bytes) // // 5 xrefs: // > common_expand_argv_wildcards @ 0x180139aba // > _wsetlocale_set_cat @ 0x180139e58 // > _wsetlocale_set_cat @ 0x180139f54 // > _wsetlocale_set_cat @ 0x18013a02a // > @ 0x180203818 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall copy_and_add_argument_to_buffer(char *Source, char *a2, rsize_t MaxCount, __int64 a4) { __int64 v4; // rbp unsigned int v6; // esi rsize_t v10; // rbp size_t v12; // r15 char *v13; // rax char *v14; // rbx _QWORD *v15; // rcx _QWORD *v16; // r14 unsigned __int64 v17; // r14 char *v18; // rax v4 = -1; v6 = 0; do ++v4; while ( Source[v4] ); v10 = v4 + 1; if ( v10 > ~MaxCount ) return 12; v12 = v10 + MaxCount + 1; v13 = (char *)calloc_base(v12, 1u); v14 = v13; if ( MaxCount && strncpy_s(v13, v12, a2, MaxCount) || strncpy_s(&v14[MaxCount], v12 - MaxCount, Source, v10) ) invoke_watson(nullptr, nullptr, nullptr, 0, 0); v15 = *(_QWORD **)(a4 + 8); v16 = *(_QWORD **)(a4 + 16); if ( v15 != v16 ) goto LABEL_18; if ( *(_QWORD *)a4 ) { v17 = ((__int64)v16 - *(_QWORD *)a4) >> 3; if ( v17 <= 0x7FFFFFFFFFFFFFFFLL ) { v18 = (char *)recalloc_base(*(void **)a4, 2 * v17, 8u); if ( v18 ) { *(_QWORD *)a4 = v18; *(_QWORD *)(a4 + 8) = &v18[8 * v17]; *(_QWORD *)(a4 + 16) = &v18[16 * v17]; free_base(nullptr); v15 = *(_QWORD **)(a4 + 8); goto LABEL_18; } free_base(nullptr); } } else { *(_QWORD *)a4 = calloc_base(4u, 8u); free_base(nullptr); v15 = *(_QWORD **)a4; if ( *(_QWORD *)a4 ) { *(_QWORD *)(a4 + 8) = v15; *(_QWORD *)(a4 + 16) = v15 + 4; LABEL_18: *v15 = v14; *(_QWORD *)(a4 + 8) += 8LL; goto LABEL_16; } } free_base(v14); v6 = 12; LABEL_16: free_base(nullptr); return v6; }