#pragma once #include #include #include #include #include #include #include #include #include #include #include #include namespace nn { namespace hac { class KernelCapabilityBinary : public fnd::IByteModel { public: KernelCapabilityBinary(); KernelCapabilityBinary(const KernelCapabilityBinary& other); void operator=(const KernelCapabilityBinary& other); bool operator==(const KernelCapabilityBinary& other) const; bool operator!=(const KernelCapabilityBinary& other) const; // IByteModel void toBytes(); void fromBytes(const byte_t* bytes, size_t len); virtual const fnd::Vec& getBytes() const; // variables (consider further abstraction?) void clear(); const ThreadInfoHandler& getThreadInfo() const; ThreadInfoHandler& getThreadInfo(); const SystemCallHandler& getSystemCalls() const; SystemCallHandler& getSystemCalls(); const MemoryMappingHandler& getMemoryMaps() const; MemoryMappingHandler& getMemoryMaps(); const InteruptHandler& getInterupts() const; InteruptHandler& getInterupts(); const MiscParamsHandler& getMiscParams() const; MiscParamsHandler& getMiscParams(); const KernelVersionHandler& getKernelVersion() const; KernelVersionHandler& getKernelVersion(); const HandleTableSizeHandler& getHandleTableSize() const; HandleTableSizeHandler& getHandleTableSize(); const MiscFlagsHandler& getMiscFlags() const; MiscFlagsHandler& getMiscFlags(); private: const std::string kModuleName = "KC_BINARY"; // raw binary fnd::Vec mRawBinary; // variables ThreadInfoHandler mThreadInfo; SystemCallHandler mSystemCalls; MemoryMappingHandler mMemoryMap; InteruptHandler mInterupts; MiscParamsHandler mMiscParams; KernelVersionHandler mKernelVersion; HandleTableSizeHandler mHandleTableSize; MiscFlagsHandler mMiscFlags; }; } }