Design & Architecture¶
This section is for developpers who want to learn how Packing Box is built. It is a Docker image based on Ubuntu and architectured in three layers as depicted hereafter.
- The lower layer is the underlying OS, currently Ubuntu 22.04.
- The middle layer, Libraries, shows an underlying set of executable formats. Currently, the Portable Executable (PE) and Executable & Linkable Format (ELF) are supported and Mach Objects are considered for a future addition. This layer shows two other subsets of software ; Machine Learning currently gathers two frameworks (Scikit-Learn and Weka) and Binary Parsing regroups parsing libraries for various executable formats (including LIEF and some others very soon like pefile and pyelftools.
- The upper layer, Automation Toolset, contains the logic for abstracting different entities and items that are, for some of them, backed by Python tools and/or configurable through YAML files.
The upper layer containing the specific logic is disseminated into the Docker image at different locations:
- Code base (
pboxholds the source code that defines abstractions (see architecture schema here above) ties every pieces together. It gets installed from
src/libinto user's home location for Python libraries at
- Toolset (
~/.opt): Tools, items and utils coming from
src/filesget installed in user's home at
binsubfolder is a special case and holds Python scripts aimed to be wrappers for detectors so that they use a logic from another package,
pboxtools(which is a lightweight library separated from
pboxto keep startup overhead lower), to normalize detection outputs.
- Main workspace (
~/.packing-box): Configuration files (coming from
src/conf), executable formats' data (from
src/data), datasets and models are stored in the main workspace at
~/.packing-box. This can be changed when working experiments using the
experimenttool by opening a new experiment. Note that, in this case, figures generated from plot functionalities are saved in a dedicated subfolder of the experiment's workspace.