//----- (00405522) -------------------------------------------------------- struct _Unwind_Exception *__usercall WXML::Compiler::ParseSource@( WXML::DOMLib::Parser *a1@, int *a2, // 文件名 char **a3, char a4, // '\n' int a5, // gwxMark int *a6, // "f_" _DWORD *a7, // fileData int *a8, // 错误信息 _DWORD *a9, // map _DWORD *a10,// ??? _DWORD *a11,// ??? int a12, // bool char a13) // bool { char *v13; // eax std::ostream::sentry *v14; // eax std::ostream::sentry *v15; // eax std::ostream::sentry *v16; // eax std::ostream::sentry *v17; // eax std::ostream::sentry *v18; // eax std::ostream::sentry *v19; // eax std::ostream::sentry *v20; // eax std::ostream::sentry *v21; // eax std::ostream::sentry *v22; // eax std::ostream::sentry *v23; // eax std::ostream::sentry *v24; // eax std::ostream::sentry *v25; // eax std::ostream::sentry *v26; // eax std::ostream::sentry *v27; // eax std::ostream::sentry *v28; // eax std::ostream::sentry *v29; // eax std::ostream::sentry *v30; // eax std::ostream::sentry *v31; // eax void **v32; // ecx _DWORD *v33; // eax _DWORD *v34; // eax _DWORD *v35; // eax _DWORD *v36; // eax std::ostream::sentry *v37; // eax std::ostream::sentry *v38; // eax std::ostream::sentry *v39; // eax char *v40; // eax std::ostream::sentry *v41; // eax std::ostream::sentry *v42; // eax std::ostream::sentry *v43; // eax std::ostream::sentry *v44; // eax std::ostream::sentry *v45; // eax std::ostream::sentry *v46; // eax char *v47; // eax WXML::DOMLib::Parser *v49; // [esp+0h] [ebp-478h] unsigned int i; // [esp+2Ch] [ebp-44Ch] std::ostream::sentry *v51; // [esp+30h] [ebp-448h] bool v52; // [esp+30h] [ebp-448h] std::ostream::sentry *v53; // [esp+30h] [ebp-448h] std::ostream::sentry *v54; // [esp+30h] [ebp-448h] int v55; // [esp+34h] [ebp-444h] std::ostream::sentry *v56; // [esp+34h] [ebp-444h] std::ostream::sentry *v57; // [esp+34h] [ebp-444h] std::ostream::sentry *v58; // [esp+34h] [ebp-444h] std::ostream::sentry *v59; // [esp+34h] [ebp-444h] std::ostream::sentry *v60; // [esp+34h] [ebp-444h] std::ostream::sentry *v61; // [esp+34h] [ebp-444h] std::ostream::sentry *v62; // [esp+34h] [ebp-444h] bool lpuexcpta; // [esp+38h] [ebp-440h] struct _Unwind_Exception *lpuexcpt; // [esp+38h] [ebp-440h] int v65; // [esp+70h] [ebp-408h] BYREF int **v66; // [esp+74h] [ebp-404h] BYREF int **v67; // [esp+78h] [ebp-400h] int v68; // [esp+7Ch] [ebp-3FCh] char *v69; // [esp+80h] [ebp-3F8h] BYREF int v70; // [esp+84h] [ebp-3F4h] char v71; // [esp+88h] [ebp-3F0h] BYREF int v72[2]; // [esp+98h] [ebp-3E0h] BYREF char v73; // [esp+A0h] [ebp-3D8h] BYREF void *v74[2]; // [esp+B0h] [ebp-3C8h] BYREF char v75; // [esp+B8h] [ebp-3C0h] BYREF int v76; // [esp+C8h] [ebp-3B0h] BYREF int v77; // [esp+CCh] [ebp-3ACh] char v78; // [esp+D0h] [ebp-3A8h] BYREF void *v79[2]; // [esp+E0h] [ebp-398h] BYREF char v80; // [esp+E8h] [ebp-390h] BYREF int v81[2]; // [esp+F8h] [ebp-380h] BYREF char v82; // [esp+100h] [ebp-378h] BYREF void *v83[6]; // [esp+110h] [ebp-368h] BYREF int v84[2]; // [esp+128h] [ebp-350h] BYREF char v85; // [esp+130h] [ebp-348h] BYREF int v86[6]; // [esp+140h] [ebp-338h] BYREF int v87[6]; // [esp+158h] [ebp-320h] BYREF int v88[2]; // [esp+170h] [ebp-308h] BYREF char v89[4]; // [esp+178h] [ebp-300h] BYREF char v90[196]; // [esp+17Ch] [ebp-2FCh] BYREF int v91; // [esp+240h] [ebp-238h] BYREF volatile signed __int32 *v92; // [esp+244h] [ebp-234h] BYREF char v93[4]; // [esp+248h] [ebp-230h] BYREF char v94[196]; // [esp+24Ch] [ebp-22Ch] BYREF int v95[2]; // [esp+310h] [ebp-168h] BYREF char v96[4]; // [esp+318h] [ebp-160h] BYREF char v97[348]; // [esp+31Ch] [ebp-15Ch] BYREF // copy from param WXML::DOMLib::Parser *a1@, int *a2, // 文件名 char **a3, char a4, // '\n' int a5, // gwxMark int *a6, // "f_" _DWORD *a7, // fileData int *a8, // 错误信息 _DWORD *a9, // map _DWORD *a10,// ??? _DWORD *a11,// ??? int a12, // bool char a13; // bool // copy from param // 判断文件拓展名是否为 wxml std::string::substr(v95, a2, a2[1] - 5, 0xFFFFFFFF); lpuexcpta = std::operator==((int)v95, ".wxml"); std::string::_M_dispose((void **)v95); if ( lpuexcpta ) { // wxml文件 v66 = 0; v67 = 0; v68 = 0; WXML::DOMLib::Parser::Parser(v49); lpuexcpt = (struct _Unwind_Exception *)WXML::DOMLib::Parser::Parse( (int)v95, // 存放结果? a1, // 源码? *a3, // ? (int)a8,// 错误信息 (int)a2, // 文件名 &v66 ); // Parse返回值0,正常 if ( !lpuexcpt ) { WXML::DOMLib::Parser::GetParsed(&v91, (WXML::DOMLib::Parser *)v95); // v91 = v95.GetParsed() // a2 文件名? v13 = std::map>::operator[](a9, (int)a2); // a9[a2] a9[fileName] *(_DWORD *)v13 = v91; // a9[a2] a9[fileName] = v91 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)v13 + 1, v92); std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v92); v70 = 0; v69 = &v71; v71 = 0; v72[0] = (int)&v73; v72[1] = 0; v73 = 0; std::basic_stringstream,std::allocator>::basic_stringstream((int)v88); if ( v66 != v67 ) { v51 = std::operator<<>((std::ostream::sentry *)v89, "f_['"); WXML::Rewrite::ToStringCode((int)&v91, a2); v14 = std::operator<<(v51, &v91); v15 = std::operator<<>(v14, "']={};"); std::operator<<>(v15, a4); std::string::_M_dispose((void **)&v91); } for ( i = 0; -1227133513 * (((char *)v67 - (char *)v66) >> 4) > i; ++i ) { v74[1] = 0; v79[0] = &v80; v81[0] = (int)&v82; v74[0] = &v75; v76 = (int)&v78; v75 = 0; v77 = 0; v78 = 0; v79[1] = 0; v80 = 0; v81[1] = 0; v82 = 0; v55 = WXML::Compiler::DealWxsTag((int)a2, &v66[28 * i], v74, (int)&v76, (int)v79, &v65, a8); if ( v55 ) goto LABEL_20; // // copy from param // WXML::DOMLib::Parser *a1@, // int *a2, // 文件名 // char **a3, // char a4, // '\n' // int a5, // gwxMark // int *a6, // "f_" // _DWORD *a7, // fileData // int *a8, // 错误信息 // _DWORD *a9, // map // _DWORD *a10,// ??? // _DWORD *a11,// ??? // int a12, // bool // char a13; // bool // // copy from param v16 = std::operator<<((std::ostream::sentry *)v89, a6); v56 = std::operator<<>(v16, "['"); WXML::Rewrite::ToStringCode((int)v87, a2); v17 = std::operator<<(v56, v87); v57 = std::operator<<>(v17, "']['"); WXML::Rewrite::ToStringCode((int)&v91, (int *)v74); v18 = std::operator<<(v57, &v91); std::operator<<>(v18, "'] ="); std::string::_M_dispose((void **)&v91); std::string::_M_dispose((void **)v87); if ( v77 ) { MMBizWxaAppComm::PathCombine(a2, &v76, (unsigned int *)v81); if ( *(_BYTE *)v81[0] == '/' /*47*/ ) { std::operator+((int)v86, '.'/*46*/, (int)v81); std::string::operator=((unsigned __int8 **)v81, (int)v86); std::string::_M_dispose((void **)v86); } if ( a7 + 1 == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( a7, (int)v81) && (std::operator==(a5, "$gwx") || a13) ) { std::basic_stringstream,std::allocator>::basic_stringstream((int)&v91); v19 = std::operator<<((std::ostream::sentry *)v93, a2); std::operator<<>(v19, ":"); v20 = (std::ostream::sentry *)std::ostream::operator<<(v65); std::operator<<>(v20, ":"); v21 = (std::ostream::sentry *)std::ostream::operator<<(v66[28 * i + 3]); v22 = std::operator<<>(v21, ":"); v23 = std::operator<<(v22, &v76); v24 = std::operator<<>(v23, " not found from "); // a2 fileName std::operator<<(v24, a2); std::stringbuf::str((int)v87, (int)v94); // v87.str(v94) // a8 errorMessage std::string::operator=((unsigned __int8 **)a8, (int)v87); std::string::_M_dispose((void **)v87); std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v91); v55 = 1; LABEL_20: std::string::_M_dispose((void **)v81); std::string::_M_dispose(v79); std::string::_M_dispose((void **)&v76); std::string::_M_dispose(v74); std::basic_stringstream,std::allocator>::~basic_stringstream((int)v88); std::string::_M_dispose((void **)v72); std::string::_M_dispose((void **)&v69); lpuexcpt = (struct _Unwind_Exception *)v55; goto LABEL_24; } v58 = std::operator<<>((std::ostream::sentry *)v89, "f_['"); WXML::Rewrite::ToStringCode((int)&v91, v81); v25 = std::operator<<(v58, &v91); std::operator<<>(v25, "'] || "); std::string::_M_dispose((void **)&v91); v59 = std::operator<<>((std::ostream::sentry *)v89, "nv_require(\""); std::operator+((int)v87, "p_", (int)v81); WXML::Rewrite::ToStringCode((int)&v91, v87); v26 = std::operator<<(v59, &v91); v27 = std::operator<<>(v26, "\");"); // lineEnd '\n' std::operator<<>(v27, a4); std::string::_M_dispose((void **)&v91); std::string::_M_dispose((void **)v87); v28 = std::operator<<((std::ostream::sentry *)v89, a6); v60 = std::operator<<>(v28, "['"); WXML::Rewrite::ToStringCode((int)v87, a2); v29 = std::operator<<(v60, v87); v61 = std::operator<<>(v29, "']['"); WXML::Rewrite::ToStringCode((int)&v91, (int *)v74); v30 = std::operator<<(v61, &v91); v31 = std::operator<<>(v30, "']();"); std::operator<<>(v31, a4); std::string::_M_dispose((void **)&v91); v32 = (void **)v87; } else { // // copy from param // WXML::DOMLib::Parser *a1@, // int *a2, // 文件名 // char **a3, // char a4, // '\n' // int a5, // gwxMark // int *a6, // "f_" // _DWORD *a7, // fileData // int *a8, // 错误信息 // _DWORD *a9, // map // _DWORD *a10,// ??? // _DWORD *a11,// ??? // int a12, // bool // char a13; // bool // // copy from param std::operator+((int)v86, "m_", (int)a2); v33 = std::string::append(v86, ":"); std::string::basic_string(v87, v33); v34 = std::string::append(v87, (int)v74); std::string::basic_string(&v91, v34); WXML::Compiler::GetFuncId(v83, a11, (int)&v91); std::string::_M_dispose((void **)&v91); std::string::_M_dispose((void **)v87); std::string::_M_dispose((void **)v86); v55 = night::compile_ns((int)a2, (int)v83, (int)v79, v65, (unsigned int *)v72, 0); if ( v55 ) { std::string::_M_assign((int)a8, (int)v72); std::string::_M_dispose(v83); goto LABEL_20; } v62 = std::operator<<>((std::ostream::sentry *)v89, "nv_require(\""); std::operator+((int)v84, "m_", (int)a2); v35 = std::string::append(v84, ":"); std::string::basic_string(v86, v35); v36 = std::string::append(v86, (int)v74); std::string::basic_string(v87, v36); WXML::Rewrite::ToStringCode((int)&v91, v87); v37 = std::operator<<(v62, &v91); v38 = std::operator<<>(v37, "\");"); std::operator<<>(v38, a4); std::string::_M_dispose((void **)&v91); std::string::_M_dispose((void **)v87); std::string::_M_dispose((void **)v86); std::string::_M_dispose((void **)v84); v39 = std::operator<<((std::ostream::sentry *)v89, v72); std::operator<<>(v39, a4); v32 = v83; } std::string::_M_dispose(v32); std::string::_M_dispose((void **)v81); std::string::_M_dispose(v79); std::string::_M_dispose((void **)&v76); std::string::_M_dispose(v74); } std::stringbuf::str((int)&v91, (int)v90); // v90 = v91.str() std::string::operator=((unsigned __int8 **)&v69, (int)&v91); std::string::_M_dispose((void **)&v91); std::basic_stringstream,std::allocator>::~basic_stringstream((int)v88); std::string::_M_dispose((void **)v72); if ( v70 ) { v40 = std::map::operator[](a10, (int)a2); std::string::_M_assign((int)v40, (int)&v69); } std::string::_M_dispose((void **)&v69); } LABEL_24: WXML::DOMLib::Parser::~Parser((int)v95); std::vector::~vector((void **)&v66); } else { std::string::substr(v95, a2, a2[1] - 4, 0xFFFFFFFF); v52 = std::operator==((int)v95, ".wxs"); std::string::_M_dispose((void **)v95); lpuexcpt = 0; if ( v52 ) { // // copy from param // WXML::DOMLib::Parser *a1@, // int *a2, // 文件名 // char **a3, // char a4, // '\n' // int a5, // gwxMark // int *a6, // "f_" // _DWORD *a7, // fileData // int *a8, // 错误信息 // _DWORD *a9, // map // _DWORD *a10,// ??? // _DWORD *a11,// ??? // int a12, // bool // char a13; // bool // // copy from param v84[0] = (int)&v85; v84[1] = 0; v85 = 0; std::operator+((int)v95, "p_", (int)a2); WXML::Compiler::GetFuncId((void **)v86, a11, (int)v95); std::string::_M_dispose((void **)v95); lpuexcpt = (struct _Unwind_Exception *)night::compile_ns((int)a2, (int)v86, (int)a3, 1, (unsigned int *)v84, 0); if ( lpuexcpt ) { std::string::_M_assign((int)a8, (int)v84); } else { std::basic_stringstream,std::allocator>::basic_stringstream((int)v95); v53 = std::operator<<>((std::ostream::sentry *)v96, "f_['"); WXML::Rewrite::ToStringCode((int)v87, a2); v41 = std::operator<<(v53, v87); v42 = std::operator<<>(v41, "'] = nv_require("); v54 = std::operator<<>(v42, '"'/*34*/); std::operator+((int)v88, "p_", (int)a2); WXML::Rewrite::ToStringCode((int)&v91, v88); v43 = std::operator<<(v54, &v91); v44 = std::operator<<>(v43, '"'/*34*/); v45 = std::operator<<>(v44, ");"); std::operator<<>(v45, a4); std::string::_M_dispose((void **)&v91); std::string::_M_dispose((void **)v88); std::string::_M_dispose((void **)v87); // v84 compile_ns结果? v46 = std::operator<<((std::ostream::sentry *)v96, v84); std::operator<<>(v46, a4); std::stringbuf::str((int)&v91, (int)v97); v47 = std::map::operator[](a10, (int)a2); std::string::operator=((unsigned __int8 **)v47, (int)&v91); std::string::_M_dispose((void **)&v91); std::basic_stringstream,std::allocator>::~basic_stringstream((int)v95); } std::string::_M_dispose((void **)v86); std::string::_M_dispose((void **)v84); } } return lpuexcpt; } // 40561E: variable 'v49' is possibly undefined