5#include <arion/capstone/capstone.h>
19#include <arion/keystone/keystone.h>
23#include <arion/unicorn/unicorn.h>
35extern std::map<CPU_ARCH, std::vector<std::pair<ks_arch, ks_mode>>>
ARION_TO_KS_ARCH;
37extern std::map<CPU_ARCH, std::vector<std::pair<cs_arch, cs_mode>>>
ARION_TO_CS_ARCH;
83 std::optional<pid_t> pgid = std::nullopt);
140 std::exception_ptr uc_exception =
nullptr;
142 bool afl_mode =
false;
146 std::optional<ADDR> start = std::nullopt;
148 std::optional<ADDR> end = std::nullopt;
150 bool running =
false;
154 bool stopped =
false;
181 std::vector<std::string> program_env = std::vector<std::string>(),
182 std::string cwd =
"",
183 std::unique_ptr<Config> config = std::move(std::make_unique<Config>()));
221 std::unique_ptr<ArchManager>
arch;
225 std::unique_ptr<MemoryManager>
mem;
227 std::unique_ptr<FileSystemManager>
fs;
229 std::unique_ptr<SocketManager>
sock;
231 std::unique_ptr<HooksManager>
hooks;
255 std::vector<ks_engine *>
ks;
257 std::vector<csh *>
cs;
269 new_instance(std::vector<std::string> program_args, std::string fs_path =
"/",
270 std::vector<std::string> program_env = std::vector<std::string>(), std::string cwd =
"",
271 std::unique_ptr<Config> config = std::move(std::make_unique<Config>()));
283 new_instance(std::unique_ptr<BaremetalManager> baremetal, std::string fs_path =
"/",
284 std::vector<std::string> program_env = std::vector<std::string>(), std::string cwd =
"",
285 std::unique_ptr<Config> config = std::move(std::make_unique<Config>()));
319 void crash(std::exception_ptr exception);
410 void execve(std::string file_path, std::vector<std::string> argv, std::vector<std::string> envp);
Group of Arion instances that run together. This allows IPC as well as sandboxing between groups.
Definition arion.hpp:41
void add_arion_instance(std::shared_ptr< Arion > arion, std::optional< pid_t > pid=std::nullopt, std::optional< pid_t > pgid=std::nullopt)
std::map< pid_t, std::shared_ptr< Arion > > get_arion_instances()
void set_curr_pid(pid_t pid)
bool trigger_stop
True when emulation of the group should be stopped.
Definition arion.hpp:44
size_t count_arion_instances()
bool has_arion_instance(pid_t pid)
std::shared_ptr< Arion > get_arion_instance(pid_t pid)
void set_next_pid(pid_t pid)
std::map< pid_t, std::shared_ptr< Arion > > instances
List of Arion instances associated with this group.
Definition arion.hpp:51
void remove_arion_instance(pid_t pid)
An emulation unit associated with a process.
Definition arion.hpp:127
std::shared_ptr< Arion > get_child(pid_t child_pid)
bool has_child(pid_t child_pid)
void set_sid(uint32_t sid)
void init_afl_mode(std::vector< int > signals)
std::weak_ptr< Arion > parent
The Arion instance emulating the parent process of this process.
Definition arion.hpp:136
static std::shared_ptr< Arion > new_instance(std::vector< std::string > program_args, std::string fs_path="/", std::vector< std::string > program_env=std::vector< std::string >(), std::string cwd="", std::unique_ptr< Config > config=std::move(std::make_unique< Config >()))
std::unique_ptr< LNX_LOADER_PARAMS > loader_params
Parameters related to the loader action.
Definition arion.hpp:249
static std::shared_ptr< Arion > new_instance(std::unique_ptr< BaremetalManager > baremetal, std::string fs_path="/", std::vector< std::string > program_env=std::vector< std::string >(), std::string cwd="", std::unique_ptr< Config > config=std::move(std::make_unique< Config >()))
void send_signal(pid_t source_pid, int signo)
std::unique_ptr< Logger > logger
Logger instance associated with this instance.
Definition arion.hpp:245
void init_static_program(std::shared_ptr< ExecutableParser > prog_parser)
void set_egid(uint32_t egid)
std::unique_ptr< SocketManager > sock
SocketManager instance associated with this instance.
Definition arion.hpp:229
void replace_child(pid_t child_pid, std::shared_ptr< Arion > child)
std::vector< std::string > get_program_env()
std::vector< std::shared_ptr< Arion > > get_children()
std::vector< std::string > get_program_args()
void set_euid(uint32_t euid)
void set_uid(uint32_t uid)
std::shared_ptr< ArionGroup > get_group()
static void new_instance_common_finish(std::shared_ptr< Arion > arion, CPU_ARCH arch)
void set_run_start(std::optional< ADDR > start)
std::vector< std::shared_ptr< SIGNAL > > pending_signals
List of signals to be processed by this instance.
Definition arion.hpp:251
std::unique_ptr< ContextManager > context
ContextManager instance associated with this instance.
Definition arion.hpp:237
void init_engines(CPU_ARCH arch)
std::vector< ks_engine * > ks
Keystone engine related to this instance.
Definition arion.hpp:255
std::unique_ptr< HooksManager > hooks
HooksManager instance associated with this instance.
Definition arion.hpp:231
std::unique_ptr< CodeTracer > tracer
CodeTracer instance associated with this instance.
Definition arion.hpp:243
pid_t add_child(std::shared_ptr< Arion > child)
void init_dynamic_program(std::shared_ptr< ExecutableParser > prog_parser)
std::vector< std::shared_ptr< Arion > > get_pgid_children(pid_t pgid)
void remove_child(pid_t child_pid)
std::unique_ptr< FileSystemManager > fs
FileSystemManager instance associated with this instance.
Definition arion.hpp:227
std::unique_ptr< MemoryManager > mem
MemoryManager instance associated with this instance.
Definition arion.hpp:225
std::unique_ptr< LinuxSyscallManager > syscalls
LinuxSyscallManager instance associated with this instance.
Definition arion.hpp:239
std::unique_ptr< Config > config
Config instance associated with this instance.
Definition arion.hpp:247
std::shared_ptr< Arion > copy()
std::vector< csh * > cs
Capstone engine related to this instance.
Definition arion.hpp:257
std::weak_ptr< ArionGroup > group
The ArionGroup this process is associated with. Arion instances are emulated together through their g...
Definition arion.hpp:134
static void new_instance_common_init(std::shared_ptr< Arion > arion, std::string fs_path="/", std::vector< std::string > program_env=std::vector< std::string >(), std::string cwd="", std::unique_ptr< Config > config=std::move(std::make_unique< Config >()))
std::vector< std::string > program_args
The program arguments of the emulated process, basically the "argv" array.
Definition arion.hpp:130
void run_gdbserver(uint32_t port)
std::vector< std::weak_ptr< Arion > > children
The Arion instances emulating the child processes of this process.
Definition arion.hpp:138
std::unique_ptr< ThreadingManager > threads
ThreadingManager instance associated with this instance.
Definition arion.hpp:233
void set_group(std::shared_ptr< ArionGroup > group)
std::unique_ptr< BaremetalManager > baremetal
BaremetalManager instance associated with this instance.
Definition arion.hpp:223
bool is_child_of(pid_t parent_pid)
std::unique_ptr< GdtManager > gdt_manager
GdtManager instance associated with this instance.
Definition arion.hpp:241
void set_run_bounds(std::optional< ADDR > start=std::nullopt, std::optional< ADDR > end=std::nullopt)
void init_file_program(std::shared_ptr< ExecutableParser > prog_parser)
std::unique_ptr< SignalManager > signals
SignalManager instance associated with this instance.
Definition arion.hpp:235
std::unique_ptr< ArchManager > arch
ArchManager instance associated with this instance.
Definition arion.hpp:221
std::vector< std::string > program_env
The program environment variables of the emulated process, basically the "envp" array.
Definition arion.hpp:132
void init_baremetal_program()
std::shared_ptr< Arion > get_parent()
void set_run_end(std::optional< ADDR > end)
void set_gid(uint32_t gid)
std::vector< int > afl_signals
List of UNIX signals that must be considered as process crashes when fuzzing with ArionAfl component.
Definition arion.hpp:144
void set_pgid(pid_t pgid)
uc_engine * uc
Unicorn engine related to this instance.
Definition arion.hpp:253
void crash(std::exception_ptr exception)
void execve(std::string file_path, std::vector< std::string > argv, std::vector< std::string > envp)
#define ARION_EXPORT
Defines which symbols should be exported from the library.
Definition global_defs.hpp:13
#define ARION_PROCESS_PID
First PID value to be associated with an emulated process.
Definition global_defs.hpp:29
Definition arch_x86-64.hpp:11
std::map< CPU_ARCH, std::vector< std::pair< ks_arch, ks_mode > > > ARION_TO_KS_ARCH
Ensures the conversion between Arion CPU_ARCH and Keystone CPU architectures and modes.
std::map< CPU_ARCH, std::pair< uc_arch, uc_mode > > ARION_TO_UC_ARCH
Ensures the conversion between Arion CPU_ARCH and Unicorn CPU architectures and modes.
CPU_ARCH
Identifies a CPU architecture.
Definition global_defs.hpp:128
std::map< CPU_ARCH, std::vector< std::pair< cs_arch, cs_mode > > > ARION_TO_CS_ARCH
Ensures the conversion between Arion CPU_ARCH and Capstone CPU architectures and modes.