#pragma once #include "fs/VFS.h" #include "memory/AddressSpace.h" class BinaryFormatLoader : public Shareable { public: virtual Result sniff() = 0; virtual Result load(AddressSpace* space) = 0; virtual StringView format() const = 0; virtual Result> cmdline(Vector args) = 0; virtual ~BinaryFormatLoader() = default; BinaryFormatLoader(SharedPtr); protected: SharedPtr m_inode; }; typedef Result> (*binfmt_loader_creator_t)(SharedPtr, void*); namespace BinaryFormat { Result init(); Result register_binary_format(binfmt_loader_creator_t creator, void* arg); Result> create_loader(SharedPtr inode); }