1#ifndef ARION_LNX_SYSCALL_MANAGER_HPP
2#define ARION_LNX_SYSCALL_MANAGER_HPP
23 std::function<uint64_t(std::shared_ptr<Arion>
arion, std::vector<SYS_PARAM> params,
bool &cancel)>
func;
26 std::vector<std::shared_ptr<arion_type::KernelType>>
signature;
34 std::function<uint64_t(std::shared_ptr<Arion>
arion, std::vector<SYS_PARAM> params,
bool &cancel)>
func,
35 std::vector<std::shared_ptr<arion_type::KernelType>>
signature)
64 template <
typename... SignatureArgs>
66 std::function<uint64_t(std::shared_ptr<Arion>
arion, std::vector<SYS_PARAM> params,
bool &cancel)> func,
67 SignatureArgs &&...signature)
69 std::vector<std::shared_ptr<arion_type::KernelType>> sig_vec = {std::forward<SignatureArgs>(signature)...};
70 return std::make_shared<SYSCALL_FUNC>(func, sig_vec);
85 std::vector<std::shared_ptr<arion_type::KernelType>> signature,
86 std::vector<SYS_PARAM> func_params, uint64_t syscall_ret);
94 static std::unique_ptr<LinuxSyscallManager>
initialize(std::weak_ptr<Arion>
arion);
Manages the emulation and dispatching of Linux system calls.
Definition lnx_syscall_manager.hpp:44
void add_syscall_entry(std::string name, std::shared_ptr< SYSCALL_FUNC > func)
void init_syscall_funcs()
std::map< uint64_t, std::shared_ptr< SYSCALL_FUNC > > syscall_funcs
Map linking the numeric syscall number (sysno) to its emulation function and signature.
Definition lnx_syscall_manager.hpp:49
std::shared_ptr< SYSCALL_FUNC > make_sys_func(std::function< uint64_t(std::shared_ptr< Arion > arion, std::vector< SYS_PARAM > params, bool &cancel)> func, SignatureArgs &&...signature)
Definition lnx_syscall_manager.hpp:65
void set_syscall_func(uint64_t sysno, std::shared_ptr< SYSCALL_FUNC > func)
void process_syscall(std::shared_ptr< Arion > arion)
void set_syscall_func(std::string name, std::shared_ptr< SYSCALL_FUNC > func)
std::shared_ptr< SYSCALL_FUNC > get_syscall_func(std::string name)
std::shared_ptr< SYSCALL_FUNC > get_syscall_func(uint64_t sysno)
void print_syscall(std::shared_ptr< Arion > arion, std::string sys_name, std::vector< std::shared_ptr< arion_type::KernelType > > signature, std::vector< SYS_PARAM > func_params, uint64_t syscall_ret)
LinuxSyscallManager(std::weak_ptr< Arion > arion)
static std::unique_ptr< LinuxSyscallManager > initialize(std::weak_ptr< Arion > arion)
std::weak_ptr< Arion > arion
Weak pointer to the main Arion instance.
Definition lnx_syscall_manager.hpp:47
#define ARION_EXPORT
Defines which symbols should be exported from the library.
Definition global_defs.hpp:13
Definition arch_x86-64.hpp:11
uint64_t SYS_PARAM
Identifies a syscall parameter.
Definition global_defs.hpp:58
std::map< std::string, uint8_t > PARAMS_N_BY_SYSCALL_NAME
Global map storing the number of parameters required for a syscall, indexed by its string name.
Structure defining a system call function and its parameter signature for logging/analysis.
Definition lnx_syscall_manager.hpp:21
std::vector< std::shared_ptr< arion_type::KernelType > > signature
Definition lnx_syscall_manager.hpp:26
SYSCALL_FUNC(std::function< uint64_t(std::shared_ptr< Arion > arion, std::vector< SYS_PARAM > params, bool &cancel)> func, std::vector< std::shared_ptr< arion_type::KernelType > > signature)
Definition lnx_syscall_manager.hpp:33
std::function< uint64_t(std::shared_ptr< Arion > arion, std::vector< SYS_PARAM > params, bool &cancel)> func
The function pointer to the syscall emulation handler.
Definition lnx_syscall_manager.hpp:23