解析 SCZ 字符串

    xiaoxiao2021-03-25  127

    解析 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; }

     

    转载请注明原文地址: https://ju.6miu.com/read-7086.html

    最新回复(0)