#pragma once #include "types.h" #include "SdkApiString.h" #include "ElfSymbolParser.h" #include namespace nstool { class RoMetadataProcess { public: RoMetadataProcess(); void process(); void setRoBinary(const tc::ByteData& bin); void setApiInfo(size_t offset, size_t size); void setDynSym(size_t offset, size_t size); void setDynStr(size_t offset, size_t size); void setCliOutputMode(CliOutputMode type); void setIs64BitInstruction(bool flag); void setListApi(bool listApi); void setListSymbols(bool listSymbols); const std::vector& getSdkVerApiList() const; const std::vector& getPublicApiList() const; const std::vector& getDebugApiList() const; const std::vector& getPrivateApiList() const; const std::vector& getGuidelineApiList() const; const std::vector& getSymbolList() const; private: std::string mModuleName; CliOutputMode mCliOutputMode; bool mIs64BitInstruction; bool mListApi; bool mListSymbols; struct sLayout { sLayout() : offset(0), size(0) {} size_t offset; size_t size; }; sLayout mApiInfo; sLayout mDynSym; sLayout mDynStr; tc::ByteData mRoBlob; std::vector mSdkVerApiList; std::vector mPublicApiList; std::vector mDebugApiList; std::vector mPrivateApiList; std::vector mGuidelineApiList; ElfSymbolParser mSymbolList; void importApiList(); void displayRoMetaData(); std::string getSectionIndexStr(uint16_t shn_index) const; std::string getSymbolTypeStr(byte_t symbol_type) const; std::string getSymbolBindingStr(byte_t symbol_binding) const; }; }