diff --git a/src/include/wxss.h b/src/include/wxss.h index 071c1cc..5369493 100644 --- a/src/include/wxss.h +++ b/src/include/wxss.h @@ -134,7 +134,8 @@ namespace WXSS std::vector> offset_120; bool offset_132; // 类型未确定,不是布尔值 std::shared_ptr offset_140; - std::string offset_148; + std::shared_ptr offset_148; + std::shared_ptr offset_156; int offset_164; int offset_168; int offset_172; // 类型未确定 diff --git a/src/wxss/css_tree_lib/css_syntax_tree.cpp b/src/wxss/css_tree_lib/css_syntax_tree.cpp index e772850..0d12a6c 100644 --- a/src/wxss/css_tree_lib/css_syntax_tree.cpp +++ b/src/wxss/css_tree_lib/css_syntax_tree.cpp @@ -94,7 +94,8 @@ namespace WXSS auto cur = this->offset_120[i]; if (cur->offset_0 == "SELECTORS") { - std::string v14 = this->offset_148.substr(2, this->offset_148.length() - 7); + auto v148 = this->offset_148.get(); + std::string v14 = v148[0].substr(2, v148[0].length() - 7); std::string v15 = WXML::Rewrite::ToStringCode2(v14); v15.insert(0, "[is=\""); v15.append("\"]"); @@ -120,7 +121,8 @@ namespace WXSS else { cur->RenderCode(a2, true); - std::string v14 = this->offset_148.substr(2, this->offset_148.length() - 7); + auto v148 = this->offset_148.get(); + std::string v14 = v148[0].substr(2, v148[0].length() - 7); auto v15 = WXML::Rewrite::ToStringCode2(v14); v15.insert(0, "[is=\""); v15.append("\"]"); diff --git a/src/wxss/css_tree_lib/parser.cpp b/src/wxss/css_tree_lib/parser.cpp index 6ce0ac4..766640c 100644 --- a/src/wxss/css_tree_lib/parser.cpp +++ b/src/wxss/css_tree_lib/parser.cpp @@ -48,6 +48,7 @@ namespace WXSS // Parse - 10 std::shared_ptr v102(new WXSS::CSSTreeLib::Base()); + v102->offset_0 = off_519B58; v102->offset_4_str = "$"; v102->offset_28 = 1; this->offset_8.push_back(v102); @@ -59,7 +60,9 @@ namespace WXSS this->offset_8.push_back(v104); // Parse - 15 - // 一堆东西 + std::shared_ptr v9(new std::string[3]()); + std::shared_ptr v14(new WXSS::Token()); + v14->offset_4.reset(new std::string()); // Parse - 20 int v75 = 0; @@ -165,7 +168,11 @@ namespace WXSS if (str[0] != '$' || str[1]) { std::shared_ptr v82(new WXSS::CSSTreeLib::CSSSyntaxTree()); - + v82->offset_24 = cur; + v82->offset_148 = v9; + v82->offset_156 = v14; + v82->offset_164 = cur.offset_12; + v82->offset_168 = cur.offset_16 + cur.offset_12; this->offset_48.push_back(v82); } } @@ -197,10 +204,10 @@ namespace WXSS } else { - int stra = 1; + int stra = v116->offset_32; std::shared_ptr lh(new WXSS::CSSTreeLib::CSSSyntaxTree()); std::shared_ptr v123(new WXSS::CSSTreeLib::CSSSyntaxTree()); - // v123->offset_0.assign(v84->offset_4); + v123->offset_0.assign(v116->offset_4_str); for (int j = 0; j < stra; j++) { if (this->offset_48.begin() == this->offset_48.end()) @@ -209,15 +216,19 @@ namespace WXSS return 1003; } auto v47 = this->offset_48.back(); - // lb->offset_120.push_back(v47); + v123->offset_120.push_back(v47); this->offset_48.pop_back(); } if (stra > 0) { - + auto v48 = v123->offset_120; + auto v49 = v48[stra - 1]; + v123->offset_164 = v49->offset_164; + v123->offset_168 = v49->offset_168; + v123->offset_148 = v9; + v123->offset_156 = v14; } - int v76 = 1; - if (!v76) + if (!v116->offset_28) { if (v123->offset_120.begin() != v123->offset_120.end()) { diff --git a/test/wcsc.disassembly.cpp b/test/wcsc.disassembly.cpp index 7e9936c..bc0c956 100644 --- a/test/wcsc.disassembly.cpp +++ b/test/wcsc.disassembly.cpp @@ -11262,7 +11262,7 @@ int __thiscall WXSS::CSSTreeLib::Parser::Parse(int this, char **a2, int *a3, uns std::deque>::push_back(this + 8, (int *)&v104); // Parse - 15 - v9 = operator new(0x48u); // 0x48 -> 72 = 24 * 3 + v9 = operator new(0x48u); // 0x48 -> 72 = 24 * 3 std::string[3] v106 = 0; memset(v9, 0, 0x48u); v107 = 0; @@ -11293,7 +11293,7 @@ int __thiscall WXSS::CSSTreeLib::Parser::Parse(int this, char **a2, int *a3, uns // v10->offset_12 *((_DWORD *)v10 + 3) = v9; - v106 = v11; + v106 = v11; // = v112 = v9 = std::string[3] v13 = v107; v112 = (_DWORD *)v12; v107 = v10; @@ -11366,7 +11366,10 @@ int __thiscall WXSS::CSSTreeLib::Parser::Parse(int this, char **a2, int *a3, uns v111 = v19; std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v117); v23 = v108; + + // v108 - v14, v110 - v79 *(_DWORD *)(v108 + 4) = v110; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(v23 + 8), v111); std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v111); v116 = 0; @@ -11481,23 +11484,37 @@ int __thiscall WXSS::CSSTreeLib::Parser::Parse(int this, char **a2, int *a3, uns v83 = v135; v28 = v135; v29 = (volatile signed __int32 **)(v135 + 8); + // lpuexcpta -> cur + // v135->offset_24 v135[6] = *(_DWORD *)lpuexcpta; v28[7] = *((_DWORD *)lpuexcpta + 1); std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v29, *((volatile signed __int32 **)lpuexcpta + 2)); v83[9] = *((_DWORD *)lpuexcpta + 3); + // v83->offset_36 = cur->offset_12 v83[10] = *((_DWORD *)lpuexcpta + 4); v83[11] = *((_DWORD *)lpuexcpta + 5); v83[12] = *((_DWORD *)lpuexcpta + 6); - for ( i = 0; i != '@'/*64*/; ++i ) + // v83->offset_48 + for ( i = 0; i != 64; ++i ) // Token里面的 *((_BYTE *)v83 + i + 52) = *((_BYTE *)lpuexcpta + i + 28); std::string::operator=((unsigned int **)v83, Str); v31 = *((_DWORD *)lpuexcpta + 3); v83[41] = v31; + // v83->offset_164 + v83[42] = *((_DWORD *)lpuexcpta + 4) + v31; - v83[37] = v106; + // v83->offset_168 + + v83[37] = v106; // v9 + // v83->offset_148 + + // v83->offset_152 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)v83 + 38, v107); v20 = v83; - v83[39] = v108; + v83[39] = v108; // v14 + // v83->offset_156 + + // v83->offset_160 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)v83 + 40, v109); std::deque>::push_back(this + 48, (int *)&v135); v32 = &v136; @@ -11578,10 +11595,10 @@ int __thiscall WXSS::CSSTreeLib::Parser::Parse(int this, char **a2, int *a3, uns // v123->offset_168 *((_DWORD *)lpuexcptb + 42) = *(_DWORD *)(v50 + 168); // v123->offset_148 - *((_DWORD *)lpuexcptb + 37) = v106; + *((_DWORD *)lpuexcptb + 37) = v106; // v9 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)lpuexcptb + 38, v107); // v123->offset_156 - *((_DWORD *)lpuexcptb + 39) = v108; + *((_DWORD *)lpuexcptb + 39) = v108; // v14 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)lpuexcptb + 40, v109); } if ( !v76 )