Arion 1.0.2-alpha
A high-performance C++ framework for emulating executable binaries.
 
Loading...
Searching...
No Matches
lnx_syscall_manager.hpp
Go to the documentation of this file.
1#ifndef ARION_LNX_SYSCALL_MANAGER_HPP
2#define ARION_LNX_SYSCALL_MANAGER_HPP
3
6#include <functional>
7#include <map>
8#include <memory>
9#include <string>
10
11namespace arion
12{
13
14class Arion;
15
17using SYS_PARAM = uint64_t;
18
21{
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;
27
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)
37};
38
40extern std::map<std::string, uint8_t> PARAMS_N_BY_SYSCALL_NAME;
41
44{
45 private:
47 std::weak_ptr<Arion> arion;
49 std::map<uint64_t, std::shared_ptr<SYSCALL_FUNC>> syscall_funcs;
55 void add_syscall_entry(std::string name, std::shared_ptr<SYSCALL_FUNC> func);
64 template <typename... SignatureArgs>
65 std::shared_ptr<SYSCALL_FUNC> make_sys_func(
66 std::function<uint64_t(std::shared_ptr<Arion> arion, std::vector<SYS_PARAM> params, bool &cancel)> func,
67 SignatureArgs &&...signature)
68 {
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);
71 }
84 void print_syscall(std::shared_ptr<Arion> arion, std::string sys_name,
85 std::vector<std::shared_ptr<arion_type::KernelType>> signature,
86 std::vector<SYS_PARAM> func_params, uint64_t syscall_ret);
87
88 public:
94 static std::unique_ptr<LinuxSyscallManager> initialize(std::weak_ptr<Arion> arion);
99 LinuxSyscallManager(std::weak_ptr<Arion> arion);
106 void process_syscall(std::shared_ptr<Arion> arion);
112 void ARION_EXPORT set_syscall_func(uint64_t sysno, std::shared_ptr<SYSCALL_FUNC> func);
118 void ARION_EXPORT set_syscall_func(std::string name, std::shared_ptr<SYSCALL_FUNC> func);
124 std::shared_ptr<SYSCALL_FUNC> ARION_EXPORT get_syscall_func(uint64_t sysno);
130 std::shared_ptr<SYSCALL_FUNC> ARION_EXPORT get_syscall_func(std::string name);
131};
132
133}; // namespace arion
134
135#endif // ARION_LNX_SYSCALL_MANAGER_HPP
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)
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