解析 SCZ 字符串
直接就定义成:
typedef WCHAR *PSCZ;
就是说,PSCZ 就是保存了WCHAR *的首地址。
真正的 SCZ 字符串有两部分组成:第一部分是字符串的长度,第二部分是字符串本身,字符串以空结尾。
//----- (1008EBD7)-------------------------------------------------------- int __fastcall SczAlloc(int *a1,unsigned int a2) { v2 =a1; v3 =a2; if (!a1 ) CbsUtil_Assert((int)"base\\cbs\\util\\cbsstr.cpp", 21, (int)"pscz"); v4 =0; v8 =0; if (v3 > 0x3FFFFFFF) { v4 =-2147317563; CBSWdsLog(0x4000000, -2147317563, 1, "string sizetoo big"); return v4; } if (!*v2 ) goto LABEL_5; v4 =SczSize(*v2,&v8); if (v4 < 0) { CBSWdsLog(0x4000000, v4, 1, "Failed to get size of existing string"); return v4; } if (v8 < v3 ) { operator delete((void *)(*v2 - 4)); *v2= 0; LABEL_5: v5 =(unsigned int *)operatornew(2 * v3 +4); if (v5 ) { *v5= v3; v6 =v5 + 1; *v2= (int)v6; *v6= 0; } else { v4 =-2147024882; CBSWdsLog(0x4000000, -2147024882, 1, "Failed to allocate string"); } return v4; } if (v8 ) *(_WORD *)*v2 = 0; if (!*v2 ) goto LABEL_5; return v4; }
//----- (000000018001064C)---------------------------------------------------- __int64 __fastcall SczAlloc(__int64 *a1,unsigned __int64 a2) { v2 =a2; v3 =a1; if (!a1 ) CbsUtil_Assert((__int64)"base\\cbs\\util\\cbsstr.cpp", 21i64, (__int64)"pscz"); v11 =0i64; v4 =0; if (v2 > 0x3FFFFFFF) { v4 =-2147317563; v5 ="string sizetoo big"; LABEL_15: v7 =v4; goto LABEL_16; } if (!*v3 ) { LABEL_13: v8 =(unsigned __int64 *)operatornew(2 * v2 +8); if (v8 ) { *v8= v2; v9 =v8 + 1; *v3= (__int64)v9; *v9= 0; return (unsigned int)v4; } v4 =-2147024882; v5 ="Failed to allocate string"; goto LABEL_15; } v6 =SczSize(*v3,&v11); v4 =v6; if (v6 < 0) { v5 ="Failed to get size of existing string"; v7 =v6; LABEL_16: CBSWdsLog(0x4000000u,v7, (size_t *)1, v5); return (unsigned int)v4; } if (v2 > 0) { operator delete((void *)(*v3 - 8)); *v3= 0i64; goto LABEL_13; } if (v11 ) *(_WORD *)*v3 = 0; if (!*v3 ) goto LABEL_13; return (unsignedint)v4; }
//----- (1008C877)-------------------------------------------------------- int __fastcall SczSize(int a1, _DWORD *a2) { v2 =a1; v3 =a2; if (!a1 ) CbsUtil_Assert((int)"base\\cbs\\util\\cbsstr.cpp", 639, (int)"sz"); if (!v3 ) CbsUtil_Assert((int)"base\\cbs\\util\\cbsstr.cpp", 640, (int)"pcch"); *v3= *(_DWORD *)(v2 - 4); return 0; }
//----- (00000001800117C8)---------------------------------------------------- __int64 __fastcall SczSize(__int64 a1, _QWORD *a2) { v2 =a2; v3 =a1; if (!a1 ) CbsUtil_Assert((__int64)"base\\cbs\\util\\cbsstr.cpp", 639i64, (__int64)"sz"); if (!v2 ) CbsUtil_Assert((__int64)"base\\cbs\\util\\cbsstr.cpp", 640i64, (__int64)"pcch"); *v2= *(_QWORD *)(v3 - 8); return 0i64; }