1#ifndef ARION_GLOBAL_EXCEPTS_HPP
2#define ARION_GLOBAL_EXCEPTS_HPP
4#include <arion/capstone/capstone.h>
6#include <arion/keystone/keystone.h>
7#include <arion/unicorn/unicorn.h>
15#define ARION_EXCEPTION_MAX_FRAMES 64
36 std::ostringstream ss;
38 ss << std::endl << std::endl <<
"========== BACKTRACE ==========" << std::endl << std::endl;
39 for (
int i = 0; i < frame_count; ++i)
42 if (dladdr(buffer[i], &info))
46 offset =
reinterpret_cast<uintptr_t
>(buffer[i]) -
reinterpret_cast<uintptr_t
>(info.dli_saddr);
47 ss << std::setw(3) << i <<
": "
49 << arion::int_to_hex<uintptr_t>(offset) <<
" (" << buffer[i] <<
") at "
50 << (info.dli_fname ? info.dli_fname :
"??") << std::endl;
54 ss << std::setw(3) << i <<
": [unknown] (" << buffer[i] <<
")\n";
57 ss << std::endl <<
"===============================" << std::endl << std::endl;
58 this->message = ss.str();
65 const char *
what() const noexcept
override
80 :
ArionException(std::string(
"Invalid argument : \"") + err + std::string(
"\".")) {};
92 :
ArionException(std::string(
"Attempting to use an expired weak_ptr : ") + weak_ptr_name + std::string(
".")) {};
104 :
ArionException(std::string(
"File could not be found \"") + file_path + std::string(
"\".")) {};
116 :
ArionException(std::string(
"An error occurred while opening file \"") + file_path + std::string(
"\".")) {};
130 :
ArionException(std::string(
"File size of \"") + file_path + std::string(
"\" is ") +
131 arion::int_to_hex<size_t>(file_sz) + std::string(
" when it should be at least ") +
132 arion::int_to_hex<size_t>(min_file_sz) + std::string(
".")) {};
145 :
ArionException(std::string(
"File \"") + file_path + std::string(
"\" is not in file system \"") + fs +
146 std::string(
"\".")) {};
158 :
ArionException(std::string(
"Configuration doesn't have a \"") + key + std::string(
"\" key.")) {};
171 std::string(
"\" was accessed with a wrong type.")) {};
184 std::string(
"\" does not start with required magic sequence for a context file.")) {};
197 std::string(
"Context file \"") + file_path +
198 std::string(
"\" was written with a newer version of Arion. Consider updating Arion to use it.")) {};
210 :
ArionException(std::string(
"File path \"") + file_path + std::string(
"\" is too long.")) {};
222 :
ArionException(std::string(
"Couldn't identify linkage type of \"") + exe_path + std::string(
"\".")) {};
234 :
ArionException(std::string(
"Invalid syscall number : ") +
arion::int_to_hex(syscall_no) + std::string(
".")) {
247 :
ArionException(std::string(
"Invalid syscall name : \"") + name + std::string(
"\".")) {};
259 :
ArionException(std::string(
"Wrong linkage type for \"") + exe_path + std::string(
"\".")) {};
270 :
ArionException(std::string(
"Can't analyze coredump note because it does not refer to a thread.")) {};
282 :
ArionException(std::string(
"No memory segment is mapped at address ") +
arion::int_to_hex(addr) +
283 std::string(
".")) {};
295 :
ArionException(std::string(
"No memory segment has info ") + info + std::string(
".")) {};
308 :
ArionException(std::string(
"Segment [") +
arion::int_to_hex(start_addr) + std::string(
":") +
309 arion::int_to_hex(end_addr) + std::string(
"] is not mapped in memory.")) {};
322 :
ArionException(std::string(
"An error occurred while attempting to map memory at address ") +
323 arion::int_to_hex<
arion::ADDR>(start_addr) + std::string(
" with size ") +
324 arion::int_to_hex<ssize_t>(sz) + std::string(
".")) {};
340 :
ArionException(std::string(
"Segment [") +
arion::int_to_hex(seg_start) + std::string(
":") +
341 arion::int_to_hex(seg_end) + std::string(
"] is not between unmapping bounds [") +
342 arion::int_to_hex(unmap_start) + std::string(
":") +
arion::int_to_hex(unmap_end) +
343 std::string(
"].")) {};
354 :
ArionException(
"This CPU architecture in not supported for the moment.") {};
365 :
ArionException(
"Your host CPU architecture in not supported for the moment.") {};
399 :
ArionException(std::string(
"Thread ") +
arion::int_to_hex<pid_t>(tid) + std::string(
" from process ") +
400 arion::int_to_hex<pid_t>(pid) + std::string(
" received unknown signal \"") +
401 arion::int_to_hex<int>(signo) + std::string(
"\".")) {};
415 :
ArionException(std::string(
"Thread ") +
arion::int_to_hex<pid_t>(tid) + std::string(
" from process ") +
416 arion::int_to_hex<pid_t>(pid) + std::string(
" has no signal handler set for signal ") +
417 arion::int_to_hex<int>(signo) + std::string(
".")) {};
431 :
ArionException(std::string(
"Thread ") +
arion::int_to_hex<pid_t>(tid) + std::string(
" from process ") +
432 arion::int_to_hex<pid_t>(pid) + std::string(
" crashed with unhandled signal \"") + sig_desc +
433 std::string(
"\".")) {};
446 :
ArionException(std::string(
"Thread ") +
arion::int_to_hex<pid_t>(tid) + std::string(
" from process ") +
447 arion::int_to_hex<pid_t>(pid) + std::string(
" is already waiting for a signal.")) {};
460 std::string(
" can't wait for itself.")) {};
473 std::string(
" does not exist or has exited.")) {};
487 std::string(
") has no child with PID : ") +
arion::int_to_hex<pid_t>(child_pid) +
488 std::string(
".")) {};
532 std::string(
" bytes register with a ") +
arion::int_to_hex<uint8_t>(prov_sz) +
533 std::string(
" bytes variable.")) {};
546 std::string(
" does not exist in current architecture.")) {};
558 :
ArionException(std::string(
"Register with name \"") + reg_name +
559 std::string(
"\" does not exist in current architecture.")) {};
571 :
ArionException(std::string(
"This structure has no field called \"") + field_name + std::string(
"\".")) {};
604 std::string(
" is not referenced in IDT.")) {};
616 std::string(
"CPU interrupt does not exist or has no corresponding kernel signal implemented.")) {};
628 :
ArionException(std::string(
"An error occurred while opening Unicorn engine : \"") + uc_strerror(err) +
629 std::string(
"\".")) {};
641 :
ArionException(std::string(
"An error occurred while configuring Unicorn engine : \"") + uc_strerror(err) +
642 std::string(
"\".")) {};
654 :
ArionException(std::string(
"An error occurred while mapping a memory segment with Unicorn engine : \"") +
655 uc_strerror(err) + std::string(
"\".")) {};
667 :
ArionException(std::string(
"An error occurred while unmapping a memory segment with Unicorn engine : \"") +
668 uc_strerror(err) + std::string(
"\".")) {};
680 :
ArionException(std::string(
"An error occurred while fetching memory regions with Unicorn engine : \"") +
681 uc_strerror(err) + std::string(
"\".")) {};
693 :
ArionException(std::string(
"An error occurred while reading from memory with Unicorn engine : \"") +
694 uc_strerror(err) + std::string(
"\".")) {};
706 :
ArionException(std::string(
"An error occurred while writing to memory with Unicorn engine : \"") +
707 uc_strerror(err) + std::string(
"\".")) {};
720 std::string(
"An error occurred while changing memory writes of segment with Unicorn engine : \"") +
721 uc_strerror(err) + std::string(
"\".")) {};
733 :
ArionException(std::string(
"An error occurred while reading a register with Unicorn engine : \"") +
734 uc_strerror(err) + std::string(
"\".")) {};
746 :
ArionException(std::string(
"An error occurred while writing a register with Unicorn engine : \"") +
747 uc_strerror(err) + std::string(
"\".")) {};
760 std::string(
"An error occurred while flushing Qemu translation blocks with Unicorn engine : \"") +
761 uc_strerror(err) + std::string(
"\".")) {};
773 :
ArionException(std::string(
"An error occurred while injecting a hook with Unicorn engine : \"") +
774 uc_strerror(err) + std::string(
"\".")) {};
786 :
ArionException(std::string(
"An error occurred while removing a hook with Unicorn engine : \"") +
787 uc_strerror(err) + std::string(
"\".")) {};
799 :
ArionException(std::string(
"An error occurred while running Unicorn engine : \"") + uc_strerror(err) +
800 std::string(
"\".")) {};
812 :
ArionException(std::string(
"An error occurred while stopping Unicorn engine : \"") + uc_strerror(err) +
813 std::string(
"\".")) {};
825 :
ArionException(std::string(
"An error occurred while using UnicornAFL engine : \"") + err +
826 std::string(
"\".")) {};
837 :
ArionException(std::string(
"At least one exit must be specified when fuzzing with UnicornAFL engine.")) {};
849 :
ArionException(std::string(
"An error occurred while opening Keystone engine : \"") + ks_strerror(err) +
850 std::string(
"\".")) {};
862 :
ArionException(std::string(
"An error occurred while assembling with Keystone engine : \"") +
863 ks_strerror(err) + std::string(
"\".")) {};
875 :
ArionException(std::string(
"An error occurred while opening Capstone engine : \"") + cs_strerror(err) +
876 std::string(
"\".")) {};
888 :
ArionException(std::string(
"Cannot add entry. File descriptor ") +
arion::int_to_hex<int>(fd) +
889 std::string(
" already references file.")) {};
901 :
ArionException(std::string(
"Cannot find file entry with file descriptor ") +
arion::int_to_hex<int>(fd) +
902 std::string(
".")) {};
914 :
ArionException(std::string(
"Cannot add entry. File descriptor ") +
arion::int_to_hex<int>(fd) +
915 std::string(
" already references socket.")) {};
927 :
ArionException(std::string(
"Cannot find socket entry with file descriptor ") +
arion::int_to_hex<int>(fd) +
928 std::string(
".")) {};
939 :
ArionException(std::string(
"A free GDT entry was requested and could not be found.")) {};
952 std::string(
"\" does not start with required magic sequence for a trace file.")) {};
965 std::string(
"Trace file \"") + file_path +
966 std::string(
"\" was written with a newer version of Arion. Consider updating Arion to use it.")) {};
987 :
ArionException(std::string(
"Unable to compare code traces that use different trace modes.")) {};
998 :
ArionException(std::string(
"Requested feature can't be used with specified trace mode.")) {};
1011 std::string(
"Register ") +
arion::int_to_hex<
arion::REG>(reg) +
1012 std::string(
" is not part of trace file. Only the largest registers are written to trace files.")) {};
1026 std::string(
"\" does not contain a module with ID : ") +
arion::int_to_hex<uint16_t>(mod_id) +
1027 std::string(
".")) {};
1041 std::string(
"\" does not contain a module with name : \"") + name + std::string(
"\".")) {};
1055 std::string(
"\" does not contain a module with hash : \"") + hash + std::string(
"\".")) {};
1068 std::string(
" while reading trace file.")) {};
1081 :
ArionException(std::string(
"Can't reach ") + name + std::string(
" + ") +
arion::int_to_hex<uint32_t>(off) +
1082 std::string(
" while reading trace file.")) {};
1114 :
ArionException(std::string(
"MemoryRecorder is already started.")) {};
1125 :
ArionException(std::string(
"MemoryRecorder is already stopped.")) {};
This class represents a custom exception defined in Arion environment.
Definition global_excepts.hpp:22
ArionException(std::string msg)
Definition global_excepts.hpp:32
const char * what() const noexcept override
Definition global_excepts.hpp:65
std::string message
The reason why this exception was triggered.
Definition global_excepts.hpp:25
Thrown when the linkage type is not suitable for the operation.
Definition global_excepts.hpp:252
BadLinkageTypeException(std::string exe_path)
Definition global_excepts.hpp:258
Thrown when a trace address can't be reached.
Definition global_excepts.hpp:1060
CantReachTraceAddrException(arion::ADDR addr)
Definition global_excepts.hpp:1066
Thrown when a trace file can't be reached at the specified offset.
Definition global_excepts.hpp:1073
CantReachTraceOffException(std::string name, uint32_t off)
Definition global_excepts.hpp:1080
Thrown when trying to unmap a memory segment that is not within the bounds of the segment.
Definition global_excepts.hpp:329
CantUnmapOutsideSegmentException(arion::ADDR seg_start, arion::ADDR seg_end, arion::ADDR unmap_start, arion::ADDR unmap_end)
Definition global_excepts.hpp:338
Thrown when an error occurs while opening the Capstone engine.
Definition global_excepts.hpp:868
CapstoneOpenException(cs_err err)
Definition global_excepts.hpp:874
Thrown when a key is not found in the configuration.
Definition global_excepts.hpp:151
ConfigKeyNotFoundException(std::string key)
Definition global_excepts.hpp:157
Thrown when trying to access a configuration key with the wrong type.
Definition global_excepts.hpp:163
ConfigWrongTypeAccessException(std::string key)
Definition global_excepts.hpp:169
Thrown when attempting to compare code traces that use different trace modes.
Definition global_excepts.hpp:981
DifferentTraceModesException()
Definition global_excepts.hpp:986
Thrown when attempting to use an expired weak_ptr.
Definition global_excepts.hpp:85
ExpiredWeakPtrException(std::string weak_ptr_name)
Definition global_excepts.hpp:91
Thrown when attempting to add an entry to a file descriptor table that already contains an entry for ...
Definition global_excepts.hpp:881
FileAlreadyHasFdException(int fd)
Definition global_excepts.hpp:887
Thrown when a file is not found.
Definition global_excepts.hpp:97
FileNotFoundException(std::string file_path)
Definition global_excepts.hpp:103
Thrown when a file is not found in a file system.
Definition global_excepts.hpp:137
FileNotInFsException(std::string fs, std::string file_path)
Definition global_excepts.hpp:144
Thrown when an error occurs while opening a file.
Definition global_excepts.hpp:109
FileOpenException(std::string file_path)
Definition global_excepts.hpp:115
Thrown when a file is smaller than expected.
Definition global_excepts.hpp:121
FileTooSmallException(std::string file_path, size_t file_sz, size_t min_file_sz)
Definition global_excepts.hpp:129
Thrown when attempting to read/write a register with a size that doesn't match the register's size.
Definition global_excepts.hpp:523
HeavierRegException(uint8_t req_sz, uint8_t prov_sz)
Definition global_excepts.hpp:530
Thrown when passing an invalid argument to a method.
Definition global_excepts.hpp:73
InvalidArgumentException(std::string err)
Definition global_excepts.hpp:79
Thrown when passing an invalid system call name argument to a method.
Definition global_excepts.hpp:240
InvalidSyscallNameException(std::string &name)
Definition global_excepts.hpp:246
Thrown when passing an invalid system call number to a method.
Definition global_excepts.hpp:227
InvalidSyscallNoException(uint64_t syscall_no)
Definition global_excepts.hpp:233
Thrown when an error occurs while using the Keystone engine for assembly.
Definition global_excepts.hpp:855
KeystoneAsmException(ks_err err)
Definition global_excepts.hpp:861
Thrown when an error occurs while opening the Keystone engine.
Definition global_excepts.hpp:842
KeystoneOpenException(ks_err err)
Definition global_excepts.hpp:848
Thrown when attempting to map memory that has already been mapped.
Definition global_excepts.hpp:314
MemAlreadyMappedException(arion::ADDR start_addr, size_t sz)
Definition global_excepts.hpp:321
Thrown when attempting to start a MemoryRecorder that is already started.
Definition global_excepts.hpp:1108
MemoryRecorderAlreadyStartedException()
Definition global_excepts.hpp:1113
Thrown when trying to stop a MemoryRecorder that is already stopped.
Definition global_excepts.hpp:1119
MemoryRecorderAlreadyStoppedException()
Definition global_excepts.hpp:1124
Thrown when a context file was written with a newer version of Arion.
Definition global_excepts.hpp:189
NewerContextFileVersionException(std::string file_path)
Definition global_excepts.hpp:195
Thrown when a trace file was written with a newer version of Arion.
Definition global_excepts.hpp:957
NewerTraceFileVersionException(std::string file_path)
Definition global_excepts.hpp:963
Thrown when a parent process does not have a child process with a specific PID.
Definition global_excepts.hpp:478
NoChildWithPidException(pid_t parent_pid, pid_t child_pid)
Definition global_excepts.hpp:485
Thrown when trying to analyze a coredump note that does not refer to a thread.
Definition global_excepts.hpp:264
NoCoredumpCurrentThreadException()
Definition global_excepts.hpp:269
Thrown when a file descriptor does not correspond to a file.
Definition global_excepts.hpp:894
NoFileAtFdException(int fd)
Definition global_excepts.hpp:900
Thrown when there is no free GDT entry available.
Definition global_excepts.hpp:933
NoFreeGdtEntryException()
Definition global_excepts.hpp:938
Thrown when attempting to access an IDT entry with an interrupt number that is not referenced.
Definition global_excepts.hpp:596
NoIdtEntryWithIntnoException(uint32_t intno)
Definition global_excepts.hpp:602
Thrown when trying to access a process with a non-existing or already exited PID.
Definition global_excepts.hpp:465
NoProcessWithPidException(pid_t pid)
Definition global_excepts.hpp:471
Thrown when trying to access a register that does not exist in the current architecture.
Definition global_excepts.hpp:551
NoRegWithNameException(std::string reg_name)
Definition global_excepts.hpp:557
Thrown when trying to access a register that does not exist in the current architecture.
Definition global_excepts.hpp:538
NoRegWithValueException(arion::REG reg)
Definition global_excepts.hpp:544
Thrown when there is no memory segment mapped at the specified address.
Definition global_excepts.hpp:275
NoSegmentAtAddrException(arion::ADDR addr)
Definition global_excepts.hpp:281
Thrown when there is no memory segment with the specified info.
Definition global_excepts.hpp:288
NoSegmentWithInfoException(std::string info)
Definition global_excepts.hpp:294
Thrown when a thread has no signal handler set for a given signal.
Definition global_excepts.hpp:406
NoSighandlerForSignalException(pid_t pid, pid_t tid, int signo)
Definition global_excepts.hpp:414
Thrown when a CPU interrupt does not exist or has no corresponding kernel signal implemented.
Definition global_excepts.hpp:609
NoSignalForIntrException()
Definition global_excepts.hpp:614
Thrown when a socket entry cannot be found with a given file descriptor.
Definition global_excepts.hpp:920
NoSocketAtFdException(int fd)
Definition global_excepts.hpp:926
Thrown when attempting to access a field in a structure that does not exist.
Definition global_excepts.hpp:564
NoStructFieldWithNameException(std::string field_name)
Definition global_excepts.hpp:570
Thrown when attempting to access a memory segment that has not been mapped.
Definition global_excepts.hpp:300
SegmentNotMappedException(arion::ADDR start_addr, arion::ADDR end_addr)
Definition global_excepts.hpp:307
Thrown when attempting to add an entry to a socket that already has a file descriptor.
Definition global_excepts.hpp:907
SocketAlreadyHasFdException(int fd)
Definition global_excepts.hpp:913
Thrown when a thread is already waiting for a signal.
Definition global_excepts.hpp:438
ThreadAlreadySigWaitingException(pid_t pid, pid_t tid)
Definition global_excepts.hpp:445
Thrown when there are too many hooks already active.
Definition global_excepts.hpp:503
TooManyHooksException()
Definition global_excepts.hpp:508
Thrown when the maximum number of loggers has been reached.
Definition global_excepts.hpp:1140
TooManyLoggersException()
Definition global_excepts.hpp:1145
Thrown when there are too many active structures.
Definition global_excepts.hpp:576
TooManyStructsException()
Definition global_excepts.hpp:581
Thrown when the system is already running the maximum number of threads.
Definition global_excepts.hpp:370
TooManyThreadsException()
Definition global_excepts.hpp:375
Thrown when trying to disable a tracer that is already disabled.
Definition global_excepts.hpp:1098
TracerAlreadyDisabledException()
Definition global_excepts.hpp:1103
Thrown when attempting to enable a tracer that is already enabled.
Definition global_excepts.hpp:1087
TracerAlreadyEnabledException()
Definition global_excepts.hpp:1092
Thrown when a thread crashes with an unhandled signal.
Definition global_excepts.hpp:422
UnhandledSyncSignalException(pid_t pid, pid_t tid, std::string sig_desc)
Definition global_excepts.hpp:430
Thrown when an error occurs while using the UnicornAFL engine.
Definition global_excepts.hpp:818
UnicornAflException(std::string err)
Definition global_excepts.hpp:824
Thrown when no exits are specified while fuzzing with UnicornAFL engine.
Definition global_excepts.hpp:831
UnicornAflNoExitsException()
Definition global_excepts.hpp:836
Thrown when an error occurs while configuring the Unicorn engine.
Definition global_excepts.hpp:634
UnicornCtlException(uc_err err)
Definition global_excepts.hpp:640
Thrown when an error occurs while flushing Qemu translation blocks with Unicorn engine.
Definition global_excepts.hpp:752
UnicornCtlFlushTbException(uc_err err)
Definition global_excepts.hpp:758
Thrown when an error occurs while injecting a hook with Unicorn engine.
Definition global_excepts.hpp:766
UnicornHookAddException(uc_err err)
Definition global_excepts.hpp:772
Thrown when an error occurs while removing a hook with Unicorn engine.
Definition global_excepts.hpp:779
UnicornHookDelException(uc_err err)
Definition global_excepts.hpp:785
Thrown when an error occurs while mapping a memory segment with the Unicorn engine.
Definition global_excepts.hpp:647
UnicornMapException(uc_err err)
Definition global_excepts.hpp:653
Thrown when an error occurs while changing memory writes of a segment with Unicorn engine.
Definition global_excepts.hpp:712
UnicornMemProtectException(uc_err err)
Definition global_excepts.hpp:718
Thrown when an error occurs while reading from memory with Unicorn engine.
Definition global_excepts.hpp:686
UnicornMemReadException(uc_err err)
Definition global_excepts.hpp:692
Thrown when an error occurs while fetching memory regions with Unicorn engine.
Definition global_excepts.hpp:673
UnicornMemRegionsException(uc_err err)
Definition global_excepts.hpp:679
Thrown when an error occurs while writing to memory with the Unicorn engine.
Definition global_excepts.hpp:699
UnicornMemWriteException(uc_err err)
Definition global_excepts.hpp:705
Thrown when an error occurs while opening Unicorn engine.
Definition global_excepts.hpp:621
UnicornOpenException(uc_err err)
Definition global_excepts.hpp:627
Thrown when an error occurs while reading a register with Unicorn engine.
Definition global_excepts.hpp:726
UnicornRegReadException(uc_err err)
Definition global_excepts.hpp:732
Thrown when an error occurs while writing a register with Unicorn engine.
Definition global_excepts.hpp:739
UnicornRegWriteException(uc_err err)
Definition global_excepts.hpp:745
Thrown when an error occurs while running Unicorn engine.
Definition global_excepts.hpp:792
UnicornRunException(uc_err err)
Definition global_excepts.hpp:798
Thrown when an error occurs while stopping Unicorn engine.
Definition global_excepts.hpp:805
UnicornStopException(uc_err err)
Definition global_excepts.hpp:811
Thrown when an error occurs while unmapping a memory segment with Unicorn engine.
Definition global_excepts.hpp:660
UnicornUnmapException(uc_err err)
Definition global_excepts.hpp:666
Thrown when the linkage type of an executable cannot be identified.
Definition global_excepts.hpp:215
UnknownLinkageTypeException(std::string exe_path)
Definition global_excepts.hpp:221
Thrown when a thread receives an unknown signal.
Definition global_excepts.hpp:390
UnknownSignalException(pid_t pid, pid_t tid, int signo)
Definition global_excepts.hpp:398
Thrown when the specified trace mode does not exist.
Definition global_excepts.hpp:971
UnknownTraceModeException()
Definition global_excepts.hpp:976
Thrown when attempting to access a trace module with an unknown hash.
Definition global_excepts.hpp:1046
UnknownTraceModuleHashException(std::string file_path, std::string hash)
Definition global_excepts.hpp:1053
Thrown when attempting to access a module with an unknown ID in a trace file.
Definition global_excepts.hpp:1017
UnknownTraceModuleIdException(std::string file_path, uint16_t mod_id)
Definition global_excepts.hpp:1024
Thrown when attempting to access a trace module with an unknown name.
Definition global_excepts.hpp:1032
UnknownTraceModuleNameException(std::string file_path, std::string name)
Definition global_excepts.hpp:1039
Thrown when attempting to access a register that is not part of the trace file.
Definition global_excepts.hpp:1003
UnknownTraceRegException(arion::REG reg)
Definition global_excepts.hpp:1009
Thrown when the CPU architecture is not supported.
Definition global_excepts.hpp:348
UnsupportedCpuArchException()
Definition global_excepts.hpp:353
Thrown when the host CPU architecture is not supported.
Definition global_excepts.hpp:359
UnsupportedHostCpuArchException()
Definition global_excepts.hpp:364
Thrown when trying to wait for a process that is the same as the current process.
Definition global_excepts.hpp:452
WaitSameProcessException(pid_t pid)
Definition global_excepts.hpp:458
Thrown when a file does not start with the required magic sequence for a context file.
Definition global_excepts.hpp:176
WrongContextFileMagicException(std::string file_path)
Definition global_excepts.hpp:182
Thrown when attempting to use a non-existent hook id.
Definition global_excepts.hpp:513
WrongHookIdException()
Definition global_excepts.hpp:518
Thrown when the parameters passed to a hook are invalid.
Definition global_excepts.hpp:493
WrongHookParamsException()
Definition global_excepts.hpp:498
Thrown when the specified log level does not exist.
Definition global_excepts.hpp:1130
WrongLogLevelException()
Definition global_excepts.hpp:1135
Thrown when an invalid struct id is specified.
Definition global_excepts.hpp:586
WrongStructIdException()
Definition global_excepts.hpp:591
Thrown when attempting to access a thread with an invalid thread id.
Definition global_excepts.hpp:380
WrongThreadIdException()
Definition global_excepts.hpp:385
Thrown when a trace file does not start with the required magic sequence.
Definition global_excepts.hpp:944
WrongTraceFileMagicException(std::string file_path)
Definition global_excepts.hpp:950
Thrown when the requested feature can't be used with the specified trace mode.
Definition global_excepts.hpp:992
WrongTraceModeException()
Definition global_excepts.hpp:997
#define ARION_EXCEPTION_MAX_FRAMES
Definition global_excepts.hpp:15
Definition global_excepts.hpp:18
Definition arch_x86-64.hpp:11
uint64_t REG
Identifies a Unicorn register.
Definition global_defs.hpp:42
uint64_t ADDR
Identifies a memory address.
Definition global_defs.hpp:36
std::string demangle_cxx_symbol(std::string mangled_name)
Definition convert_utils.hpp:89