\hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t} { } \doxysection { theo\+ ::decomp\+ ::decomp\+ \_ \+ t Class Reference}
\label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t} \index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
the main decomposition class which is responsible for breaking down lib file into coff files, and extracted used symbols from the coff files.
{ \ttfamily \# include \char `\" { } decomp.\+ hpp\char `\" { } }
\doxysubsection * { Public Member Functions}
\begin { DoxyCompactItemize}
\item
\mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a35cfac16bd918d576b29e04388690d68} { decomp\+ \_ \+ t} } (std\+ ::vector$ < $ std\+ ::uint8\+ \_ \+ t $ > $ \& \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } , \mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t} { recomp\+ ::symbol\+ \_ \+ table\+ \_ \+ t} } $ \ast $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a8630f2ee0f4fb9516f5b20014e4c6120} { syms} } )
\begin { DoxyCompactList} \small \item \em the explicit constructor for \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t} { decomp\+ \_ \+ t} } \end { DoxyCompactList} \item
std\+ ::vector$ < $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1routine_ _ t} { routine\+ \_ \+ t} } $ > $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a79c965ec0a996a936faae7f54b0e055e} { rtns} } ()
\begin { DoxyCompactList} \small \item \em gets all of the routine objects. \end { DoxyCompactList} \item
std\+ ::vector$ < $ std\+ ::uint8\+ \_ \+ t $ > $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } ()
\begin { DoxyCompactList} \small \item \em gets a vector of bytes consisting of the lib file. \end { DoxyCompactList} \item
std\+ ::vector$ < $ std\+ ::vector$ < $ std\+ ::uint8\+ \_ \+ t $ > $ $ > $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a81ae70b313a9ef24ea5d8f404699baef} { objs} } ()
\begin { DoxyCompactList} \small \item \em gets all the obj files as a vector of a vector of bytes. \end { DoxyCompactList} \item
\mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t} { recomp\+ ::symbol\+ \_ \+ table\+ \_ \+ t} } $ \ast $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a8630f2ee0f4fb9516f5b20014e4c6120} { syms} } ()
\begin { DoxyCompactList} \small \item \em gets the symbol table. \end { DoxyCompactList} \item
std\+ ::map$ < $ coff\+ ::section\+ \_ \+ header\+ \_ \+ t $ \ast $ , std\+ ::size\+ \_ \+ t $ > $ \& \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a860dddc3a5d12231b685dbaa12a0db06} { scn\+ \_ \+ hash\+ \_ \+ tbl} } ()
\begin { DoxyCompactList} \small \item \em gets the section hash table section header -\/ -\/ \texorpdfstring { $ > $ } { >} hash of the section header ptr. \end { DoxyCompactList} \item
std\+ ::optional$ < $ \mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t} { recomp\+ ::symbol\+ \_ \+ table\+ \_ \+ t} } $ \ast $ $ > $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ ae23353a4293aa30969b6d3fa37359469} { decompose} } (std\+ ::string \& entry\+ \_ \+ sym)
\begin { DoxyCompactList} \small \item \em decomposes (extracts) the symbols used. this function determines all used symbols given the entry point. \end { DoxyCompactList} \end { DoxyCompactItemize}
\doxysubsection { Detailed Description}
the main decomposition class which is responsible for breaking down lib file into coff files, and extracted used symbols from the coff files.
Definition at line \mbox { \hyperlink { decomp_ 8hpp_ source_ l00061} { 61} } of file \mbox { \hyperlink { decomp_ 8hpp_ source} { decomp.\+ hpp} } .
\doxysubsection { Constructor \& Destructor Documentation}
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a35cfac16bd918d576b29e04388690d68} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a35cfac16bd918d576b29e04388690d68} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !decomp\_ t@{ decomp\_ t} }
\index { decomp\_ t@{ decomp\_ t} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { decomp\_ t()} { decomp\_ t()} }
{ \footnotesize \ttfamily theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::decomp\+ \_ \+ t (\begin { DoxyParamCaption} \item [{std\+::vector$<$ std\+::uint8\+\_\+t $>$ \&}] { lib, } \item [{\mbox{\hyperlink{classtheo_1_1recomp_1_1symbol__table__t}{recomp\+::symbol\+\_\+table\+\_\+t}} $\ast$}] { syms } \end { DoxyParamCaption} )\hspace { 0.3cm} { \ttfamily [explicit]} }
the explicit constructor for \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t} { decomp\+ \_ \+ t} }
\begin { DoxyParams} { Parameters}
{ \em lib} & vector of bytes containing the lib file.\\
\hline
{ \em syms} & symbol table that gets populated and managed by this class.\\
\hline
\end { DoxyParams}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00034} { 34} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00035 : m\_ lib(\mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } ), m\_ syms(\mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a8630f2ee0f4fb9516f5b20014e4c6120} { syms} } ) \{ \} }
\end { DoxyCode}
\doxysubsection { Member Function Documentation}
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ ae23353a4293aa30969b6d3fa37359469} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ ae23353a4293aa30969b6d3fa37359469} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !decompose@{ decompose} }
\index { decompose@{ decompose} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { decompose()} { decompose()} }
{ \footnotesize \ttfamily std\+ ::optional$ < $ \mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t} { recomp\+ ::symbol\+ \_ \+ table\+ \_ \+ t} } $ \ast $ $ > $ theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::decompose (\begin { DoxyParamCaption} \item [{std\+::string \&}] { entry\+ \_ \+ sym } \end { DoxyParamCaption} )}
decomposes (extracts) the symbols used. this function determines all used symbols given the entry point.
\begin { DoxyParams} { Parameters}
{ \em entry\+ \_ \+ sym} & the entry point symbol name.\\
\hline
\end { DoxyParams}
\begin { DoxyReturn} { Returns}
returns an optional pointer to the symbol table. no value in the optional object on failure.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00037} { 37} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00038 \{ }
\DoxyCodeLine { 00039 \textcolor { comment} { // extract obj files from the archive file...} }
\DoxyCodeLine { 00040 \textcolor { comment} { //} }
\DoxyCodeLine { 00041 ar::view<false> \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } (m\_ lib.data(), m\_ lib.size());}
\DoxyCodeLine { 00042 std::for\_ each(}
\DoxyCodeLine { 00043 \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } .begin(), \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} { lib} } .end(),}
\DoxyCodeLine { 00044 [\& ](std::pair<std::string\_ view, ar::entry\_ t\& > itr) \{ }
\DoxyCodeLine { 00045 \textcolor { comment} { // if the entry isnt the symbol table or the string table} }
\DoxyCodeLine { 00046 \textcolor { comment} { // then we know its an obj file...} }
\DoxyCodeLine { 00047 \textcolor { comment} { //} }
\DoxyCodeLine { 00048 if (!itr.second.is\_ symbol\_ table() \& \& !itr.second.is\_ string\_ table()) \{ }
\DoxyCodeLine { 00049 spdlog::info(\textcolor { stringliteral} { "{ } extracted obj from archive: \{ \} "{ } } , itr.first);}
\DoxyCodeLine { 00050 std::vector<std::uint8\_ t> data(itr.second.begin(), itr.second.end());}
\DoxyCodeLine { 00051 m\_ objs.push\_ back(data);}
\DoxyCodeLine { 00052 \} }
\DoxyCodeLine { 00053 \} );}
\DoxyCodeLine { 00054 }
\DoxyCodeLine { 00055 std::for\_ each(}
\DoxyCodeLine { 00056 m\_ objs.begin(), m\_ objs.end(), [\& ](std::vector<std::uint8\_ t>\& img\_ data) \{ }
\DoxyCodeLine { 00057 auto img = reinterpret\_ cast<coff::image\_ t*>(img\_ data.data());}
\DoxyCodeLine { 00058 for (auto idx = 0u; idx < img-\/ >file\_ header.num\_ symbols; ++idx) \{ }
\DoxyCodeLine { 00059 auto sym = img-\/ >get\_ symbol(idx);}
\DoxyCodeLine { 00060 if (sym-\/ >section\_ index -\/ 1 > img-\/ >file\_ header.num\_ sections)}
\DoxyCodeLine { 00061 continue;}
\DoxyCodeLine { 00062 }
\DoxyCodeLine { 00063 auto sym\_ name = symbol\_ t::name(img, sym);}
\DoxyCodeLine { 00064 if (sym\_ name.length()) \{ }
\DoxyCodeLine { 00065 auto sym\_ hash = symbol\_ t::hash(sym\_ name.data());}
\DoxyCodeLine { 00066 auto sym\_ size =}
\DoxyCodeLine { 00067 sym-\/ >has\_ section()}
\DoxyCodeLine { 00068 ? next\_ sym(img, img-\/ >get\_ section(sym-\/ >section\_ index -\/ 1),}
\DoxyCodeLine { 00069 sym)}
\DoxyCodeLine { 00070 : 0u;}
\DoxyCodeLine { 00071 }
\DoxyCodeLine { 00072 m\_ lookup\_ tbl[sym\_ hash].emplace\_ back(img, sym, sym\_ size);}
\DoxyCodeLine { 00073 \} }
\DoxyCodeLine { 00074 \} }
\DoxyCodeLine { 00075 \} );}
\DoxyCodeLine { 00076 }
\DoxyCodeLine { 00077 \textcolor { comment} { // extract used symbols from objs and create a nice little set of them so that} }
\DoxyCodeLine { 00078 \textcolor { comment} { // we can easily decompose them... no need deal with every single symbol...} }
\DoxyCodeLine { 00079 spdlog::info(\textcolor { stringliteral} { "{ } extracted \{ \} symbols being used..."{ } } ,}
\DoxyCodeLine { 00080 ext\_ used\_ syms(entry\_ sym.data()));}
\DoxyCodeLine { 00081 }
\DoxyCodeLine { 00082 \textcolor { comment} { // generate symbols, populate section hash table, for each object file} }
\DoxyCodeLine { 00083 \textcolor { comment} { // extracted from the archive file...} }
\DoxyCodeLine { 00084 \textcolor { comment} { //} }
\DoxyCodeLine { 00085 std::for\_ each(m\_ used\_ syms.begin(), m\_ used\_ syms.end(), [\& ](\mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ abbf09e1f7eb9e42057ff9c9e8be41266} { sym\_ data\_ t} } \mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ af96177687d0ad683c5897d8fa01135f9acdb885c0ea7f6b2874224487c69b8112} { data} } ) \{ }
\DoxyCodeLine { 00086 auto [img, sym, size] = data;}
\DoxyCodeLine { 00087 }
\DoxyCodeLine { 00088 \textcolor { comment} { // populate section hash table with sections for the img of this} }
\DoxyCodeLine { 00089 \textcolor { comment} { // symbol... only populate the hash table if its not been populated for} }
\DoxyCodeLine { 00090 \textcolor { comment} { // this obj before...} }
\DoxyCodeLine { 00091 \textcolor { comment} { //} }
\DoxyCodeLine { 00092 if (m\_ processed\_ objs.emplace(img).second) \{ }
\DoxyCodeLine { 00093 for (auto idx = 0u; idx < img-\/ >file\_ header.num\_ sections; ++idx) \{ }
\DoxyCodeLine { 00094 auto scn = img-\/ >get\_ section(idx);}
\DoxyCodeLine { 00095 auto scn\_ sym\_ name =}
\DoxyCodeLine { 00096 std::string(scn-\/ >name.to\_ string(img-\/ >get\_ strings()))}
\DoxyCodeLine { 00097 .append(\textcolor { stringliteral} { "{ } \# "{ } } )}
\DoxyCodeLine { 00098 .append(std::to\_ string(idx))}
\DoxyCodeLine { 00099 .append(\textcolor { stringliteral} { "{ } !"{ } } )}
\DoxyCodeLine { 00100 .append(std::to\_ string(img-\/ >file\_ header.timedate\_ stamp));}
\DoxyCodeLine { 00101 }
\DoxyCodeLine { 00102 \textcolor { comment} { // hash the name of the section + the index + the timestamp of the} }
\DoxyCodeLine { 00103 \textcolor { comment} { // obj file it is in...} }
\DoxyCodeLine { 00104 \textcolor { comment} { //} }
\DoxyCodeLine { 00105 m\_ scn\_ hash\_ tbl.insert(\{ scn, decomp::symbol\_ t::hash(scn\_ sym\_ name)\} );}
\DoxyCodeLine { 00106 \} }
\DoxyCodeLine { 00107 \} }
\DoxyCodeLine { 00108 }
\DoxyCodeLine { 00109 \textcolor { comment} { // if the symbol is a function then we are going to decompose it...} }
\DoxyCodeLine { 00110 \textcolor { comment} { // data symbols are handled after this...} }
\DoxyCodeLine { 00111 \textcolor { comment} { //} }
\DoxyCodeLine { 00112 if (sym-\/ >has\_ section()) \{ }
\DoxyCodeLine { 00113 if (sym-\/ >derived\_ type == coff::derived\_ type\_ id::function) \{ }
\DoxyCodeLine { 00114 auto scn = img-\/ >get\_ section(sym-\/ >section\_ index -\/ 1);}
\DoxyCodeLine { 00115 auto dcmp\_ type =}
\DoxyCodeLine { 00116 scn-\/ >name.to\_ string(img-\/ >get\_ strings()) == INSTR\_ SPLIT\_ SECTION\_ NAME}
\DoxyCodeLine { 00117 ? decomp::sym\_ type\_ t::instruction}
\DoxyCodeLine { 00118 : decomp::sym\_ type\_ t::function;}
\DoxyCodeLine { 00119 }
\DoxyCodeLine { 00120 auto fn\_ size = next\_ sym(img, scn, sym);}
\DoxyCodeLine { 00121 auto fn\_ bgn = scn-\/ >ptr\_ raw\_ data + reinterpret\_ cast<std::uint8\_ t*>(img) +}
\DoxyCodeLine { 00122 sym-\/ >value;}
\DoxyCodeLine { 00123 }
\DoxyCodeLine { 00124 std::vector<std::uint8\_ t> fn(fn\_ bgn, fn\_ bgn + fn\_ size);}
\DoxyCodeLine { 00125 decomp::routine\_ t rtn(sym, img, scn, fn, dcmp\_ type);}
\DoxyCodeLine { 00126 }
\DoxyCodeLine { 00127 auto syms = rtn.decompose();}
\DoxyCodeLine { 00128 m\_ syms-\/ >put\_ symbols(syms);}
\DoxyCodeLine { 00129 \} \textcolor { keywordflow} { else} if (sym-\/ >storage\_ class == coff::storage\_ class\_ id::public\_ symbol ||}
\DoxyCodeLine { 00130 sym-\/ >storage\_ class == coff::storage\_ class\_ id::private\_ symbol) \{ }
\DoxyCodeLine { 00131 auto scn = img-\/ >get\_ section(sym-\/ >section\_ index -\/ 1);}
\DoxyCodeLine { 00132 auto scn\_ sym = m\_ syms-\/ >sym\_ from\_ hash(m\_ scn\_ hash\_ tbl[scn]);}
\DoxyCodeLine { 00133 }
\DoxyCodeLine { 00134 \textcolor { comment} { // if the section doesnt have a symbol then make one and put it into} }
\DoxyCodeLine { 00135 \textcolor { comment} { // the symbol table...} }
\DoxyCodeLine { 00136 \textcolor { comment} { //} }
\DoxyCodeLine { 00137 if (!scn\_ sym.has\_ value()) \{ }
\DoxyCodeLine { 00138 auto scn\_ sym\_ name =}
\DoxyCodeLine { 00139 std::string(scn-\/ >name.to\_ string(img-\/ >get\_ strings()))}
\DoxyCodeLine { 00140 .append(\textcolor { stringliteral} { "{ } \# "{ } } )}
\DoxyCodeLine { 00141 .append(std::to\_ string(sym-\/ >section\_ index -\/ 1))}
\DoxyCodeLine { 00142 .append(\textcolor { stringliteral} { "{ } !"{ } } )}
\DoxyCodeLine { 00143 .append(std::to\_ string(img-\/ >file\_ header.timedate\_ stamp));}
\DoxyCodeLine { 00144 }
\DoxyCodeLine { 00145 std::vector<std::uint8\_ t> scn\_ data(scn-\/ >size\_ raw\_ data);}
\DoxyCodeLine { 00146 if (scn-\/ >characteristics.cnt\_ uninit\_ data) \{ }
\DoxyCodeLine { 00147 scn\_ data.insert(scn\_ data.begin(), scn-\/ >size\_ raw\_ data, 0);}
\DoxyCodeLine { 00148 \} else \{ }
\DoxyCodeLine { 00149 scn\_ data.insert(}
\DoxyCodeLine { 00150 scn\_ data.begin(),}
\DoxyCodeLine { 00151 reinterpret\_ cast<std::uint8\_ t*>(img) + scn-\/ >ptr\_ raw\_ data,}
\DoxyCodeLine { 00152 reinterpret\_ cast<std::uint8\_ t*>(img) + scn-\/ >ptr\_ raw\_ data +}
\DoxyCodeLine { 00153 scn-\/ >size\_ raw\_ data);}
\DoxyCodeLine { 00154 \} }
\DoxyCodeLine { 00155 }
\DoxyCodeLine { 00156 std::vector<recomp::reloc\_ t> relocs;}
\DoxyCodeLine { 00157 auto scn\_ relocs = reinterpret\_ cast<coff::reloc\_ t*>(}
\DoxyCodeLine { 00158 scn-\/ >ptr\_ relocs + reinterpret\_ cast<std::uint8\_ t*>(img));}
\DoxyCodeLine { 00159 }
\DoxyCodeLine { 00160 for (auto idx = 0u; idx < scn-\/ >num\_ relocs; ++idx) \{ }
\DoxyCodeLine { 00161 auto scn\_ reloc = \& scn\_ relocs[idx];}
\DoxyCodeLine { 00162 auto sym\_ reloc = img-\/ >get\_ symbol(scn\_ relocs[idx].symbol\_ index);}
\DoxyCodeLine { 00163 auto sym\_ name = symbol\_ t::name(img, sym\_ reloc);}
\DoxyCodeLine { 00164 auto sym\_ hash = decomp::symbol\_ t::hash(sym\_ name.data());}
\DoxyCodeLine { 00165 relocs.push\_ back(}
\DoxyCodeLine { 00166 recomp::reloc\_ t(scn\_ reloc-\/ >virtual\_ address -\/ sym-\/ >value,}
\DoxyCodeLine { 00167 sym\_ hash, sym\_ name.data()));}
\DoxyCodeLine { 00168 \} }
\DoxyCodeLine { 00169 }
\DoxyCodeLine { 00170 decomp::symbol\_ t new\_ scn\_ sym(img, scn\_ sym\_ name, 0, scn\_ data, scn, \{ \} ,}
\DoxyCodeLine { 00171 relocs, sym\_ type\_ t::section);}
\DoxyCodeLine { 00172 }
\DoxyCodeLine { 00173 m\_ syms-\/ >put\_ symbol(new\_ scn\_ sym);}
\DoxyCodeLine { 00174 \} }
\DoxyCodeLine { 00175 }
\DoxyCodeLine { 00176 \textcolor { comment} { // create a symbol for the data...} }
\DoxyCodeLine { 00177 \textcolor { comment} { //} }
\DoxyCodeLine { 00178 decomp::symbol\_ t new\_ sym(img, \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1symbol_ _ t_ a7c6dee036291ded334aa10d89293fc2a} { symbol\_ t::name} } (img, sym).\mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ af96177687d0ad683c5897d8fa01135f9acdb885c0ea7f6b2874224487c69b8112} { data} } (),}
\DoxyCodeLine { 00179 sym-\/ >value, \{ \} , scn, sym, \{ \} ,}
\DoxyCodeLine { 00180 \mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ af96177687d0ad683c5897d8fa01135f9acdb885c0ea7f6b2874224487c69b8112} { sym\_ type\_ t::data} } );}
\DoxyCodeLine { 00181 }
\DoxyCodeLine { 00182 m\_ syms-\/ >\mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t_ af9caf2d4d97b2498aa624c3750a7a601} { put\_ symbol} } (new\_ sym);}
\DoxyCodeLine { 00183 \} }
\DoxyCodeLine { 00184 \} \textcolor { keywordflow} { else} \textcolor { keywordflow} { if} (sym-\/ >storage\_ class ==}
\DoxyCodeLine { 00185 coff::storage\_ class\_ id::}
\DoxyCodeLine { 00186 external\_ definition) \{ \textcolor { comment} { // else if the symbol has no} }
\DoxyCodeLine { 00187 \textcolor { comment} { // section... these symbols} }
\DoxyCodeLine { 00188 \textcolor { comment} { // require the linker to allocate} }
\DoxyCodeLine { 00189 \textcolor { comment} { // space for them...} }
\DoxyCodeLine { 00190 }
\DoxyCodeLine { 00191 std::vector<std::uint8\_ t> data(sym-\/ >value, 0);}
\DoxyCodeLine { 00192 decomp::symbol\_ t bss\_ sym(img, symbol\_ t::name(img, sym).data(), \{ \} , \mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ af96177687d0ad683c5897d8fa01135f9acdb885c0ea7f6b2874224487c69b8112} { data} } ,}
\DoxyCodeLine { 00193 \{ \} , sym, \{ \} , \mbox { \hyperlink { namespacetheo_ 1_ 1decomp_ af96177687d0ad683c5897d8fa01135f9acdb885c0ea7f6b2874224487c69b8112} { sym\_ type\_ t::data} } );}
\DoxyCodeLine { 00194 }
\DoxyCodeLine { 00195 m\_ syms-\/ >\mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t_ af9caf2d4d97b2498aa624c3750a7a601} { put\_ symbol} } (bss\_ sym);}
\DoxyCodeLine { 00196 \} }
\DoxyCodeLine { 00197 \} );}
\DoxyCodeLine { 00198 }
\DoxyCodeLine { 00199 \textcolor { comment} { // return the extract symbols to the caller...} }
\DoxyCodeLine { 00200 \textcolor { comment} { //} }
\DoxyCodeLine { 00201 \textcolor { keywordflow} { return} m\_ syms;}
\DoxyCodeLine { 00202 \} }
\end { DoxyCode}
References \mbox { \hyperlink { decomp_ 8cpp_ source_ l00285} { lib()} } .
Referenced by \mbox { \hyperlink { theo_ 8cpp_ source_ l00045} { theo\+ ::theo\+ \_ \+ t\+ ::decompose()} } .
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ aa728bde8ec1c5c28ec09f86adf427ae2} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !lib@{ lib} }
\index { lib@{ lib} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { lib()} { lib()} }
{ \footnotesize \ttfamily std\+ ::vector$ < $ std\+ ::uint8\+ \_ \+ t $ > $ theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::lib (\begin { DoxyParamCaption} { } \end { DoxyParamCaption} )}
gets a vector of bytes consisting of the lib file.
\begin { DoxyReturn} { Returns}
a vector of bytes consisting of the lib file.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00285} { 285} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00285 \{ }
\DoxyCodeLine { 00286 \textcolor { keywordflow} { return} m\_ lib;}
\DoxyCodeLine { 00287 \} }
\end { DoxyCode}
Referenced by \mbox { \hyperlink { decomp_ 8cpp_ source_ l00037} { decompose()} } .
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a81ae70b313a9ef24ea5d8f404699baef} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a81ae70b313a9ef24ea5d8f404699baef} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !objs@{ objs} }
\index { objs@{ objs} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { objs()} { objs()} }
{ \footnotesize \ttfamily std\+ ::vector$ < $ std\+ ::vector$ < $ std\+ ::uint8\+ \_ \+ t $ > $ $ > $ theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::objs (\begin { DoxyParamCaption} { } \end { DoxyParamCaption} )}
gets all the obj files as a vector of a vector of bytes.
\begin { DoxyReturn} { Returns}
all the obj files as a vector of a vector of bytes.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00289} { 289} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00289 \{ }
\DoxyCodeLine { 00290 \textcolor { keywordflow} { return} m\_ objs;}
\DoxyCodeLine { 00291 \} }
\end { DoxyCode}
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a79c965ec0a996a936faae7f54b0e055e} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a79c965ec0a996a936faae7f54b0e055e} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !rtns@{ rtns} }
\index { rtns@{ rtns} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { rtns()} { rtns()} }
{ \footnotesize \ttfamily std\+ ::vector$ < $ \mbox { \hyperlink { classtheo_ 1_ 1decomp_ 1_ 1routine_ _ t} { routine\+ \_ \+ t} } $ > $ theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::rtns (\begin { DoxyParamCaption} { } \end { DoxyParamCaption} )}
gets all of the routine objects.
\begin { DoxyReturn} { Returns}
vector of routine objects.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00281} { 281} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00281 \{ }
\DoxyCodeLine { 00282 \textcolor { keywordflow} { return} m\_ rtns;}
\DoxyCodeLine { 00283 \} }
\end { DoxyCode}
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a860dddc3a5d12231b685dbaa12a0db06} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a860dddc3a5d12231b685dbaa12a0db06} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !scn\_ hash\_ tbl@{ scn\_ hash\_ tbl} }
\index { scn\_ hash\_ tbl@{ scn\_ hash\_ tbl} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { scn\_ hash\_ tbl()} { scn\_ hash\_ tbl()} }
{ \footnotesize \ttfamily std\+ ::map$ < $ coff\+ ::section\+ \_ \+ header\+ \_ \+ t $ \ast $ , std\+ ::size\+ \_ \+ t $ > $ \& theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::scn\+ \_ \+ hash\+ \_ \+ tbl (\begin { DoxyParamCaption} { } \end { DoxyParamCaption} )}
gets the section hash table section header -\/ -\/ \texorpdfstring { $ > $ } { >} hash of the section header ptr.
\begin { DoxyReturn} { Returns}
the section hash table section header -\/ -\/ \texorpdfstring { $ > $ } { >} hash of the section header ptr.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00297} { 297} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00297 \{ }
\DoxyCodeLine { 00298 \textcolor { keywordflow} { return} m\_ scn\_ hash\_ tbl;}
\DoxyCodeLine { 00299 \} }
\end { DoxyCode}
\mbox { \Hypertarget { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a8630f2ee0f4fb9516f5b20014e4c6120} \label { classtheo_ 1_ 1decomp_ 1_ 1decomp_ _ t_ a8630f2ee0f4fb9516f5b20014e4c6120} }
\index { theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} !syms@{ syms} }
\index { syms@{ syms} !theo::decomp::decomp\_ t@{ theo::decomp::decomp\_ t} }
\doxysubsubsection { \texorpdfstring { syms()} { syms()} }
{ \footnotesize \ttfamily \mbox { \hyperlink { classtheo_ 1_ 1recomp_ 1_ 1symbol_ _ table_ _ t} { recomp\+ ::symbol\+ \_ \+ table\+ \_ \+ t} } $ \ast $ theo\+ ::decomp\+ ::decomp\+ \_ \+ t\+ ::syms (\begin { DoxyParamCaption} { } \end { DoxyParamCaption} )}
gets the symbol table.
\begin { DoxyReturn} { Returns}
the symbol table.
\end { DoxyReturn}
Definition at line \mbox { \hyperlink { decomp_ 8cpp_ source_ l00293} { 293} } of file \mbox { \hyperlink { decomp_ 8cpp_ source} { decomp.\+ cpp} } .
\begin { DoxyCode} { 0}
\DoxyCodeLine { 00293 \{ }
\DoxyCodeLine { 00294 \textcolor { keywordflow} { return} m\_ syms;}
\DoxyCodeLine { 00295 \} }
\end { DoxyCode}
Referenced by \mbox { \hyperlink { recomp_ 8cpp_ source_ l00040} { theo\+ ::recomp\+ ::recomp\+ \_ \+ t\+ ::allocate()} } .
The documentation for this class was generated from the following files\+ :\begin { DoxyCompactItemize}
\item
include/decomp/\mbox { \hyperlink { decomp_ 8hpp} { decomp.\+ hpp} } \item
src/decomp/\mbox { \hyperlink { decomp_ 8cpp} { decomp.\+ cpp} } \end { DoxyCompactItemize}