android-x64-strace

by
4 views e8b952ab...

Description

Syscall tracing & args/flags/error/signal parsing with strace-like output for Android x64 (tested with emulator & Android 13). See more at https://github.com/FrenchYeti/interruptor

How to Use

Download the script and run it with Frida CLI:

Download Script

Then run with Frida:

frida -U -f YOUR_PACKAGE_NAME -l android-x64-strace.js

Replace YOUR_PACKAGE_NAME with the target app's package name.

Source Code

JavaScript
var t,e,n,_,s={};(t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})})(s),function(t){t[t.NUM=0]="NUM",t[t.NAME=1]="NAME",t[t.HEX=2]="HEX",t[t.ARGS=3]="ARGS",t[t.RET=4]="RET"}(t||(t={})),function(t){t[t.EXCLUDE_ANY=0]="EXCLUDE_ANY",t[t.INCLUDE_ANY=1]="INCLUDE_ANY",t[t.FILTER=2]="FILTER"}(e||(e={})),function(t){t[t.PATH=0]="PATH",t[t.SIZE=1]="SIZE",t[t.FD=2]="FD",t[t.DFD=3]="DFD",t[t.FLAG=4]="FLAG",t[t.ATTRMODE=5]="ATTRMODE",t[t.O_FLAGS=6]="O_FLAGS",t[t.VADDR=7]="VADDR",t[t.MPROT=8]="MPROT",t[t.OUTPUT_BUFFER=9]="OUTPUT_BUFFER",t[t.PID=10]="PID",t[t.ERR=11]="ERR",t[t.SIG=12]="SIG",t[t.XATTR_LIST=13]="XATTR_LIST",t[t.F_=14]="F_",t[t.MFD=15]="MFD",t[t.UID=16]="UID",t[t.GID=17]="GID",t[t.UTSNAME=18]="UTSNAME",t[t.FCNTL_ARGS=19]="FCNTL_ARGS",t[t.FCNTL_RET=20]="FCNTL_RET",t[t.TIME=21]="TIME",t[t.INODE=22]="INODE",t[t.DEV=23]="DEV",t[t.DSTRUCT=24]="DSTRUCT",t[t.EPFD=25]="EPFD",t[t.WD=26]="WD",t[t.PIPEFD=27]="PIPEFD",t[t.SOCKFD=28]="SOCKFD",t[t.BUFFER=29]="BUFFER",t[t.PKEY=30]="PKEY",t[t.IDSTRUCT=31]="IDSTRUCT",t[t.FUTEX=32]="FUTEX",t[t.TIMER=33]="TIMER",t[t.MQDES=34]="MQDES",t[t.PTRACE=35]="PTRACE"}(n||(n={})),function(t){t[t.INT32=0]="INT32",t[t.UINT32=1]="UINT32",t[t.LONG=2]="LONG",t[t.ULONG=3]="ULONG",t[t.SHORT=4]="SHORT",t[t.USHORT=5]="USHORT",t[t.FLOAT=6]="FLOAT",t[t.DOUBLE=7]="DOUBLE",t[t.CHAR=8]="CHAR",t[t.STRING=9]="STRING",t[t.CHAR_BUFFER=10]="CHAR_BUFFER",t[t.POINTER32=11]="POINTER32",t[t.POINTER64=12]="POINTER64",t[t.STRUCT=13]="STRUCT"}(_||(_={}));const E={P_ALL:[0],P_PID:[1],P_PGID:[2],P_PIDFD:[3]},i={F_OK:[0],X_OK:[1],W_OK:[2],R_OK:[4]},o={O_ACCMODE:[3],O_RDONLY:[0],O_WRONLY:[1],O_RDWR:[2],O_CREAT:[64],O_EXCL:[128],O_NOCTTY:[256],O_TRUNC:[512],O_APPEND:[1024],O_NONBLOCK:[2048],O_DSYNC:[4096],O_ASYNC:[8192],O_DIRECT:[16384],O_LARGEFILE:[32768],O_DIRECTORY:[65536],O_NOFOLLOW:[131072],O_NOATIME:[262144],O_CLOEXEC:[524288],O_PATH:[2097152],O_TMPFILE:[4210688]},r={IN_NONBLOCK:[o.O_NONBLOCK[0]],IN_CLOEXEC:[o.O_CLOEXEC[0]]},T={IN_ACCESS:[1],IN_MODIFY:[2],IN_ATTRIB:[4],IN_CLOSE_WRITE:[8],IN_CLOSE_NOWRITE:[16],IN_CLOSE:[24],IN_OPEN:[32],IN_MOVED_FROM:[64],IN_MOVED_TO:[128],IN_MOVE:[192],IN_CREATE:[256],IN_DELETE:[512],IN_DELETE_SELF:[1024],IN_MOVE_SELF:[2048],IN_ALL_EVENTS:[4095],IN_UNMOUNT:[8192],IN_Q_OVERFLOW:[16384],IN_IGNORED:[32768],IN_ONLYDIR:[16777216],IN_DONT_FOLLOW:[33554432],IN_EXCL_UNLINK:[67108864],IN_MASK_CREATE:[268435456],IN_MASK_ADD:[536870912],IN_ISDIR:[1073741824],IN_ONESHOT:[2147483648]},l={RLIMIT_CPU:[0],RLIMIT_FSIZE:[1],RLIMIT_DATA:[2],RLIMIT_STACK:[3],RLIMIT_CORE:[4],RLIMIT_RSS:[5],RLIMIT_NPROC:[6],RLIMIT_NOFILE:[7],RLIMIT_MEMLOCK:[8],RLIMIT_AS:[9],RLIMIT_LOCKS:[10],RLIMIT_SIGPENDING:[11],RLIMIT_MSGQUEUE:[12],RLIMIT_NICE:[13],RLIMIT_RTPRIO:[14],RLIMIT_RTTIME:[15],RLIM_NLIMITS:[16],RLIM_INFINITY:[0]},a={EPOLL_CTL_ADD:[1],EPOLL_CTL_DEL:[2],EPOLL_CTL_MOD:[3]},c={EPOLLIN:[1],EPOLLPRI:[2],EPOLLOUT:[4],EPOLLERR:[8],EPOLLHUP:[16],EPOLLNVAL:[32],EPOLLRDNORM:[64],EPOLLRDBAND:[128],EPOLLWRNORM:[256],EPOLLWRBAND:[512],EPOLLMSG:[1024],EPOLLRDHUP:[8192],EPOLLEXCLUSIVE:[1<<28],EPOLLWAKEUP:[1<<29],EPOLLONESHOT:[1<<30],EPOLLET:[1<<31]},I={SPLICE_F_MOVE:[1],SPLICE_F_NONBLOCK:[2],SPLICE_F_MORE:[4],SPLICE_F_GIFT:[8]},S={SYNC_FILE_RANGE_WAIT_BEFORE:[1],SYNC_FILE_RANGE_WRITE:[2],SYNC_FILE_RANGE_WAIT_AFTER:[4]},R={AF_UNSPEC:[0],AF_UNIX:[1],AF_LOCAL:[1],AF_INET:[2],AF_AX25:[3],AF_IPX:[4],AF_APPLETALK:[5],AF_NETROM:[6],AF_BRIDGE:[7],AF_ATMPVC:[8],AF_X25:[9],AF_INET6:[10],AF_ROSE:[11],AF_DECnet:[12],AF_NETBEUI:[13],AF_SECURITY:[14],AF_KEY:[15],AF_NETLINK:[16],AF_ROUTE:[16],AF_PACKET:[17],AF_ASH:[18],AF_ECONET:[19],AF_ATMSVC:[20],AF_RDS:[21],AF_SNA:[22],AF_IRDA:[23],AF_PPPOX:[24],AF_WANPIPE:[25],AF_LLC:[26],AF_CAN:[29],AF_TIPC:[30],AF_BLUETOOTH:[31],AF_IUCV:[32],AF_RXRPC:[33],AF_ISDN:[34],AF_PHONET:[35],AF_IEEE802154:[36],AF_CAIF:[37],AF_ALG:[38],AF_NFC:[39],AF_VSOCK:[40],AF_KCM:[41],AF_QIPCRTR:[42],AF_MAX:[43]},O={SOCK_STREAM:[1],SOCK_DGRAM:[2],SOCK_RAW:[3],SOCK_RDM:[4],SOCK_SEQPACKET:[5],SOCK_DCCP:[6],SOCK_PACKET:[10],SOCK_CLOEXEC:[o.O_CLOEXEC[0]],SOCK_NONBLOCK:[o.O_NONBLOCK[0]]},d={PF_UNSPEC:[R.AF_UNSPEC[0]],PF_UNIX:[R.AF_UNIX[0]],PF_LOCAL:[R.AF_LOCAL[0]],PF_INET:[R.AF_INET[0]],PF_AX25:[R.AF_AX25[0]],PF_IPX:[R.AF_IPX[0]],PF_APPLETALK:[R.AF_APPLETALK[0]],PF_NETROM:[R.AF_NETROM[0]],PF_BRIDGE:[R.AF_BRIDGE[0]],PF_ATMPVC:[R.AF_ATMPVC[0]],PF_X25:[R.AF_X25[0]],PF_INET6:[R.AF_INET6[0]],PF_ROSE:[R.AF_ROSE[0]],PF_DECnet:[R.AF_DECnet[0]],PF_NETBEUI:[R.AF_NETBEUI[0]],PF_SECURITY:[R.AF_SECURITY[0]],PF_KEY:[R.AF_KEY[0]],PF_NETLINK:[R.AF_NETLINK[0]],PF_ROUTE:[R.AF_ROUTE[0]],PF_PACKET:[R.AF_PACKET[0]],PF_ASH:[R.AF_ASH[0]],PF_ECONET:[R.AF_ECONET[0]],PF_ATMSVC:[R.AF_ATMSVC[0]],PF_RDS:[R.AF_RDS[0]],PF_SNA:[R.AF_SNA[0]],PF_IRDA:[R.AF_IRDA[0]],PF_PPPOX:[R.AF_PPPOX[0]],PF_WANPIPE:[R.AF_WANPIPE[0]],PF_LLC:[R.AF_LLC[0]],PF_CAN:[R.AF_CAN[0]],PF_TIPC:[R.AF_TIPC[0]],PF_BLUETOOTH:[R.AF_BLUETOOTH[0]],PF_IUCV:[R.AF_IUCV[0]],PF_RXRPC:[R.AF_RXRPC[0]],PF_ISDN:[R.AF_ISDN[0]],PF_PHONET:[R.AF_PHONET[0]],PF_IEEE802154:[R.AF_IEEE802154[0]],PF_CAIF:[R.AF_CAIF[0]],PF_ALG:[R.AF_ALG[0]],PF_NFC:[R.AF_NFC[0]],PF_VSOCK:[R.AF_VSOCK[0]],PF_KCM:[R.AF_KCM[0]],PF_QIPCRTR:[R.AF_QIPCRTR[0]],PF_MAX:[R.AF_MAX[0]]},A={PTRACE_TRACEME:[0],PTRACE_PEEKTEXT:[1],PTRACE_PEEKDATA:[2],PTRACE_PEEKUSR:[3],PTRACE_POKETEXT:[4],PTRACE_POKEDATA:[5],PTRACE_POKEUSR:[6],PTRACE_CONT:[7],PTRACE_KILL:[8],PTRACE_SINGLESTEP:[9],PTRACE_ATTACH:[16],PTRACE_DETACH:[17],PTRACE_SYSCALL:[24],PTRACE_SETOPTIONS:[16896],PTRACE_GETEVENTMSG:[16897],PTRACE_GETSIGINFO:[16898],PTRACE_SETSIGINFO:[16899],PTRACE_GETREGSET:[16900],PTRACE_SETREGSET:[16901],PTRACE_SEIZE:[16902],PTRACE_INTERRUPT:[16903],PTRACE_LISTEN:[16904],PTRACE_PEEKSIGINFO:[16905]},u={MADV_NORMAL:[0],MADV_RANDOM:[1],MADV_SEQUENTIAL:[2],MADV_WILLNEED:[3],MADV_DONTNEED:[4],MADV_FREE:[8],MADV_REMOVE:[9],MADV_DONTFORK:[10],MADV_DOFORK:[11],MADV_HWPOISON:[100],MADV_SOFT_OFFLINE:[101],MADV_MERGEABLE:[12],MADV_UNMERGEABLE:[13],MADV_HUGEPAGE:[14],MADV_NOHUGEPAGE:[15],MADV_DONTDUMP:[16],MADV_DODUMP:[17],MADV_WIPEONFORK:[18],MADV_KEEPONFORK:[19],MADV_COLD:[20],MADV_PAGEOUT:[21]},N={MLOCK_ONFAULT:[1]},C={OPT:{PR_CAP_AMBIENT:[47],PR_CAPBSET_READ:[23],PR_CAPBSET_DROP:[24],PR_SET_CHILD_SUBREAPER:[36],PR_GET_CHILD_SUBREAPER:[37],PR_SET_PDEATHSIG:[1],PR_GET_PDEATHSIG:[2],PR_GET_DUMPABLE:[3],PR_SET_DUMPABLE:[4],PR_GET_UNALIGN:[5],PR_SET_UNALIGN:[6],PR_GET_KEEPCAPS:[7],PR_SET_KEEPCAPS:[8],PR_GET_FPEMU:[9],PR_SET_FPEMU:[10],PR_GET_FPEXC:[11],PR_SET_FPEXC:[12],PR_GET_TIMING:[13],PR_SET_TIMING:[14],PR_SET_NAME:[15],PR_GET_NAME:[16],PR_GET_ENDIAN:[19],PR_SET_ENDIAN:[20],PR_GET_SECCOMP:[21],PR_SET_SECCOMP:[22],PR_GET_TSC:[25],PR_SET_TSC:[26],PR_GET_SECUREBITS:[27],PR_SET_SECUREBITS:[28],PR_SET_TIMERSLACK:[29],PR_GET_TIMERSLACK:[30],PR_SET_PTRACER:[1499557217],PR_SET_PTRACER_ANY:[0x10000000000000000],PR_SET_NO_NEW_PRIVS:[38],PR_GET_NO_NEW_PRIVS:[39],PR_GET_TID_ADDRESS:[40],PR_SET_THP_DISABLE:[41],PR_GET_THP_DISABLE:[42],PR_SET_IO_FLUSHER:[57],PR_GET_IO_FLUSHER:[58],PR_SET_SYSCALL_USER_DISPATCH:[59],PR_SET_VMA:[1398164801],PR_SET_VMA_ANON_NAME:[0],PR_SET_TAGGED_ADDR_CTRL:[55],PR_GET_TAGGED_ADDR_CTRL:[56],PR_SET_MM:[35],PR_SET_FP_MODE:[45],PR_GET_FP_MODE:[46],PR_GET_SPECULATION_CTRL:[52],PR_SET_SPECULATION_CTRL:[53]},DUMPABLE:{SUID_DUMP_DISABLE:[0],SUID_DUMP_USER:[1]},CAP:{PR_CAP_AMBIENT_IS_SET:[1],PR_CAP_AMBIENT_RAISE:[2],PR_CAP_AMBIENT_LOWER:[3],PR_CAP_AMBIENT_CLEAR_ALL:[4]},UNALIGN:{PR_UNALIGN_NOPRINT:[1],PR_UNALIGN_SIGBUS:[2]},FPEMU:{PR_FPEMU_NOPRINT:[1],PR_FPEMU_SIGFPE:[2]},FP:{PR_FP_EXC_SW_ENABLE:[128],PR_FP_EXC_DIV:[65536],PR_FP_EXC_OVF:[131072],PR_FP_EXC_UND:[262144],PR_FP_EXC_RES:[524288],PR_FP_EXC_INV:[1048576],PR_FP_EXC_DISABLED:[0],PR_FP_EXC_NONRECOV:[1],PR_FP_EXC_ASYNC:[2],PR_FP_EXC_PRECISE:[3],PR_FP_MODE_FR:[1],PR_FP_MODE_FRE:[2]},TIMING:{PR_TIMING_STATISTICAL:[0],PR_TIMING_TIMESTAMP:[1]},ENDIAN:{PR_ENDIAN_BIG:[0],PR_ENDIAN_LITTLE:[1],PR_ENDIAN_PPC_LITTLE:[2]},TSC:{PR_TSC_ENABLE:[1],PR_TSC_SIGSEGV:[2]},TASK:{PR_TASK_PERF_EVENTS_DISABLE:[31],PR_TASK_PERF_EVENTS_ENABLE:[32]},MCE:{PR_MCE_KILL:[33],PR_MCE_KILL_CLEAR:[0],PR_MCE_KILL_SET:[1],PR_MCE_KILL_LATE:[0],PR_MCE_KILL_EARLY:[1],PR_MCE_KILL_DEFAULT:[2],PR_MCE_KILL_GET:[34]},MM:{PR_SET_MM_START_CODE:[1],PR_SET_MM_END_CODE:[2],PR_SET_MM_START_DATA:[3],PR_SET_MM_END_DATA:[4],PR_SET_MM_START_STACK:[5],PR_SET_MM_START_BRK:[6],PR_SET_MM_BRK:[7],PR_SET_MM_ARG_START:[8],PR_SET_MM_ARG_END:[9],PR_SET_MM_ENV_START:[10],PR_SET_MM_ENV_END:[11],PR_SET_MM_AUXV:[12],PR_SET_MM_EXE_FILE:[13],PR_SET_MM_MAP:[14],PR_SET_MM_MAP_SIZE:[15]},MPX:{PR_MPX_ENABLE_MANAGEMENT:[43],PR_MPX_DISABLE_MANAGEMENT:[44]},SVE:{PR_SVE_SET_VL:[50],PR_SVE_SET_VL_ONEXEC:[1<<18],PR_SVE_GET_VL:[51],PR_SVE_VL_LEN_MASK:[65535],PR_SVE_VL_INHERIT:[1<<17]},SPEC:{PR_SPEC_STORE_BYPASS:[0],PR_SPEC_INDIRECT_BRANCH:[1],PR_SPEC_NOT_AFFECTED:[0],PR_SPEC_PRCTL:[1],PR_SPEC_ENABLE:[2],PR_SPEC_DISABLE:[4],PR_SPEC_FORCE_DISABLE:[8],PR_SPEC_DISABLE_NOEXEC:[16]},PAC:{PR_PAC_RESET_KEYS:[54],PR_PAC_APIAKEY:[1],PR_PAC_APIBKEY:[2],PR_PAC_APDAKEY:[4],PR_PAC_APDBKEY:[8],PR_PAC_APGAKEY:[16]},TAGGED:{PR_TAGGED_ADDR_ENABLE:[1]},MTE:{PR_MTE_TCF_SHIFT:[1],PR_MTE_TAG_SHIFT:[3],PR_MTE_TCF_NONE:[0],PR_MTE_TCF_SYNC:[2],PR_MTE_TCF_ASYNC:[4],PR_MTE_TCF_MASK:[6],PR_MTE_TAG_MASK:[524280]},SYS:{PR_SYS_DISPATCH_OFF:[0],PR_SYS_DISPATCH_ON:[1]},SYSCALL:{SYSCALL_DISPATCH_FILTER_ALLOW:[0],SYSCALL_DISPATCH_FILTER_BLOCK:[1]}},P={S_IFMT:[61440],S_IFSOCK:[49152],S_IFLNK:[40960],S_IFREG:[32768],S_IFBLK:[24576],S_IFDIR:[16384],S_IFCHR:[8192],S_IFIFO:[4096],S_ISUID:[2048],S_ISGID:[1024],S_ISVTX:[512],S_IRWXU:[448],S_IRUSR:[256],S_IWUSR:[128],S_IXUSR:[64],S_IRWXG:[56],S_IRGRP:[32],S_IWGRP:[16],S_IXGRP:[8],S_IRWXO:[7],S_IROTH:[4],S_IWOTH:[2],S_IXOTH:[1]},D={MS_ASYNC:[1],MS_INVALIDATE:[2],MS_SYNC:[4]},F={MCL_CURRENT:[1],MCL_FUTURE:[2],MCL_ONFAULT:[4]},L={MAP_SHARED:[1],MAP_PRIVATE:[2],MAP_SHARED_VALIDATE:[3],MAP_FIXED:[16],MAP_ANONYMOUS:[32],MAP_GROWSDOWN:[256],MAP_DENYWRITE:[2048],MAP_EXECUTABLE:[4096],MAP_LOCKED:[8192],MAP_NORESERVE:[16384]},p={CLOCK_REALTIME:[0],CLOCK_MONOTONIC:[1],CLOCK_PROCESS_CPUTIME_ID:[2],CLOCK_THREAD_CPUTIME_ID:[3],CLOCK_MONOTONIC_RAW:[4],CLOCK_REALTIME_COARSE:[5],CLOCK_MONOTONIC_COARSE:[6],CLOCK_BOOTTIME:[7],CLOCK_REALTIME_ALARM:[8],CLOCK_BOOTTIME_ALARM:[9],CLOCK_SGI_CYCLE:[10],CLOCK_TAI:[11]},f={MNT_FORCE:[1],MNT_DETACH:[2],MNT_EXPIRE:[4],UMOUNT_NOFOLLOW:[8]},g={PROT_READ:[1],PROT_WRITE:[2],PROT_EXEC:[4],PROT_SEM:[8],PROT_GROWSDOWN:[16777216],PROT_GROWSUP:[33554432]},m={ITIMER_REAL:[0],ITIMER_VIRTUAL:[1],TIMER_PROF:[2]},M={MFD_CLOEXEC:[1],MFD_ALLOW_SEALING:[2],MFD_HUGETLB:[4]},h={AT_FDCWD:[-100],AT_SYMLINK_NOFOLLOW:[256],AT_EACCESS:[512],AT_REMOVEDIR:[512],AT_SYMLINK_FOLLOW:[1024],AT_NO_AUTOMOUNT:[2048],AT_EMPTY_PATH:[4096],AT_STATX_SYNC_TYPE:[24576],AT_STATX_SYNC_AS_STAT:[0],AT_STATX_FORCE_SYNC:[8192],AT_STATX_DONT_SYNC:[16384],AT_RECURSIVE:[32768]},U={UNAME26:[131072],ADDR_NO_RANDOMIZE:[262144],FDPIC_FUNCPTRS:[524288],MMAP_PAGE_ZERO:[1048576],ADDR_COMPAT_LAYOUT:[2097152],READ_IMPLIES_EXEC:[4194304],ADDR_LIMIT_32BIT:[8388608],SHORT_INODE:[16777216],WHOLE_SECONDS:[33554432],STICKY_TIMEOUTS:[67108864],ADDR_LIMIT_3GB:[134217728]},G={F_DUPFD:[0],F_GETFD:[1],F_SETFD:[2],F_GETFL:[3],F_SETFL:[4],F_SETOWN:[8],F_GETOWN:[9],F_SETSIG:[10],F_GETSIG:[11],F_GETLK:[12],F_SETLK:[13],F_SETLKW:[14],F_SETOWN_EX:[15],F_GETOWN_EX:[16],F_GETOWNER_UIDS:[17]},y={FUTEX_WAIT:[0],FUTEX_WAKE:[1],FUTEX_FD:[2],FUTEX_REQUEUE:[3],FUTEX_CMP_REQUEUE:[4],FUTEX_WAKE_OP:[5],FUTEX_LOCK_PI:[6],FUTEX_UNLOCK_PI:[7],FUTEX_TRYLOCK_PI:[8],FUTEX_WAIT_BITSET:[9],FUTEX_WAKE_BITSET:[10],FUTEX_WAIT_REQUEUE_PI:[11],FUTEX_CMP_REQUEUE_PI:[12],FUTEX_LOCK_PI2:[13],FUTEX_PRIVATE_FLAG:[128],FUTEX_CLOCK_REALTIME:[256]};y.FUTEX_CMD_MASK=[~(y.FUTEX_PRIVATE_FLAG[0]|y.FUTEX_CLOCK_REALTIME[0])],y.FUTEX_WAIT_PRIVATE=[y.FUTEX_WAIT[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_WAKE_PRIVATE=[y.FUTEX_WAKE[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_REQUEUE_PRIVATE=[y.FUTEX_REQUEUE[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_CMP_REQUEUE_PRIVATE=[y.FUTEX_CMP_REQUEUE[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_WAKE_OP_PRIVATE=[y.FUTEX_WAKE_OP[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_LOCK_PI_PRIVATE=[y.FUTEX_LOCK_PI[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_LOCK_PI2_PRIVATE=[y.FUTEX_LOCK_PI2[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_UNLOCK_PI_PRIVATE=[y.FUTEX_UNLOCK_PI[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_TRYLOCK_PI_PRIVATE=[y.FUTEX_TRYLOCK_PI[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_WAIT_BITSET_PRIVATE=[y.FUTEX_WAIT_BITSET[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_WAKE_BITSET_PRIVATE=[y.FUTEX_WAKE_BITSET[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_WAIT_REQUEUE_PI_PRIVATE=[y.FUTEX_WAIT_REQUEUE_PI[0]|y.FUTEX_PRIVATE_FLAG[0]],y.FUTEX_CMP_REQUEUE_PI_PRIVATE=[y.FUTEX_CMP_REQUEUE_PI[0]|y.FUTEX_PRIVATE_FLAG[0]];const k={SIG_BLOCK:[0],SIG_UNBLOCK:[1],SIG_SETMASK:[2]},v={SIGHUP:[1],SIGINT:[2],SIGQUIT:[3],SIGILL:[4],SIGTRAP:[5],SIGABRT:[6],SIGIOT:[6],SIGBUS:[7],SIGFPE:[8],SIGKILL:[9],SIGUSR1:[10],SIGSEGV:[11],SIGUSR2:[12],SIGPIPE:[13],SIGALRM:[14],SIGTERM:[15],SIGSTKFLT:[16],SIGCHLD:[17],SIGCONT:[18],SIGSTOP:[19],SIGTSTP:[20],SIGTTIN:[21],SIGTTOU:[22],SIGURG:[23],SIGXCPU:[24],SIGXFSZ:[25],SIGVTALRM:[26],SIGPROF:[27],SIGWINCH:[28],SIGIO:[29],SIGPWR:[30],SIGSYS:[31],SIGUNUSED:[31],SIGRTMIN:[32],SIGRTMAX:[64],MINSIGSTKSZ:[2048],SIGSTKSZ:[8192]},K={MS_RDONLY:[1],MS_NOSUID:[2],MS_NODEV:[4],MS_NOEXEC:[8],MS_SYNCHRONOUS:[16],MS_REMOUNT:[32],MS_MANDLOCK:[64],MS_DIRSYNC:[128],MS_NOSYMFOLLOW:[256],MS_NOATIME:[1024],MS_NODIRATIME:[2048],MS_BIND:[4096],MS_MOVE:[8192],MS_REC:[16384],MS_SILENT:[32768],MS_POSIXACL:[65536],MS_UNBINDABLE:[1<<17],MS_PRIVATE:[1<<18],MS_SLAVE:[1<<19],MS_SHARED:[1<<20],MS_RELATIME:[1<<21],MS_KERNMOUNT:[1<<22],MS_I_VERSION:[1<<23],MS_STRICTATIME:[1<<24],MS_LAZYTIME:[1<<25]},B={MEMBARRIER_CMD_FLAG_CPU:[1]},X={MEMBARRIER_CMD_QUERY:[0],MEMBARRIER_CMD_GLOBAL:[1],MEMBARRIER_CMD_GLOBAL_EXPEDITED:[2],MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:[4],MEMBARRIER_CMD_PRIVATE_EXPEDITED:[8],MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:[16],MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE:[32],MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE:[64],MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ:[128],MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ:[256],MEMBARRIER_CMD_SHARED:[1]},V={NULL:[0],IOPRIO_WHO_PROCESS:[1],IOPRIO_WHO_PGRP:[2],IOPRIO_WHO_USER:[3]},H={SEEK_SET:[0],SEEK_CUR:[1],SEEK_END:[2],SEEK_DATA:[3],SEEK_HOLE:[4]},x={SCHED_NORMAL:[0],SCHED_FIFO:[1],SCHED_RR:[2],SCHED_BATCH:[3],SCHED_IDLE:[5],SCHED_DEADLINE:[6],SCHED_RESET_ON_FORK:[1073741824],SCHED_FLAG_RESET_ON_FORK:[1],SCHED_FLAG_RECLAIM:[2],SCHED_FLAG_DL_OVERRUN:[4],SCHED_FLAG_KEEP_POLICY:[8],SCHED_FLAG_KEEP_PARAMS:[16],SCHED_FLAG_UTIL_CLAMP_MIN:[32],SCHED_FLAG_UTIL_CLAMP_MAX:[64]},b={TFD_TIMER_ABSTIME:[1],TFD_TIMER_CANCEL_ON_SET:[2]},w={RWF_HIPRI:[1],RWF_DSYNC:[2],RWF_SYNC:[4],RWF_NOWAIT:[8],RWF_APPEND:[16]},Y={SECCOMP_SET_MODE_STRICT:[0],SECCOMP_SET_MODE_FILTER:[1],SECCOMP_GET_ACTION_AVAIL:[2],SECCOMP_GET_NOTIF_SIZES:[3]},W={LOCK_SH:[1],LOCK_EX:[2],LOCK_NB:[4],LOCK_UN:[8],LOCK_MAND:[32],LOCK_READ:[64],LOCK_WRITE:[128],LOCK_RW:[192]},Z={FALLOC_FL_KEEP_SIZE:[1],FALLOC_FL_PUNCH_HOLE:[2],FALLOC_FL_NO_HIDE_STALE:[4],FALLOC_FL_COLLAPSE_RANGE:[8],FALLOC_FL_ZERO_RANGE:[16],FALLOC_FL_INSERT_RANGE:[32],FALLOC_FL_UNSHARE_RANGE:[64]},$={PKEY_DISABLE_ACCESS:[1],PKEY_DISABLE_WRITE:[2]},Q={CLONE_NEWTIME:[128],CLONE_VM:[256],CLONE_FS:[512],CLONE_FILES:[1024],CLONE_SIGHAND:[2048],CLONE_PIDFD:[4096],CLONE_PTRACE:[8192],CLONE_VFORK:[16384],CLONE_PARENT:[32768],CLONE_THREAD:[65536],CLONE_NEWNS:[131072],CLONE_SYSVSEM:[262144],CLONE_SETTLS:[524288],CLONE_PARENT_SETTID:[1048576],CLONE_CHILD_CLEARTID:[2097152],CLONE_DETACHED:[4194304],CLONE_UNTRACED:[8388608],CLONE_CHILD_SETTID:[16777216],CLONE_NEWCGROUP:[33554432],CLONE_NEWUTS:[67108864],CLONE_NEWIPC:[134217728],CLONE_NEWUSER:[268435456],CLONE_NEWPID:[536870912],CLONE_NEWNET:[1073741824],CLONE_IO:[2147483648]},q={IPC_RMID:[0],IPC_SET:[1],IPC_STAT:[2],IPC_INFO:[3],IPC_CREAT:[512],IPC_EXCL:[1024],IPC_NOWAIT:[2048]},z={MSG_STAT:[11],MSG_INFO:[12],MSG_STAT_ANY:[13],MSG_NOERROR:[4096],MSG_EXCEPT:[8192],MSG_COPY:[16384]},j={K:E,FMODE:i,O_:o,INOTIFY_FLAGS:r,INOTIFY_MASK:T,RES:l,EPOLL_CTL:a,EPOLL_EV:c,SPLICE:I,SYNC_FILE:S,AF_:R,SOCK_:O,PF_:d,PTRACE_:A,MADV_:u,MLOCK:N,PR_:C,S_:P,MS_:D,MCL_:F,MAP_:L,CLOCK:p,MNT_:f,PROT_:g,ITIMER:m,MFD:M,AT_:h,PERSO:U,F_:G,FUTEX:y,SIG_FLAG:k,S:v,MOUNT:K,MEMBARRIER_FLAG:B,MEMBARRIER_CMD:X,IOPRIO_WHO:V,IOPRIO_CLASS:{IOPRIO_CLASS_NONE:[0],IOPRIO_CLASS_RT:[1],IOPRIO_CLASS_BE:[2],IOPRIO_CLASS_IDLE:[3]},SEEK_:H,SCHED_:x,TIMER:b,RWF:w,SECCOMP:Y,LOCK:W,FALLOC:Z,PKEY:$,CLONE:Q,RUSAGE:{RUSAGE_SELF:[0],RUSAGE_CHILDREN:[-1]},IPC:q,MSG:z},J={EPERM:[1,"Not super-user"],ENOENT:[2,"No such file or directory"],ESRCH:[3,"No such process"],EINTR:[4,"Interrupted system call"],EIO:[5,"I/O error"],ENXIO:[6,"No such device or address"],E2BIG:[7,"Arg list too long"],ENOEXEC:[8,"Exec format error"],EBADF:[9,"Bad file number"],ECHILD:[10,"No children"],EAGAIN:[11,"No more processes"],ENOMEM:[12,"Not enough core"],EACCES:[13,"Permission denied"],EFAULT:[14,"Bad address"],ENOTBLK:[15,"Block device required"],EBUSY:[16,"Mount device busy"],EEXIST:[17,"File exists"],EXDEV:[18,"Cross-device link"],ENODEV:[19,"No such device"],ENOTDIR:[20,"Not a directory"],EISDIR:[21,"Is a directory"],EINVAL:[22,"Invalid argument"],ENFILE:[23,"Too many open files in system"],EMFILE:[24,"Too many open files"],ENOTTY:[25,"Not a typewriter"],ETXTBSY:[26,"Text file busy"],EFBIG:[27,"File too large"],ENOSPC:[28,"No space left on device"],ESPIPE:[29,"Illegal seek"],EROFS:[30,"Read only file system"],EMLINK:[31,"Too many links"],EPIPE:[32,"Broken pipe"],EDOM:[33,"Math arg out of domain of func"],ERANGE:[34,"Math result not representable"],ENOMSG:[35,"No message of desired type"],EIDRM:[36,"Identifier removed"],ECHRNG:[37,"Channel number out of range"],EL2NSYNC:[38,"Level 2 not synchronized"],EL3HLT:[39,"Level 3 halted"],EL3RST:[40,"Level 3 reset"],ELNRNG:[41,"Link number out of range"],EUNATCH:[42,"Protocol driver not attached"],ENOCSI:[43,"No CSI structure available"],EL2HLT:[44,"Level 2 halted"],EDEADLK:[45,"Deadlock condition"],ENOLCK:[46,"No record locks available"],EBADE:[50,"Invalid exchange"],EBADR:[51,"Invalid request descriptor"],EXFULL:[52,"Exchange full"],ENOANO:[53,"No anode"],EBADRQC:[54,"Invalid request code"],EBADSLT:[55,"Invalid slot"],EDEADLOCK:[56,"File locking deadlock error"],EBFONT:[57,"Bad font file fmt"],ENOSTR:[60,"Device not a stream"],ENODATA:[61,"No data (for no delay io)"],ETIME:[62,"Timer expired"],ENOSR:[63,"Out of streams resources"],ENONET:[64,"Machine is not on the network"],ENOPKG:[65,"Package not installed"],EREMOTE:[66,"The object is remote"],ENOLINK:[67,"The link has been severed"],EADV:[68,"Advertise error"],ESRMNT:[69,"Srmount error"],ECOMM:[70,"Communication error on send"],EPROTO:[71,"Protocol error"],EMULTIHOP:[74,"Multihop attempted"],ELBIN:[75,"Inode is remote (not really error)"],EDOTDOT:[76,"Cross mount point (not really error)"],EBADMSG:[77,"Trying to read unreadable message"],EFTYPE:[79,"Inappropriate file type or format"],ENOTUNIQ:[80,"Given log. name not unique"],EBADFD:[81,"f.d. invalid for this operation"],EREMCHG:[82,"Remote address changed"],ELIBACC:[83,"Can't access a needed shared lib"],ELIBBAD:[84,"Accessing a corrupted shared lib"],ELIBSCN:[85,".lib section in a.out corrupted"],ELIBMAX:[86,"Attempting to link in too many libs"],ELIBEXEC:[87,"Attempting to exec a shared library"],ENOSYS:[88,"Function not implemented"],ENMFILE:[89,"No more files"],ENOTEMPTY:[90,"Directory not empty"],ENAMETOOLONG:[91,"File or path name too long"],ELOOP:[92,"Too many symbolic links"],EOPNOTSUPP:[95,"Operation not supported on transport endpoint"],EPFNOSUPPORT:[96,"Protocol family not supported"],ECONNRESET:[104,"Connection reset by peer"],ENOBUFS:[105,"No buffer space available"],EAFNOSUPPORT:[106,"Address family not supported by protocol family"],EPROTOTYPE:[107,"Protocol wrong type for socket"],ENOTSOCK:[108,"Socket operation on non-socket"],ENOPROTOOPT:[109,"Protocol not available"],ESHUTDOWN:[110,"Can't send after socket shutdown"],ECONNREFUSED:[111,"Connection refused"],EADDRINUSE:[112,"Address already in use"],ECONNABORTED:[113,"Connection aborted"],ENETUNREACH:[114,"Network is unreachable"],ENETDOWN:[115,"Network interface is not configured"],ETIMEDOUT:[116,"Connection timed out"],EHOSTDOWN:[117,"Host is down"],EHOSTUNREACH:[118,"Host is unreachable"],EINPROGRESS:[119,"Connection already in progress"],EALREADY:[120,"Socket already connected"],EDESTADDRREQ:[121,"Destination address required"],EMSGSIZE:[122,"Message too long"],EPROTONOSUPPORT:[123,"Unknown protocol"],ESOCKTNOSUPPORT:[124,"Socket type not supported"],EADDRNOTAVAIL:[125,"Address not available"],ENETRESET:[126,""],EISCONN:[127,"Socket is already connected"],ENOTCONN:[128,"Socket is not connected"],ETOOMANYREFS:[129,""],EPROCLIM:[130,""],EUSERS:[131,""],EDQUOT:[132,""],ESTALE:[133,""],ENOTSUP:[134,"Not supported"],ENOMEDIUM:[135,"No medium (in tape drive)"],ENOSHARE:[136,"No such host or network path"],ECASECLASH:[137,"Filename exists with different case"],EILSEQ:[138,""],EOVERFLOW:[139,"Value too large for defined data type"]};function tt(t,e){let n="";for(const _ in e)(t&e[_])==e[_]&&(n+=(n.length>0?" | ":"")+_);return n}function et(t,e){let n="";for(const _ in e)(t&e[_][0])==e[_][0]&&(n+=(n.length>0?" | ":"")+_);return n}const nt={};for(const t in J)J[t][2]=t,nt[t]=J[t][0];function _t(t,e){for(const n in e)if(t==e[n][0])return n;return t}const st={RANGE:function(t){try{const e=Process.getModuleByAddress(t);return`${t} (${null!=e?e.name:"null"})`}catch(e){return`${t}`}},LINKAT:function(t){return t==h.AT_SYMLINK_FOLLOW?"AT_SYMLINK_FOLLOW":0},MLOCK:function(t){return t==N.MLOCK_ONFAULT?"MLOCK_ONFAULT":0},PKEY_ACL:function(t){return _t(t,$)},RUSAGE:function(t){return _t(t,l)},RES:function(t){return _t(t,l)},RWF:function(t){return _t(t,w)},SECCOMP:function(t){return _t(t,Y)},SECCOMP_FLAGS:function(t,e){return t},MEMBARRIER_CMD:function(t){return _t(t,X)},MEMBARRIER_FLAG:function(t){return _t(t,B)},ACCESS_FLAGS:function(t){return et(t,{AT_SYMLINK_NOFOLLOW:[256],AT_NO_AUTOMOUNT:[2048],AT_EMPTY_PATH:[4096]})},EPOLL_EV:function(t){return et(t,c)},SPLICE:function(t){return et(t,I)},ITIMER:function(t){return et(t,m)},SYNC_FILE:function(t){return et(t,S)},EPOLL_CTL:function(t){return et(t,a)},EPOLL_FLAG:function(t){return et(t,{EPOLL_CLOEXEC:[o.O_CLOEXEC]})},PRCTL_OPT:function(t){return _t(t,C.OPT)},CLONE:function(t){return et(t,Q)},CLK:function(t){return _t(t,p)},SCHED:function(t){return _t(t,x)},SEEK:function(t){return _t(t,H)},INOTIFY_FLAGS:function(t){return _t(t,r)},INOTIFY_MASK:function(t){return _t(t,T)},FUTEX_OPE:function(t){return _t(t,y)},PTRACE:function(t){return _t(t,A)},NODMODE:function(t,e){return et(t,{S_IFREG:P.S_IFREG,S_IFCHR:P.S_IFCHR,S_IFBLK:P.S_IFBLK,S_IFIFO:P.S_IFIFO,S_IFSOCK:P.S_IFSOCK})},FLOCK:function(t){return _t(t,W)},FALLOC:function(t){return _t(t,Z)},IOPRIO_WHICH:function(t,e){return _t(t,V)},PERSO:function(t){return _t(t,U)},TYPEID:function(t){return _t(t,E)},XATTR:function(t){return["default","XATTR_CREATE","XATTR_REPLACE"][t]},UNLINK:function(t){return _t(t,{AT_REMOVEDIR:h.AT_REMOVEDIR})},PIPE_FLAG:t=>et(t,{O_NONBLOCK:o.O_NONBLOCK,O_CLOEXEC:o.O_CLOEXEC}),SOCKF:t=>et(t,{SOCK_NONBLOCK:o.O_NONBLOCK,SOCK_CLOEXEC:o.O_CLOEXEC}),SFD:t=>et(t,{SFD_NONBLOCK:o.O_NONBLOCK,SFD_CLOEXEC:o.O_CLOEXEC}),TFD:t=>et(t,{TFD_NONBLOCK:o.O_NONBLOCK,TFD_CLOEXEC:o.O_CLOEXEC}),TIMER:t=>et(t,b),FNCTL:function(t){return _t(t,G)},FCNTL_RET:function(t,e){return e===G.F_GETFL?st.O_MODE(t):t},FCNTL_ARGS:function(t,e){return e===G.F_SETFL?st.O_MODE(t):t},MSGF:function(t){return et(t,{IPC_NOWAIT:[q.IPC_NOWAIT],MSG_EXCEPT:[z.MSG_EXCEPT],MSG_NOERROR:[z.MSG_NOERROR]})},MSGCTL:function(t){return _t(t,{IPC_STAT:[q.IPC_NOWAIT],IPC_SET:[q.IPC_SET],IPC_RMID:[q.IPC_RMID],IPC_INFO:[q.IPC_INFO],MSG_INFO:[z.MSG_INFO],MSG_STAT:[z.MSG_STAT],MSG_STAT_ANY:[z.MSG_STAT_ANY]})},DEL_KEXT:function(t){return et(t,{O_NONBLOCK:o.O_NONBLOCK,O_TRUNC:o.O_TRUNC})},SIG_FLAGS:function(t){return _t(t,k)},SIG:function(t){return _t(t,v)},PF:function(t){return _t(t,d)},SOCK:function(t){return et(t,O)},MOUNT_FLAG:function(t){return et(t,K)},MADV:function(t){return _t(t,u)},MCL:function(t){return _t(t,F)},MAP:function(t){return et(t,L)},MS:function(t){return _t(t,D)},ERR:function(t){for(const e in J)if(t==J[e][0])return e+" /* "+J[e][1]+" */";return null},ATTR:function(t){return t},UMASK:function(t){return et(t,P)},O_FLAG:function(t){return tt(t,o)},O_MODE:function(t){return tt(t,o)},F_MODE:function(t){return et(t,i)},UMOUNT:function(t){return et(t,f)},MFD:function(t){return et(t,M)},MPROT:function(t){return 0==t?"PROT_NONE":tt(t,g)}};var Et;!function(t){t[t.CONSTANT=0]="CONSTANT",t[t.INOUT=1]="INOUT",t[t.OUTPUT=2]="OUTPUT"}(Et||(Et={}));class it{constructor(t=null){if(this.t=_.UINT32,this.n="",this.r=-1,this.l=-1,this.c=!1,null!=t)for(const e in t)this[e]=t[e]}static from(t){return new it(t)}static buffer(t,e=-1){return this}out(){return this.copy().update({v:Et.OUTPUT})}update(t){for(const e in t)this[e]=t[e];return this}copy(t=""){const e=new it(this);return""!=t&&(e.n=t),e}constant(t=!0){return this.c=t,this}asReturn(t=[]){const e=new it(this);return e.e=t,e}}class ot{constructor(t=[],e=!1){this.t=[],t.map((t=>{this.t.push(e?t:new it(t))}))}getStruct(){return this.t}}class rt{constructor(t){this.typeDefs={},this.opts=null,this.opts=t}static toScanPattern(t){return t.split("").map((t=>t.charCodeAt(0).toString(16))).join(" ")}static toByteArray(t,e=-1,n=0){const _=t.split("").map((t=>t.charCodeAt(0)));if(e>-1&&e>t.length)do{_.push(n)}while(_.length<e-1);return _}static printBackTrace(t){console.log(Thread.backtrace(t,Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n")+"\n")}static replaceHook(t,e){}static _pickThreadColor(){let t;do{t=Math.floor(20*Math.random())+31}while(rt._tcolors.indexOf(t)>-1);return rt._tcolors.push(t),t}getOptions(){return this.opts}newTypeDefinition(t){this.typeDefs={};for(const e in t)this.typeDefs[e]=new ot(t[e]);return this.typeDefs}}rt._tcolors=[0];class Tt{static deepCopy(t){const e={};for(let n in t)"object"==typeof t[n]&&null!==t[n]?e[n]=Tt.deepCopy(t[n]):e[n]=t[n];return e}}class lt{constructor(t){this.enabled=!1,this.flavor="dr",this.fname="drcov.dat",this.events=new Map,this.threads=[],this.onCoverage=()=>{},this.out=null,this.stops={count:1/0},this.interruptor=t}static from(t,e){const n=new lt(e);for(const e in t)switch(e){case"fname":n.fname=t.fname;break;case"enabled":n.enabled=t.enabled;break;case"format":n.flavor=t.flavor;break;case"stops":n.stops=t.stops;break;case"onCoverage":n.onCoverage=t.onCoverage}return n}initOutput(){null!=this.fname&&(this.out=new File(this.fname,"wb+"),console.log("[COVERAGE] Create file : "+this.fname))}emit(t){if(this.onCoverage(t),null!=this.out)try{this.out.write(t)}catch(t){}}castToNativePointer(t){return"string"==typeof t||"number"==typeof t?ptr(t):t}processStalkerEvent(t){if(t[lt.COMPILE_EVENT_TYPE_INDEX].toString()===lt.COMPILE_EVENT_TYPE.toString()){const e=this.castToNativePointer(t[lt.COMPILE_EVENT_START_INDEX]),n=this.castToNativePointer(t[lt.COMPILE_EVENT_END_INDEX]);this.events.set(e,n),this.isStopReached()&&this.stop()}}isStopReached(){return this.events.size>=this.stops.count}isStepReached(){return this.stops.step>-1&&this.events.size%this.stops.step==0}static convertString(t){const e=new ArrayBuffer(t.length),n=new Uint8Array(e);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return e}static padStart(t,e,n){const _=e-t.length,s=_%n.length,E=_-s/n.length;return n.repeat(E)+n.substring(0,s)+t}static write16le(t,e){let n;for(n=0;n<lt.BYTES_PER_U16;n+=1){const _=e>>lt.BITS_PER_BYTE*n&lt.BYTE_MASK;t.add(n).writeU8(_)}}static write32le(t,e){let n;for(n=0;n<lt.BYTES_PER_U32;n+=1){const _=e>>lt.BITS_PER_BYTE*n&lt.BYTE_MASK;t.add(n).writeU8(_)}}stop(){const t=Array.from(this.events.entries()).map((([t,e])=>this.convertEvent(t,e))).filter((t=>void 0!==t));this.emitHeader(t.length);for(const e of t)void 0!==e&&this.emitEvent(e);null!=this.out&&(this.out.close(),this.out=null,console.warn("[COVERAGE] Output file "+this.fname+" closed !"))}convertEvent(t,e){for(let n=0;n<this.interruptor.modules.length;n+=1){const _=this.interruptor.modules[n].base,s=this.interruptor.modules[n].size,E=_.add(s);if(t.compare(_)<0)continue;if(e.compare(E)>0)continue;const i=t.sub(_).toInt32(),o=e.sub(t).toInt32();if(!this.isInRange(_,t,e))return;return{length:o,moduleId:n,offset:i}}}emitEvent(t){const e=Memory.alloc(lt.EVENT_TOTAL_SIZE);lt.write32le(e.add(lt.EVENT_START_OFFSET),t.offset),lt.write16le(e.add(lt.EVENT_SIZE_OFFSET),t.length),lt.write16le(e.add(lt.EVENT_MODULE_OFFSET),t.moduleId);const n=ArrayBuffer.wrap(e,lt.EVENT_TOTAL_SIZE);this.emit(n)}emitHeader(t){this.emit(lt.convertString("DRCOV VERSION: 2\n")),this.emit(lt.convertString("DRCOV FLAVOR: frida\n")),this.emit(lt.convertString(`Module Table: version 2, count ${this.interruptor.modules.length}\n`)),this.emit(lt.convertString("Columns: id, base, end, entry, checksum, timestamp, path\n")),this.interruptor.modules.forEach(((t,e)=>{this.emitModule(e,t)})),this.emit(lt.convertString(`BB Table: ${t} bbs\n`))}emitModule(t,e){const n=lt.padStart(t.toString(),lt.COLUMN_WIDTH_MODULE_ID," ");let _=e.base.toString(16);_=lt.padStart(_,lt.COLUMN_WIDTH_MODULE_BASE,"0");let s=e.base.add(e.size).toString(16);s=lt.padStart(s,lt.COLUMN_WIDTH_MODULE_END,"0");const E=[n,_,s,"0".repeat(lt.COLUMN_WIDTH_MODULE_ENTRY),"0".repeat(lt.COLUMN_WIDTH_MODULE_CHECKSUM),"0".repeat(lt.COLUMN_WIDTH_MODULE_TIMESTAMP),e.path].join(", ");this.emit(lt.convertString(`${E}\n`))}isInRange(t,e,n){const _=this.interruptor.ranges.get(t);if(void 0===_)return!1;for(const t of _){if(n.compare(t.base)<0)continue;const _=t.base.add(t.size);if(!(e.compare(_)>=0))return!0}return!1}}lt.BITS_PER_BYTE=8,lt.BYTE_MASK=255,lt.BYTES_PER_U16=2,lt.BYTES_PER_U32=4,lt.COLUMN_WIDTH_MODULE_BASE=16,lt.COLUMN_WIDTH_MODULE_CHECKSUM=16,lt.COLUMN_WIDTH_MODULE_END=16,lt.COLUMN_WIDTH_MODULE_ENTRY=16,lt.COLUMN_WIDTH_MODULE_ID=3,lt.COLUMN_WIDTH_MODULE_TIMESTAMP=8,lt.COMPILE_EVENT_END_INDEX=2,lt.COMPILE_EVENT_START_INDEX=1,lt.COMPILE_EVENT_TYPE="compile",lt.COMPILE_EVENT_TYPE_INDEX=0,lt.EVENT_MODULE_OFFSET=6,lt.EVENT_SIZE_OFFSET=4,lt.EVENT_START_OFFSET=0,lt.EVENT_TOTAL_SIZE=8;class at{static getPolicyName(t){switch(t){case e.EXCLUDE_ANY:return"EXCLUDE_ANY";case e.INCLUDE_ANY:return"INCLUDE_ANY";case e.FILTER:return"FILTER"}return"OTHER"}static printModuleScopes(t){at.printScope(t,"modules")}static printSyscallScopes(t){at.printScope(t,"syscalls")}static printScope(t,n){if(null!=t&&null!=t.scope&&null!=n&&null!=t.scope[n]){const _=null!=t.scope[n]._policy?t.scope[n]._policy:e.INCLUDE_ANY;let s;null!=t.scope[n]&&_!==e.FILTER?(s=`[DEBUG][Scope=${n}][Policy=${at.getPolicyName(_)}] Scope `,_==e.EXCLUDE_ANY&&(s+="except :"+JSON.stringify(t.scope[n].include)),_==e.INCLUDE_ANY&&(s+="except :"+JSON.stringify(t.scope[n].exclude)),console.log(s)):console.log(`[DEBUG][Scope=${n}][Policy=${at.getPolicyName(_)}] Scoping not supported`)}}static dumpThreads(t=[]){Process.enumerateThreads().map((e=>{t.length>0&&-1==t.indexOf(e.state)||console.log(`Thread ID=${e.id} STATE=${e.state} : \n\t${Thread.backtrace(e.context,Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n\t")}\n`)}))}}let ct=0;class It{constructor(t,e=null,n=null){this._tids=[],this.uid=0,this.ranges=new Map,this.modules=[],this.pid=-1,this.tid=-1,this.followFork=!1,this.followThread=!1,this.debug={scope:!1,syscallLookup:!1,stalker:!1},this.types={},this.onStart=()=>{},this.hook={beforeStart:null,afterStart:null},this.output={_tcolor:0,flavor:"dxc",tid:!0,pid:!1,module:!0,dump_buff:!0,hide:null,indent:"",highlight:{syscalls:[]}},this._do_ft=null,this.uid=ct++,this.emulator=!1,this._do_ft=e,this.interrupts=null!=n?n:{syscalls:null},this.scope=t.scope,this.parseOptions(t)}parseOptions(t){for(const e in t)switch(e){case"types":this.types=t.types;break;case"emulator":this.emulator=t.emulator;break;case"pid":this.pid=t.pid;break;case"tid":this.tid=t.tid;break;case"coverage":this.coverage=lt.from(t.coverage,this);break;case"followFork":this.followFork="boolean"==typeof t.followFork&&t.followFork;break;case"followThread":this.followThread="boolean"==typeof t.followThread&&t.followThread,this.followThread||(this._do_ft=null);break;case"output":for(const e in t.output)this.output[e]=t.output[e];break;case"hook":this.hook=t.hook;break;case"debug":this.debug=t.debug;break;case"scope":this.scope=t.scope;break;case"onStart":this.onStart=t.onStart}}prepareScope(){this._filterModuleScope(),this._filterSyscallScope()}_setupDelegateFilters(t,e){}getModuleList(t,e=[],n=[]){if(null==t)return[];const _=0==e.length?Process.enumerateModules():e,s=n;return t.map((t=>{switch(typeof t){case"string":_.map((e=>{e.name==t&&s.push(e.name)}));break;case"function":_.map((e=>{t(e)&&s.push(e.name)}));break;case"object":Array.isArray(t)?t.map((t=>{s.concat(this.getModuleList(t,_,s))})):t instanceof RegExp&&_.map((e=>{null!=t.exec(e.name)&&s.push(e.name)}))}})),s}getSyscallList(e){const n=[];if(null==this.interrupts||null==this.interrupts.syscalls)return n;switch(typeof e){case"string":this.interrupts.syscalls.map((_=>{_[1]==e&&n.push(_[t.NUM])}));break;case"function":this.interrupts.syscalls.map((_=>{e(_)&&n.push(_[t.NUM])}));break;case"object":Array.isArray(e)?e.map((e=>{switch(typeof e){case"string":this.interrupts.syscalls.map((_=>{_[t.NAME]==e&&n.push(_[t.NUM])}));break;case"number":this.interrupts.syscalls.map((_=>{_[t.NUM]==e&&n.push(_[t.NUM])}));break;case"object":this.interrupts.syscalls.map((_=>{if(null!=e.exec(_[t.NAME])){const e=_[t.NUM];n.push(e)}}))}})):e instanceof RegExp?this.interrupts.syscalls.map((t=>{null!=e.exec(t[1])&&n.push(t[0])})):this.interrupts.syscalls.map((e=>{n.push(e[t.NUM])}));break;default:this.interrupts.syscalls.map((e=>{n.push(e[t.NUM])}))}return n}_filterSyscallScope(){let t=[];if(null!=this.scope.syscalls){const n=this.scope.syscalls;n.exclude?(n._policy=e.INCLUDE_ANY,null!=n.exclude&&n.exclude.map((e=>{t=t.concat(this.getSyscallList(e))})),n.exclude=t,n.isExcluded=e=>t.indexOf(e)>-1):(n._policy=e.EXCLUDE_ANY,null!=n.include&&n.include.map((e=>{t=t.concat(this.getSyscallList(e))})),n.include=t,n.isExcluded=e=>!(t.indexOf(e)>-1))}else this.scope.syscalls={exclude:[],_policy:e.INCLUDE_ANY,isExcluded:t=>!1}}_filterModuleScope(){let t,n=new ModuleMap;if(null!=this.scope.modules){const _=this.scope.modules;_.exclude?(_._policy=e.INCLUDE_ANY,null==_.exclude&&(_.exclude=[])):(_._policy=e.EXCLUDE_ANY,null==_.include&&(_.include=[])),_._policy==e.EXCLUDE_ANY?(_.include=t=this.getModuleList(null==_.include?[]:_.include),n=new ModuleMap((e=>-1!=t.indexOf(e.name)||(this.debug.scope&&console.log("[DEBUG] Excluded : "+JSON.stringify(e)),Stalker.exclude(e),!1)))):_._policy==e.INCLUDE_ANY&&(_.exclude=t=this.getModuleList(null==_.exclude?[]:_.exclude),n=new ModuleMap((e=>!(t.indexOf(e.name)>-1&&(this.debug.scope&&console.log("[DEBUG] Excluded : "+JSON.stringify(e)),Stalker.exclude(e),1)))))}else null==this.scope.modules&&(this.scope.modules={isExcluded:()=>!1}),this.scope.modules._policy=e.INCLUDE_ANY;this.modules=n.values();for(const t of this.modules){const e=t.enumerateRanges("--x");this.ranges.set(t.base,e)}}isTrackCoverage(){return null!=this.coverage&&this.coverage.enabled}processBbsCoverage(t){t.forEach((t=>{null!=this.coverage&&this.coverage.processStalkerEvent(t)}))}trace(t,e,n){return 1}startOnLoad(t,e=null){return new Error("Dynamic loading is not supported")}start(t=-1){null!=this.hook.beforeStart&&this.hook.beforeStart.apply(null,[{agent:this,tid:t}]),this.debug.scope&&(at.printModuleScopes(this),at.printSyscallScopes(this));let e=t>-1?t:null;if(null===e&&(e=this.tid>-1?this.tid:Process.getCurrentThreadId()),this._tids.indexOf(e)>-1)return void console.warn(this.output.indent+"[INTERRUPTOR][STARTING] Thread already tracked");console.warn(this.output.indent+"[INTERRUPTOR][STARTING] Tracing thread "+e+" ["+this._tids.join(",")+"]"),this._tids.push(e);const n={};console.log(this.output.indent+"[STARTING TRACE] UID="+this.uid+" Thread "+e);const _={events:{call:!0},transform:t=>{let e,_=0;const s=n;for(s.hookAfter=null,s.onLeave=null;null!==(e=t.next());)_=1,_=this.trace(t,e,s),-1!=_&&_>0&&t.keep()}};this.isTrackCoverage()&&(console.log("TRACK COVERAGE"),null==_.events&&(_.events={}),_.events.compile=!0,_.onReceive=t=>{this.processBbsCoverage(Stalker.parse(t,{annotate:!0,stringify:!1}))},null!=this.coverage&&this.coverage.initOutput()),Stalker.follow(e,_),null!==this._do_ft&&this._do_ft(this),null!=this.hook.afterStart&&this.hook.afterStart.apply(null,[{agent:this,tid:e,opts:_}])}printStats(t=[]){const e={handlers:0,err:0,atot:0,untyped:0,todo:0,struct:0},_={};let s="\t - ";e.handlers=t.length,t.map((t=>{let E=!0,i=null;null!=t[4]&&null!=t[4].e&&t[4].e.length>0&&e.err++;for(let e=0;e<t[3].length;e++){if(i=t[3][e],"string"==typeof i){E=!1;break}null!=i.l&&i.l==n.DSTRUCT&&(null==_[i.f]?_[i.f]=1:_[i.f]++)}e.untyped+=E?0:1,E||(e.untyped++,s+=` ${t[1]}, `)}));let E="\t - ";const i=[];for(const t in _)null==this.types[t]&&(i.push(t),E+=` ${t} (${_[t]}), `);console.log(`System calls : ${t.length}\nSupport primitive args parsing : ${t.length-e.untyped}/${t.length} \n ${s} \n\n \nSupport struct args implemented : ${i.length}/${Object.keys(_).length} \n ${E} \n\n\nSupport err code : ${e.err}/${t.length}\n        `)}}var St;It.FLAVOR_DXC="dxc",It.FLAVOR_STRACE="strace",function(t){t[t.GENERIC=1e3]="GENERIC"}(St||(St={}));class Rt extends Error{constructor(t,e,n=0,_=null){super(e),this.cmp=t,this.code=n,this.extra=_}getCode(){return this.code}getExtra(){return this.extra}toString(){return`[${this.cmp}] [#${null!=this.code?this.code:"<null>"} ${this.message}`}toObject(t=!1){return{cmp:this.cmp,code:this.code,msg:this.message,extra:t?this.extra:null}}}class Ot extends Rt{constructor(t,e=0,n=null){super("GLOBAL",t,e,n)}}Ot.ERR={INVALID_PID:St.GENERIC+101,INVALID_TID:St.GENERIC+102,UKNOW_SYSCALL:St.GENERIC+103},Ot.INVALID_PID=()=>new Ot(" PID is invalid ",Ot.ERR.INVALID_PID),Ot.INVALID_TID=()=>new Ot(" Thread ID is invalid ",Ot.ERR.INVALID_TID),Ot.UNKNOW_SYSCALL=t=>new Ot(" Syscall '"+t+"' not exists ",Ot.ERR.UKNOW_SYSCALL);const dt=J,At=st,ut=it.from,Nt={DFD:ut({t:_.INT32,n:"dfd",l:n.DFD}),OLD_DFD:ut({t:_.INT32,n:"old_dfd",l:n.DFD}),NEW_DFD:ut({t:_.INT32,n:"new_dfd",l:n.DFD}),FD:ut({t:_.UINT32,n:"fd",l:n.FD}),FD_SET:ut({t:_.POINTER64,n:"fd_set*",l:n.BUFFER,f:"FD"}),SOCKFD:ut({t:_.UINT32,n:"sockfd",l:n.SOCKFD}),EPFD:ut({t:_.UINT32,n:"epfd",l:n.EPFD}),AIO:ut({t:_.ULONG,n:"aio_context_t ctx_id"}),LFD:ut({t:_.ULONG,n:"fd",l:n.FD}),CONST_PATH:ut({t:_.STRING,n:"path",l:n.PATH,c:!0}),CONST_NAME:ut({t:_.STRING,n:"name",c:!0}),STR:ut({t:_.STRING,n:"char*"}),OLD_NAME:ut({t:_.CHAR_BUFFER,n:"old_name",c:!0}),NEW_NAME:ut({t:_.CHAR_BUFFER,n:"new_name",c:!0}),CONST_FNAME:ut({t:_.STRING,n:"filename",c:!0}),FNAME:ut({t:_.STRING,n:"filename"}),SIZE:ut({t:_.UINT32,n:"size",l:n.SIZE}),SSIZE:ut({t:_.INT32,n:"size",l:n.SIZE}),LEN:ut({t:_.ULONG,n:"length",l:n.SIZE}),OFFSET:ut({t:_.UINT32,n:"offset",l:n.SIZE}),LOFFSET:ut({t:_.ULONG,n:"offset",l:n.SIZE}),SIGNED_LEN:ut({t:_.LONG,n:"length",l:n.SIZE}),XATTR:ut({t:_.INT32,n:"flags",l:n.FLAG,f:At.XATTR}),XATTR_LIST:ut({t:_.CHAR_BUFFER,n:"list",l:n.XATTR_LIST,r:2}),PID:ut({t:_.INT32,n:"pid",l:n.PID}),SCHED_POLICY:ut({t:_.UINT32,n:"policy",l:n.FLAG,f:At.SCHED}),UID:ut({t:_.UINT32,n:"user",l:n.UID}),GID:ut({t:_.UINT32,n:"group",l:n.GID}),SIG:ut({t:_.INT32,n:"sig",l:n.FLAG,f:At.SIG}),TID:ut({t:_.INT32,n:"thread"}),CALLER_TID:ut({t:_.INT32,n:"caller_tid"}),PTR:ut({t:_.POINTER64,n:"value"}),START_ADDR:ut({t:_.POINTER64,n:"start_addr",l:n.VADDR,f:At.RANGE}),ADDR:ut({t:_.POINTER64,n:"addr",l:n.VADDR,f:At.RANGE}),CONST_PTR:ut({t:_.POINTER64,n:"value",c:!0}),MPROT:ut({t:_.INT32,n:"prot",l:n.FLAG,f:At.MPROT}),FMODE:ut({t:_.INT32,n:"mode",l:n.FLAG,f:At.F_MODE}),CLKID:ut({t:_.INT32,n:"clockid",l:n.FLAG,f:At.CLK}),WD:ut({t:_.INT32,n:"wd",l:n.WD}),OUTPUT_CHAR_BUFFER:ut({t:_.POINTER64,n:"buf",l:n.OUTPUT_BUFFER}),OUTPUT_BUFFER_LEN:ut({t:_.INT32,n:"size",l:n.SIZE}),IOPRIO_WHICH:ut({t:_.INT32,n:"which",l:n.FLAG,r:"x1",f:At.IOPRIO_WHICH}),ACCESS_FLAGS:ut({t:_.INT32,n:"flag",l:n.FLAG,f:At.ACCESS_FLAGS}),PKEY:ut({t:_.INT32,n:"pkey",l:n.PKEY}),RWF:ut({t:_.INT32,n:"rwf",l:n.FLAG,f:At.RWF}),SIGMASK:ut({t:_.POINTER64,n:"sigmask",l:n.BUFFER}),TIMER:ut({t:_.INT32,n:"which",l:n.FLAG,f:At.TIMER}),TIMER_PTR:ut({t:_.POINTER64,n:"timer_id*",l:n.TIMER}),PERSO:ut({t:_.UINT32,n:"personna",l:n.FLAG,f:At.PERSO}),RES:ut({t:_.UINT32,n:"resource",l:n.FLAG,f:At.RES}),OFLAGS:ut({t:_.UINT32,n:"flags",l:n.FLAG,f:At.O_MODE}),OMODE:ut({t:_.UINT32,n:"mode",l:n.FLAG,f:At.UMASK}),MQD:ut({t:_.INT32,n:"mod_t mqdes",l:n.MQDES}),MQID:ut({t:_.INT32,n:"msqid"}),SEMID:ut({t:_.INT32,n:"semid"}),EPEV:ut({t:_.POINTER64,n:"struct epoll_event *event",l:n.FLAG,f:At.EPOLL_EV}),COUNT:ut({t:_.UINT32,n:"count",l:n.SIZE}),POLLFD:ut({t:_.INT32,n:"*pollfd",l:n.DSTRUCT,f:"pollfd"}),KERNEL_TIMESPEC:ut({t:_.POINTER64,n:"*__kernel_timespec",l:n.DSTRUCT,f:"__kernel_timespec"}),CONST_KERNEL_TIMESPEC:ut({t:_.POINTER64,n:"*__kernel_timespec",l:n.DSTRUCT,f:"__kernel_timespec",c:!0}),IOVEC:ut({t:_.POINTER64,n:"*iovec",l:n.DSTRUCT,f:"iovec",c:!0}),IOCB:ut({t:_.POINTER64,n:"*iocb",l:n.DSTRUCT,f:"iocb"}),IOEV:ut({t:_.POINTER64,n:"*io_event",l:n.DSTRUCT,f:"io_event"}),SCHED_PARAM:ut({t:_.POINTER64,n:"*sched_param",l:n.DSTRUCT,f:"sched_param"}),SCHED_ATTR:ut({t:_.POINTER64,n:"*attr",l:n.DSTRUCT,f:"sched_attr"}),STATBUF:ut({t:_.POINTER64,n:"*statbuf",l:n.DSTRUCT,f:"__old_kernel_stat"}),ITIMERVAL:ut({t:_.POINTER64,n:"*itimerval",l:n.DSTRUCT,f:"itimerval"}),ITIMERSPEC:ut({t:_.POINTER64,n:"*itimerspec",l:n.DSTRUCT,f:"__kernel_itimerspec"}),SIGINFO:ut({t:_.POINTER64,n:"*siginfo",l:n.DSTRUCT,f:"siginfo"}),TMS:ut({t:_.POINTER64,n:"*tbuf",l:n.DSTRUCT,f:"tms"}),RUSAGE:ut({t:_.POINTER64,n:"*tbuf",l:n.DSTRUCT,f:"rusage"}),RLIMIT:ut({t:_.POINTER64,n:"**rlim",l:n.DSTRUCT,f:"rlimit"}),ROBUST_LH:ut({t:_.POINTER64,n:"*head",l:n.DSTRUCT,f:"robust_list_head"}),KEXSEG:ut({t:_.POINTER64,n:"*segments",l:n.DSTRUCT,f:"kexec_segment"}),SIGEVENT:ut({t:_.POINTER64,n:"*notification",l:n.DSTRUCT,f:"sigevent"}),SIGALSTACK:ut({t:_.POINTER64,n:"*uss",l:n.DSTRUCT,f:"sigaltstack"}),SIGACTION:ut({t:_.POINTER64,n:"*sigaction",l:n.DSTRUCT,f:"sigaction"}),TIMEVAL:ut({t:_.POINTER64,n:"*timeval",l:n.DSTRUCT,f:"timeval"}),TIMEZONE:ut({t:_.POINTER64,n:"*timezone",l:n.DSTRUCT,f:"timezone"}),KTIMEX:ut({t:_.POINTER64,n:"*txc",l:n.DSTRUCT,f:"__kernel_timex"}),SYSINFO:ut({t:_.POINTER64,n:"*sysinfo",l:n.DSTRUCT,f:"sysinfo"}),MQ_ATTR:ut({t:_.POINTER64,n:"*mq_attr",l:n.DSTRUCT,f:"mq_attr"}),MSGBUFF:ut({t:_.POINTER64,n:"*msgbuf",l:n.DSTRUCT,f:"msgbuf"}),CAP_USR_HEADER:ut({t:_.POINTER64,n:"*cap_header",l:n.DSTRUCT,f:"cap_user_header_t"}),CAP_USR_DATA:ut({t:_.POINTER64,n:"*cap_data",l:n.DSTRUCT,f:"cap_user_data_t"}),GPU_CACHE:ut({t:_.POINTER64,n:"*getcpu_cache",l:n.DSTRUCT,f:"getcpu_cache"}),SEMBUF:ut({t:_.POINTER64,n:"*sops",l:n.DSTRUCT,f:"sembuf"}),SOCKADDR:ut({t:_.POINTER64,n:"*addr",l:n.DSTRUCT,f:"sock_addr"}),FILE_HANDLE:ut({t:_.POINTER64,n:"*handle",l:n.DSTRUCT,f:"file_handle"}),MSGBUF:ut({t:_.POINTER64,n:"*msgb",l:n.DSTRUCT,f:"msgbuf"}),USR_MSGHDR:ut({t:_.POINTER64,n:"*msg",l:n.DSTRUCT,f:"user_msghdr"}),RLIMIT64:ut({t:_.POINTER64,n:"*rlim",l:n.DSTRUCT,f:"rlimit64"}),SHMIDDS:ut({t:_.POINTER64,n:"*buf",l:n.DSTRUCT,f:"shmid_ds"}),MMSGHDR:ut({t:_.POINTER64,n:"*msg",l:n.DSTRUCT,f:"mmsghdr"}),PERFEVTATTR:ut({t:_.POINTER64,n:"*attr_uptr",l:n.DSTRUCT,f:"perf_event_attr"}),STATX:ut({t:_.POINTER64,n:"*buffer",l:n.DSTRUCT,f:"statx"})};Nt.SIGMASK.update({f:Nt.SIG,len:16});const Ct={INFO:{t:_.INT32,e:[dt.EAGAIN,dt.EINVAL,dt.EPERM]},ACCESS:{t:_.INT32,e:[dt.EACCES,dt.EFAULT,dt.EINVAL,dt.ELOOP,dt.ENAMETOOLONG,dt.ENOENT,dt.ENOMEM,dt.ENOTDIR,dt.EOVERFLOW,dt.EIO,dt.ETXTBSY,dt.EROFS]},STAT:{t:_.INT32,e:[dt.EACCES,dt.EBADF,dt.EFAULT,dt.EINVAL,dt.ELOOP,dt.ENAMETOOLONG,dt.ENOENT,dt.ENOMEM,dt.ENOTDIR,dt.EOVERFLOW]},LINK:{t:_.INT32,e:[dt.EACCES,dt.EEXIST,dt.EFAULT,dt.EIO,dt.ELOOP,dt.EMLINK,dt.ENAMETOOLONG,dt.ENOENT,dt.ENOMEM,dt.ENOSPC,dt.ENOTDIR,dt.EPERM,dt.EROFS,dt.EXDEV]},OPEN:{t:_.INT32,e:[dt.EACCES,dt.EEXIST,dt.EFAULT,dt.ENODEV,dt.ENOENT,dt.ENOMEM,dt.ENOSPC,dt.ENOTDIR,dt.ENXIO,dt.EPERM,dt.EROFS,dt.ETXTBSY,dt.EFBIG,dt.EINTR,dt.EISDIR,dt.ELOOP,dt.ENAMETOOLONG,dt.EMFILE,dt.ENFILE,dt.ENOMEM]}};Ct.VADDR={t:_.INT32,n:"addr",l:n.VADDR,e:[dt.EACCES,dt.EAGAIN,dt.EBADF,dt.EINVAL,dt.ENFILE,dt.ENODEV,dt.ENOMEM,dt.ETXTBSY]},Ct.SET_XATTR={t:_.INT32,e:Ct.STAT.e.concat([dt.EDQUOT,dt.EEXIST,dt.ENODATA,dt.ENOSPC,dt.ENOTSUP,dt.EPERM,dt.ERANGE])},Ct.GET_XATTR={t:_.INT32,e:Ct.STAT.e.concat([dt.E2BIG,dt.ENODATA,dt.ENOTSUP,dt.ERANGE])},Ct.LS_XATTR={t:_.INT32,e:Ct.STAT.e.concat([dt.E2BIG,dt.ENOTSUP,dt.ERANGE])},Ct.RM_XATTR={t:_.INT32,e:Ct.STAT.e.concat([dt.ENOTSUP,dt.ERANGE])},Ct.OPENAT={t:_.INT32,n:"FD",l:n.FD,r:1,e:Ct.OPEN.e.concat([dt.EBADF,dt.ENOTDIR])},Ct.LINKAT={t:_.INT32,e:Ct.LINK.e.concat([dt.EBADF,dt.ENOTDIR])},Ct.IO={t:_.INT32,e:Ct.INFO.e.concat([dt.EBADF,dt.EFAULT,dt.ENOSYS])};const Pt=[[0,"read",0,[Nt.FD,Nt.OUTPUT_CHAR_BUFFER,Nt.COUNT],Ct.read],[1,"write",1,[Nt.FD,{t:_.CHAR_BUFFER,n:"buf",c:!0},Nt.COUNT],Ct.write],[2,"open",2,[Nt.CONST_FNAME,Nt.OFLAGS,Nt.OMODE],Ct.open],[3,"close",3,[Nt.FD],Ct.close],[4,"stat",4,[Nt.CONST_FNAME,Nt.STATBUF],Ct.stat],[5,"fstat",5,[Nt.FD,Nt.STATBUF],Ct.fstat],[6,"lstat",6,[Nt.CONST_FNAME,Nt.STATBUF],Ct.lstat],[7,"poll",7,["struct pollfd *ufds","unsigned int nfds","int timeout"],Ct.poll],[8,"lseek",8,[Nt.FD,Nt.OFFSET,{t:_.UINT32,n:"whence",l:n.FLAG,f:At.SEEK}],Ct.lseek],[9,"mmap",9,[Nt.START_ADDR,Nt.SIZE,Nt.MPROT,{t:_.INT32,n:"flags",l:n.FLAG,f:At.MAP},{t:_.UINT32,n:"fd",l:n.MFD},Nt.OFFSET],Ct.mmap],[10,"mprotect",10,[Nt.ADDR,Nt.SIZE,Nt.MPROT],Ct.mprotect],[11,"munmap",11,[Nt.ADDR,Nt.SIZE],Ct.munmap],[12,"brk",12,[Nt.ADDR.copy("*end_data_seg")],Ct.brk],[13,"rt_sigaction",13,[Nt.SIG,Nt.SIGACTION.copy().constant(),Nt.SIGACTION,Nt.SIZE],Ct.rt_sigaction],[14,"rt_sigprocmask",14,[{t:_.INT32,n:"how",l:n.FLAG,f:At.SIG_FLAGS},"sigset_t *set","sigset_t *oset","size_t sigsetsize"],Ct.rt_sigprocmask],[15,"rt_sigreturn",15,[],Ct.rt_sigreturn],[16,"ioctl",16,[Nt.FD,{t:_.UINT32,n:"cmd"},{t:_.ULONG,n:"arg"}],Ct.ioctl],[17,"pread64",17,[Nt.FD,Nt.OUTPUT_CHAR_BUFFER,Nt.COUNT,"loff_t pos"],Ct.pread64],[18,"pwrite64",18,[Nt.FD,"const char *buf",Nt.SIZE,Nt.OFFSET],Ct.pwrite64],[19,"readv",19,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt")],Ct.readv],[20,"writev",20,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt")],Ct.writev],[21,"access",21,[Nt.CONST_FNAME,"int mode"],Ct.access],[22,"pipe",22,[{t:_.POINTER64,n:"pipefd",l:n.PIPEFD}],Ct.pipe],[23,"select",23,["int n","fd_set *inp","fd_set *outp","fd_set *exp","struct timeval *tvp"],Ct.select],[24,"sched_yield",24,[],Ct.sched_yield],[25,"mremap",25,[Nt.ADDR,Nt.LEN.copy("old_len"),Nt.LEN.copy("new_len"),"unsigned long flags",Nt.START_ADDR.copy("new_addr")],Ct.mremap],[26,"msync",26,[Nt.ADDR,Nt.SIZE,{t:_.INT32,n:"flags",l:n.FLAG,f:At.MS}],Ct.msync],[27,"mincore",27,[Nt.ADDR,Nt.SIZE,"unsigned char * vec"],Ct.mincore],[28,"madvise",28,[Nt.ADDR,Nt.SIZE,{t:_.INT32,n:"behavior",l:n.FLAG,f:At.MADV}],Ct.madvise],[29,"shmget",29,["key_t key",Nt.SIZE,"int flag"],Ct.shmget],[30,"shmat",30,["int shmid","char *shmaddr","int shmflg"],Ct.shmat],[31,"shmctl",31,["int shmid","int cmd",Nt.SHMIDDS],Ct.shmctl],[32,"dup",32,[Nt.FD],{t:_.UINT32,n:"fd",l:n.FD,e:[dt.EBADF,dt.EBUSY,dt.EINTR,dt.EINVAL,dt.EMFILE]}],[33,"dup2",33,[Nt.FD.copy("oldfd"),Nt.FD.copy("newfd")],Ct.dup2],[34,"pause",34,[],Ct.pause],[35,"nanosleep",35,[Nt.KERNEL_TIMESPEC.copy("*rqtp"),Nt.KERNEL_TIMESPEC.copy("*rmtp")],Ct.nanosleep],[36,"getitimer",36,[Nt.TIMER,Nt.ITIMERVAL],Ct.getitimer],[37,"alarm",37,[{t:_.UINT32,n:"seconds"}],Ct.alarm],[38,"setitimer",38,[Nt.TIMER,Nt.ITIMERVAL,Nt.ITIMERVAL.copy("*ovalue")],Ct.setitimer],[39,"getpid",39,[],Ct.getpid],[40,"sendfile",40,[Nt.FD.copy("out_fd"),Nt.FD.copy("in_fd"),Nt.OFFSET,Nt.SIZE],Ct.sendfile],[41,"socket",41,[{t:_.INT32,n:"domain",l:n.FLAG,f:At.PF},{t:_.INT32,n:"type",l:n.FLAG,f:At.SOCK},"int"],Ct.socket],[42,"connect",42,[Nt.FD,Nt.SOCKADDR,"int"],Ct.connect],[43,"accept",43,[Nt.SOCKFD,Nt.SOCKADDR,"int *"],Ct.accept],[44,"sendto",44,[Nt.SOCKFD,"void *",Nt.SIZE,"unsigned",Nt.SOCKADDR,"int"],Ct.sendto],[45,"recvfrom",45,[Nt.SOCKFD,"void *",Nt.SIZE,"unsigned",Nt.SOCKADDR,"int *"],Ct.recvfrom],[46,"sendmsg",46,[Nt.SOCKFD,Nt.USR_MSGHDR,"unsigned flags"],Ct.sendmsg],[47,"recvmsg",47,[Nt.SOCKFD,Nt.USR_MSGHDR,"unsigned flags"],Ct.recvmsg],[48,"shutdown",48,[Nt.SOCKFD,"int"],Ct.shutdown],[49,"bind",49,[Nt.SOCKFD,Nt.SOCKADDR,"int"],Ct.bind],[50,"listen",50,[Nt.SOCKFD,Nt.LEN],Ct.listen],[51,"getsockname",51,[Nt.SOCKFD,Nt.SOCKADDR,"int *"],Ct.getsockname],[52,"getpeername",52,[Nt.SOCKFD,Nt.SOCKADDR,"int *"],Ct.getpeername],[53,"socketpair",53,["int","int","int","int *"],Ct.socketpair],[54,"setsockopt",54,[Nt.SOCKFD,"int level","int optname","char *optval","int optlen"],Ct.setsockopt],[55,"getsockopt",55,[Nt.SOCKFD,"int level","int optname","char *optval","int *optlen"],Ct.getsockopt],[56,"clone",56,["unsigned long","unsigned long","int *","int *","unsigned long"],Ct.clone],[57,"fork",57,[],Ct.fork],[58,"vfork",58,[],Ct.vfork],[59,"execve",59,[{t:_.STRING,n:"filename",c:!0},{t:_.STRING,n:"*argv",c:!0},{t:_.STRING,n:"*envp",c:!0}],Ct.execve],[60,"exit",60,[{t:_.INT32,n:"status"}],Ct.exit],[61,"wait4",61,[Nt.PID,"int *stat_addr","int options","struct rusage *ru"],Ct.wait4],[62,"kill",62,[Nt.PID,"int sig"],Ct.kill],[63,"uname",63,[{t:_.POINTER64,n:" *utsname"}],Ct.uname],[64,"semget",64,["key_t key",Nt.SIZE.copy("nsems"),"int semflg"],Ct.semget],[65,"semop",65,[Nt.SEMID,Nt.SEMBUF,"unsigned nsops"],Ct.semop],[66,"semctl",66,[Nt.SEMID,"int semnum","int cmd","unsigned long arg"],Ct.semctl],[67,"shmdt",67,["char *shmaddr"],Ct.shmdt],[68,"msgget",68,["key_t key","int msgflg"],Ct.msgget],[69,"msgsnd",69,[Nt.MQID,Nt.MSGBUF,Nt.SIZE.copy("msgsz"),{t:_.INT32,n:"msgflg",l:n.FLAG,f:At.MSGF}],Ct.msgsnd],[70,"msgrcv",70,[Nt.MQID,Nt.MSGBUF,Nt.SIZE.copy("msgsz"),"long msgtyp",{t:_.INT32,n:"msgflg",l:n.FLAG,f:At.MSGF}],Ct.msgrcv],[71,"msgctl",71,[Nt.MQID,{t:_.INT32,n:"cmd",l:n.FLAG,f:At.MSGCTL},{t:_.POINTER64,n:"msqid_ds",l:n.DSTRUCT,f:"msqid_ds"}],Ct.msgctl],[72,"fcntl",72,[Nt.FD,{t:_.UINT32,n:"cmd",l:n.FLAG,f:At.FNCTL},{t:_.ULONG,n:"args",l:n.FLAG,r:"x1",f:At.FCNTL_ARGS}],Ct.fcntl],[73,"flock",73,[Nt.FD,{t:_.UINT32,n:"ope",l:n.FLAG,f:At.FLOCK}],Ct.flock],[74,"fsync",74,[Nt.FD],Ct.fsync],[75,"fdatasync",75,[Nt.FD],Ct.fdatasync],[76,"truncate",76,[Nt.CONST_PATH,Nt.SIGNED_LEN],Ct.truncate],[77,"ftruncate",77,[Nt.FD,Nt.LEN],Ct.ftruncate],[78,"getdents",78,[{t:_.UINT32,n:"fd",l:n.FD},{t:_.POINTER64,n:"linux_dirent64 *dirent",l:n.DSTRUCT,f:"linux_dirent64"},Nt.SIZE],Ct.getdents],[79,"getcwd",79,[Nt.OUTPUT_CHAR_BUFFER,Nt.SIZE],Ct.getcwd],[80,"chdir",80,[Nt.CONST_FNAME],Ct.chdir],[81,"fchdir",81,[Nt.FD],Ct.fchdir],[82,"rename",82,[Nt.CONST_FNAME.copy("old_name"),Nt.CONST_FNAME.copy("new_name")],Ct.rename],[83,"mkdir",83,[Nt.CONST_FNAME,Nt.XATTR.copy("umode")],Ct.mkdir],[84,"rmdir",84,[Nt.CONST_FNAME],Ct.rmdir],[85,"creat",85,[Nt.CONST_FNAME,"umode_t mode"],Ct.creat],[86,"link",86,[Nt.CONST_FNAME.copy("old_name"),Nt.CONST_FNAME.copy("new_name")],Ct.link],[87,"unlink",87,[Nt.CONST_FNAME],Ct.unlink],[88,"symlink",88,[Nt.CONST_FNAME.copy("old_name"),Nt.CONST_FNAME.copy("new_name")],Ct.symlink],[89,"readlink",89,[Nt.CONST_PATH,Nt.OUTPUT_CHAR_BUFFER,"int bufsiz"],Ct.readlink],[90,"chmod",90,[Nt.CONST_FNAME,{t:_.USHORT,n:"mode",l:n.ATTRMODE,f:At.ATTR}],Ct.chmod],[91,"fchmod",91,[Nt.FD,{t:_.USHORT,n:"mode",l:n.ATTRMODE,f:At.ATTR}],Ct.fchmod],[92,"chown",92,[Nt.CONST_FNAME,Nt.UID,Nt.GID],Ct.chown],[93,"fchown",93,[Nt.FD,Nt.UID,Nt.GID],Ct.fchown],[94,"lchown",94,[Nt.CONST_FNAME,Nt.UID,Nt.GID],Ct.lchown],[95,"umask",95,["int mask"],Ct.umask],[96,"gettimeofday",96,["struct timeval *tv","struct timezone *tz"],Ct.gettimeofday],[97,"getrlimit",97,["unsigned int resource","struct rlimit *rlim"],Ct.getrlimit],[98,"getrusage",98,["int who","struct rusage *ru"],Ct.getrusage],[99,"sysinfo",99,["struct sysinfo *info"],Ct.sysinfo],[100,"times",100,["struct tms *tbuf"],Ct.times],[101,"ptrace",101,[{t:_.LONG,n:"request",l:n.FLAG,f:At.PTRACE},{t:_.LONG,n:"pid",l:n.PID},Nt.ADDR,"unsigned long data"],Ct.ptrace],[102,"getuid",102,[],Ct.getuid],[103,"syslog",103,["int type",Nt.OUTPUT_CHAR_BUFFER,"int len"],Ct.syslog],[104,"getgid",104,[],Ct.getgid],[105,"setuid",105,[Nt.UID],Ct.setuid],[106,"setgid",106,[Nt.GID],Ct.setgid],[107,"geteuid",107,[],Ct.geteuid],[108,"getegid",108,[],Ct.getegid],[109,"setpgid",109,[Nt.PID,"pid_t pgid"],Ct.setpgid],[110,"getppid",110,[],Ct.getppid],[111,"getpgrp",111,[],Ct.getpgrp],[112,"setsid",112,[],Ct.setsid],[113,"setreuid",113,["uid_t ruid","uid_t euid"],Ct.setreuid],[114,"setregid",114,["gid_t rgid","gid_t egid"],Ct.setregid],[115,"getgroups",115,["int gidsetsize","gid_t *grouplist"],Ct.getgroups],[116,"setgroups",116,["int gidsetsize","gid_t *grouplist"],Ct.setgroups],[117,"setresuid",117,["uid_t ruid","uid_t euid","uid_t suid"],Ct.setresuid],[118,"getresuid",118,["uid_t *ruid","uid_t *euid","uid_t *suid"],Ct.getresuid],[119,"setresgid",119,["gid_t rgid","gid_t egid","gid_t sgid"],Ct.setresgid],[120,"getresgid",120,["gid_t *rgid","gid_t *egid","gid_t *sgid"],Ct.getresgid],[121,"getpgid",121,[Nt.PID],Ct.getpgid],[122,"setfsuid",122,[Nt.UID],Ct.setfsuid],[123,"setfsgid",123,[Nt.GID],Ct.setfsgid],[124,"getsid",124,[Nt.PID],Ct.getsid],[125,"capget",125,[Nt.CAP_USR_HEADER,Nt.CAP_USR_DATA],Ct.capget],[126,"capset",126,[Nt.CAP_USR_HEADER,Nt.CAP_USR_DATA.copy().constant()],Ct.capset],[127,"rt_sigpending",127,["sigset_t *set",Nt.SIZE.copy("sigsetsize")],Ct.rt_sigpending],[128,"rt_sigtimedwait",128,["const sigset_t *uthese",Nt.SIGINFO,Nt.CONST_KERNEL_TIMESPEC.copy("*uts"),"size_t sigsetsize"],Ct.rt_sigtimedwait],[129,"rt_sigqueueinfo",129,[Nt.PID,Nt.SIG,Nt.SIGINFO],Ct.rt_sigqueueinfo],[130,"rt_sigsuspend",130,["sigset_t *unewset",Nt.SIZE.copy("sigsetsize")],Ct.rt_sigsuspend],[131,"sigaltstack",131,["const struct sigaltstack *uss","struct sigaltstack *uoss"],Ct.sigaltstack],[132,"utime",132,[Nt.FNAME,"struct utimbuf *times"],Ct.utime],[133,"mknod",133,[Nt.CONST_FNAME,"umode_t mode","unsigned dev"],Ct.mknod],[134,"uselib",134,["const char *library"],Ct.uselib],[135,"personality",135,["unsigned int personality"],Ct.personality],[136,"ustat",136,["unsigned dev","struct ustat *ubuf"],Ct.ustat],[137,"statfs",137,[Nt.CONST_PATH,"struct statfs *buf"],Ct.statfs],[138,"fstatfs",138,[Nt.FD,"struct statfs *buf"],Ct.fstatfs],[139,"sysfs",139,["int option","unsigned long arg1","unsigned long arg2",""],Ct.sysfs],[140,"getpriority",140,["int which","int who"],Ct.getpriority],[141,"setpriority",141,["int which","int who","int niceval"],Ct.setpriority],[142,"sched_setparam",142,[Nt.PID,"struct sched_param *param"],Ct.sched_setparam],[143,"sched_getparam",143,[Nt.PID,"struct sched_param *param"],Ct.sched_getparam],[144,"sched_setscheduler",144,[Nt.PID,"int policy","struct sched_param *param"],Ct.sched_setscheduler],[145,"sched_getscheduler",145,[Nt.PID],Ct.sched_getscheduler],[146,"sched_get_priority_max",146,["int policy"],Ct.sched_get_priority_max],[147,"sched_get_priority_min",147,["int policy"],Ct.sched_get_priority_min],[148,"sched_rr_get_interval",148,[Nt.PID,"struct __kernel_timespec *interval"],Ct.sched_rr_get_interval],[149,"mlock",149,[Nt.ADDR,Nt.SIZE],Ct.mlock],[150,"munlock",150,[Nt.ADDR,Nt.SIZE],Ct.munlock],[151,"mlockall",151,["int flags"],Ct.mlockall],[152,"munlockall",152,[],Ct.munlockall],[153,"vhangup",153,[],Ct.vhangup],[154,"modify_ldt",154,[],Ct.modify_ldt],[155,"pivot_root",155,["const char *new_root","const char *put_old"],Ct.pivot_root],[156,"_sysctl",156,[],Ct._sysctl],[157,"prctl",157,["int option","unsigned long arg2","unsigned long arg3","unsigned long arg4","unsigned long arg5",""],Ct.prctl],[158,"arch_prctl",158,[],Ct.arch_prctl],[159,"adjtimex",159,["struct __kernel_timex *txc_p"],Ct.adjtimex],[160,"setrlimit",160,["unsigned int resource","struct rlimit *rlim"],Ct.setrlimit],[161,"chroot",161,[Nt.CONST_FNAME],Ct.chroot],[162,"sync",162,[],Ct.sync],[163,"acct",163,[Nt.CONST_NAME],Ct.acct],[164,"settimeofday",164,["struct timeval *tv","struct timezone *tz"],Ct.settimeofday],[165,"mount",165,["char *dev_name","char *dir_name","char *type","unsigned long flags","void *data"],Ct.mount],[166,"umount2",166,[],Ct.umount2],[167,"swapon",167,[Nt.CONST_FNAME,"int swap_flags"],Ct.swapon],[168,"swapoff",168,[Nt.CONST_FNAME],Ct.swapoff],[169,"reboot",169,["int magic1","int magic2","unsigned int cmd","void *arg"],Ct.reboot],[170,"sethostname",170,["char *name","int len"],Ct.sethostname],[171,"setdomainname",171,["char *name","int len"],Ct.setdomainname],[172,"iopl",172,[],Ct.iopl],[173,"ioperm",173,["unsigned long from","unsigned long num","int on"],Ct.ioperm],[174,"create_module",174,[],Ct.create_module],[175,"init_module",175,["void *umod",Nt.LEN,"const char *uargs"],Ct.init_module],[176,"delete_module",176,["const char *name_user","unsigned int flags"],Ct.delete_module],[177,"get_kernel_syms",177,[],Ct.get_kernel_syms],[178,"query_module",178,[],Ct.query_module],[179,"quotactl",179,["unsigned int cmd","const char *special","qid_t id","void *addr"],Ct.quotactl],[180,"nfsservctl",180,[],Ct.nfsservctl],[181,"getpmsg",181,[],Ct.getpmsg],[182,"putpmsg",182,[],Ct.putpmsg],[183,"afs_syscall",183,[],Ct.afs_syscall],[184,"tuxcall",184,[],Ct.tuxcall],[185,"security",185,[],Ct.security],[186,"gettid",186,[],Ct.gettid],[187,"readahead",187,[Nt.FD,"loff_t offset",Nt.COUNT],Ct.readahead],[188,"setxattr",188,[Nt.CONST_PATH,Nt.CONST_NAME,"const void *value",Nt.SIZE,"int flags"],Ct.setxattr],[189,"lsetxattr",189,[Nt.CONST_PATH,Nt.CONST_NAME,"const void *value",Nt.SIZE,"int flags"],Ct.lsetxattr],[190,"fsetxattr",190,[Nt.FD,Nt.CONST_NAME,"const void *value",Nt.SIZE,"int flags"],Ct.fsetxattr],[191,"getxattr",191,[Nt.CONST_PATH,Nt.CONST_NAME,Nt.PTR,Nt.SIZE],Ct.getxattr],[192,"lgetxattr",192,[Nt.CONST_PATH,Nt.CONST_NAME,Nt.PTR,Nt.SIZE],Ct.lgetxattr],[193,"fgetxattr",193,[Nt.FD,Nt.CONST_NAME,Nt.PTR,Nt.SIZE],Ct.fgetxattr],[194,"listxattr",194,[Nt.CONST_PATH,"char *list",Nt.SIZE],Ct.listxattr],[195,"llistxattr",195,[Nt.CONST_PATH,"char *list",Nt.SIZE],Ct.llistxattr],[196,"flistxattr",196,[Nt.FD,"char *list",Nt.SIZE],Ct.flistxattr],[197,"removexattr",197,[Nt.CONST_PATH,Nt.CONST_NAME],Ct.removexattr],[198,"lremovexattr",198,[Nt.CONST_PATH,Nt.CONST_NAME],Ct.lremovexattr],[199,"fremovexattr",199,[Nt.FD,Nt.CONST_NAME],Ct.fremovexattr],[200,"tkill",200,[Nt.PID,"int sig"],Ct.tkill],[201,"time",201,["time_t *tloc"],Ct.time],[202,"futex",202,["u32 *uaddr","int op","u32 val","struct __kernel_timespec *utime","u32 *uaddr2","u32 val3"],Ct.futex],[203,"sched_setaffinity",203,[Nt.PID,"unsigned int len","unsigned long *user_mask_ptr"],Ct.sched_setaffinity],[204,"sched_getaffinity",204,[Nt.PID,"unsigned int len","unsigned long *user_mask_ptr"],Ct.sched_getaffinity],[205,"set_thread_area",205,[],Ct.set_thread_area],[206,"io_setup",206,[{t:_.UINT32,n:"nr_reqs"},{t:_.POINTER64,n:"aio_context_t *ctx"}],Ct.IO],[207,"io_destroy",207,[Nt.AIO],Ct.IO],[208,"io_getevents",208,[Nt.AIO,{t:_.LONG,n:"long min_nr"},{t:_.LONG,n:"nr"},Nt.IOEV.copy("*events"),Nt.KERNEL_TIMESPEC.copy("timeout")],Ct.IO],[209,"io_submit",209,[Nt.AIO,{t:_.LONG,n:"nr"},{t:_.POINTER64,n:"struct iocb **iocbpp"}],Ct.IO],[210,"io_cancel",210,[Nt.AIO,Nt.IOCB,Nt.IOEV.copy("result")],Ct.io_cancel],[211,"get_thread_area",211,[],Ct.get_thread_area],[212,"lookup_dcookie",212,["u64 cookie64",Nt.OUTPUT_CHAR_BUFFER,Nt.SIZE],Ct.lookup_dcookie],[213,"epoll_create",213,[Nt.SSIZE],Ct.epoll_create],[214,"epoll_ctl_old",214,[],Ct.epoll_ctl_old],[215,"epoll_wait_old",215,[],Ct.epoll_wait_old],[216,"remap_file_pages",216,[Nt.ADDR,"unsigned long size","unsigned long prot","unsigned long pgoff","unsigned long flags"],Ct.remap_file_pages],[217,"getdents64",217,[Nt.FD,"struct linux_dirent64 *dirent","unsigned int count"],Ct.getdents64],[218,"set_tid_address",218,["int *tidptr"],Ct.set_tid_address],[219,"restart_syscall",219,[],Ct.restart_syscall],[220,"semtimedop",220,[Nt.SEMID,Nt.SEMBUF,"unsigned nsops","const struct __kernel_timespec *timeout"],Ct.semtimedop],[221,"fadvise64",221,[Nt.FD,"loff_t offset",Nt.SIZE,"int advice"],Ct.fadvise64],[222,"timer_create",222,["clockid_t which_clock","struct sigevent *timer_event_spec","timer_t * created_timer_id"],Ct.timer_create],[223,"timer_settime",223,["timer_t timer_id","int flags","const struct __kernel_itimerspec *new_setting","struct __kernel_itimerspec *old_setting"],Ct.timer_settime],[224,"timer_gettime",224,["timer_t timer_id","struct __kernel_itimerspec *setting"],Ct.timer_gettime],[225,"timer_getoverrun",225,["timer_t timer_id"],Ct.timer_getoverrun],[226,"timer_delete",226,["timer_t timer_id"],Ct.timer_delete],[227,"clock_settime",227,["clockid_t which_clock","const struct __kernel_timespec *tp"],Ct.clock_settime],[228,"clock_gettime",228,["clockid_t which_clock","struct __kernel_timespec *tp"],Ct.clock_gettime],[229,"clock_getres",229,["clockid_t which_clock","struct __kernel_timespec *tp"],Ct.clock_getres],[230,"clock_nanosleep",230,["clockid_t which_clock","int flags","const struct __kernel_timespec *rqtp","struct __kernel_timespec *rmtp"],Ct.clock_nanosleep],[231,"exit_group",231,["int error_code"],Ct.exit_group],[232,"epoll_wait",232,[Nt.EPFD,"struct epoll_event *events","int maxevents","int timeout"],Ct.epoll_wait],[233,"epoll_ctl",233,[Nt.EPFD,"int op",Nt.FD,"struct epoll_event *event"],Ct.epoll_ctl],[234,"tgkill",234,[Nt.PID.copy("tgid"),Nt.PID,Nt.SIG],Ct.tgkill],[235,"utimes",235,[Nt.FNAME,"struct timeval *utimes"],Ct.utimes],[236,"vserver",236,[],Ct.vserver],[237,"mbind",237,[Nt.ADDR,Nt.LEN,"unsigned long mode","const unsigned long *nmask","unsigned long maxnode","unsigned flags"],Ct.mbind],[238,"set_mempolicy",238,["int mode","const unsigned long *nmask","unsigned long maxnode"],Ct.set_mempolicy],[239,"get_mempolicy",239,["int *policy","unsigned long *nmask","unsigned long maxnode",Nt.ADDR,"unsigned long flags"],Ct.get_mempolicy],[240,"mq_open",240,[Nt.CONST_NAME,Nt.OFLAGS,Nt.OMODE,Nt.MQ_ATTR],Ct.mq_open],[241,"mq_unlink",241,[Nt.CONST_NAME],Ct.mq_unlink],[242,"mq_timedsend",242,[Nt.MQD,Nt.CONST_NAME.copy("*msg_ptr"),Nt.SIZE.copy("msg_len"),"unsigned int msg_prio",Nt.CONST_KERNEL_TIMESPEC.copy("*abs_timeout")],Ct.mq_timedsend],[243,"mq_timedreceive",243,[Nt.MQD,Nt.OUTPUT_CHAR_BUFFER.copy("*msg_ptr"),Nt.SIZE.copy("msg_len"),"unsigned int *msg_prio",Nt.CONST_KERNEL_TIMESPEC.copy("*abs_timeout")],Ct.mq_timedreceive],[244,"mq_notify",244,[Nt.MQD,Nt.SIGEVENT.copy().constant()],Ct.mq_notify],[245,"mq_getsetattr",245,[Nt.MQD,Nt.MQ_ATTR.copy("*mqstat").constant(),Nt.MQ_ATTR.copy("*omqstat")],Ct.mq_getsetattr],[246,"kexec_load",246,["unsigned long entry","unsigned long nr_segments","struct kexec_segment *segments","unsigned long flags"],Ct.kexec_load],[247,"waitid",247,["int which",Nt.PID,"struct siginfo *infop","int options","struct rusage *ru"],Ct.waitid],[248,"add_key",248,["const char *_type","const char *_description","const void *_payload","size_t plen","key_serial_t destringid"],Ct.add_key],[249,"request_key",249,["const char *_type","const char *_description","const char *_callout_info","key_serial_t destringid"],Ct.request_key],[250,"keyctl",250,["int cmd","unsigned long arg2","unsigned long arg3","unsigned long arg4","unsigned long arg5",""],Ct.keyctl],[251,"ioprio_set",251,["int which","int who","int ioprio"],Ct.ioprio_set],[252,"ioprio_get",252,["int which","int who"],Ct.ioprio_get],[253,"inotify_init",253,[],Ct.inotify_init],[254,"inotify_add_watch",254,[Nt.FD,Nt.CONST_PATH,"u32 mask"],Ct.inotify_add_watch],[255,"inotify_rm_watch",255,[Nt.FD,"__s32 wd"],Ct.inotify_rm_watch],[256,"migrate_pages",256,[Nt.PID,"unsigned long maxnode","const unsigned long *from","const unsigned long *to"],Ct.migrate_pages],[257,"openat",257,[Nt.DFD,Nt.CONST_FNAME,"int flags","umode_t mode"],Ct.openat],[258,"mkdirat",258,[Nt.DFD,"const char * pathname","umode_t mode"],Ct.mkdirat],[259,"mknodat",259,[Nt.DFD,"const char * filename","umode_t mode","unsigned dev"],Ct.mknodat],[260,"fchownat",260,[Nt.DFD,Nt.CONST_FNAME,Nt.UID,Nt.GID,"int flag"],Ct.fchownat],[261,"futimesat",261,[Nt.DFD,Nt.CONST_FNAME,"struct timeval *utimes"],Ct.futimesat],[262,"newfstatat",262,[Nt.DFD,Nt.CONST_FNAME,"struct stat *statbuf","int flag"],Ct.newfstatat],[263,"unlinkat",263,[Nt.DFD,"const char * pathname","int flag"],Ct.unlinkat],[264,"renameat",264,["int olddfd","const char * oldname","int newdfd","const char * newname"],Ct.renameat],[265,"linkat",265,["int olddfd","const char *oldname","int newdfd","const char *newname","int flags"],Ct.linkat],[266,"symlinkat",266,["const char * oldname","int newdfd","const char * newname"],Ct.symlinkat],[267,"readlinkat",267,[Nt.DFD,Nt.CONST_PATH,Nt.OUTPUT_CHAR_BUFFER,"int bufsiz"],Ct.readlinkat],[268,"fchmodat",268,[Nt.DFD,"const char * filename","umode_t mode"],Ct.fchmodat],[269,"faccessat",269,[Nt.DFD,Nt.CONST_FNAME,"int mode"],Ct.faccessat],[270,"pselect6",270,["int","fd_set *","fd_set *","fd_set *","struct __kernel_timespec *","void *"],Ct.pselect6],[271,"ppoll",271,["struct pollfd *","unsigned int","struct __kernel_timespec *","const sigset_t *",Nt.SIZE],Ct.ppoll],[272,"unshare",272,["unsigned long unshare_flags"],Ct.unshare],[273,"set_robust_list",273,["struct robust_list_head *head",Nt.SIZE],Ct.set_robust_list],[274,"get_robust_list",274,[Nt.PID,"struct robust_list_head * *head_ptr","size_t *len_ptr"],Ct.get_robust_list],[275,"splice",275,["int fd_in","loff_t *off_in","int fd_out","loff_t *off_out",Nt.SIZE,"unsigned int flags"],Ct.splice],[276,"tee",276,["int fdin","int fdout",Nt.SIZE,"unsigned int flags"],Ct.tee],[277,"sync_file_range",277,[Nt.FD,"loff_t offset","loff_t nbytes","unsigned int flags"],Ct.sync_file_range],[278,"vmsplice",278,[Nt.FD,"const struct iovec *iov","unsigned long nr_segs","unsigned int flags"],Ct.vmsplice],[279,"move_pages",279,[Nt.PID,"unsigned long nr_pages","const void * *pages","const int *nodes","int *status","int flags"],Ct.move_pages],[280,"utimensat",280,[Nt.DFD,Nt.CONST_FNAME,"struct __kernel_timespec *utimes","int flags"],Ct.utimensat],[281,"epoll_pwait",281,[Nt.EPFD,"struct epoll_event *events","int maxevents","int timeout","const sigset_t *sigmask","size_t sigsetsize"],Ct.epoll_pwait],[282,"signalfd",282,["int ufd","sigset_t *user_mask","size_t sizemask"],Ct.signalfd],[283,"timerfd_create",283,["int clockid","int flags"],Ct.timerfd_create],[284,"eventfd",284,["unsigned int count"],Ct.eventfd],[285,"fallocate",285,[Nt.FD,"int mode","loff_t offset","loff_t len"],Ct.fallocate],[286,"timerfd_settime",286,["int ufd","int flags","const struct __kernel_itimerspec *utmr","struct __kernel_itimerspec *otmr"],Ct.timerfd_settime],[287,"timerfd_gettime",287,["int ufd","struct __kernel_itimerspec *otmr"],Ct.timerfd_gettime],[288,"accept4",288,["int",Nt.SOCKADDR,"int *","int"],Ct.accept4],[289,"signalfd4",289,["int ufd","sigset_t *user_mask","size_t sizemask","int flags"],Ct.signalfd4],[290,"eventfd2",290,["unsigned int count","int flags"],Ct.eventfd2],[291,"epoll_create1",291,["int flags"],Ct.epoll_create1],[292,"dup3",292,["unsigned int oldfd","unsigned int newfd","int flags"],Ct.dup3],[293,"pipe2",293,[{t:_.POINTER64,n:"pipefd",l:n.PIPEFD},{t:_.INT32,n:"flags",l:n.FLAG,f:At.PIPE_FLAG}],Ct.pipe2],[294,"inotify_init1",294,["int flags"],Ct.inotify_init1],[295,"preadv",295,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt"),"unsigned long pos_l","unsigned long pos_h"],Ct.preadv],[296,"pwritev",296,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt"),"unsigned long pos_l","unsigned long pos_h"],Ct.pwritev],[297,"rt_tgsigqueueinfo",297,["pid_t tgid",Nt.PID,"int sig","siginfo_t *uinfo"],Ct.rt_tgsigqueueinfo],[298,"perf_event_open",298,["struct perf_event_attr *attr_uptr",Nt.PID,"int cpu","int group_fd","unsigned long flags"],Ct.perf_event_open],[299,"recvmmsg",299,[Nt.FD,"struct mmsghdr *msg","unsigned int vlen","unsigned flags","struct __kernel_timespec *timeout"],Ct.recvmmsg],[300,"fanotify_init",300,["unsigned int flags","unsigned int event_f_flags"],Ct.fanotify_init],[301,"fanotify_mark",301,["int fanotify_fd","unsigned int flags","u64 mask",Nt.FD,Nt.CONST_FNAME],Ct.fanotify_mark],[302,"prlimit64",302,[Nt.PID,"unsigned int resource","const struct rlimit64 *new_rlim","struct rlimit64 *old_rlim"],Ct.prlimit64],[303,"name_to_handle_at",303,[Nt.DFD,Nt.CONST_NAME,"struct file_handle *handle","int *mnt_id","int flag"],Ct.name_to_handle_at],[304,"open_by_handle_at",304,["int mountdirfd","struct file_handle *handle","int flags"],Ct.open_by_handle_at],[305,"clock_adjtime",305,["clockid_t which_clock","struct __kernel_timex *tx"],Ct.clock_adjtime],[306,"syncfs",306,[Nt.FD],Ct.syncfs],[307,"sendmmsg",307,[Nt.FD,"struct mmsghdr *msg","unsigned int vlen","unsigned flags"],Ct.sendmmsg],[308,"setns",308,[Nt.FD,"int nstype"],Ct.setns],[309,"getcpu",309,["unsigned *cpu","unsigned *node","struct getcpu_cache *cache"],Ct.getcpu],[310,"process_vm_readv",310,[Nt.PID,"const struct iovec *lvec","unsigned long liovcnt","const struct iovec *rvec","unsigned long riovcnt","unsigned long flags"],Ct.process_vm_readv],[311,"process_vm_writev",311,[Nt.PID,"const struct iovec *lvec","unsigned long liovcnt","const struct iovec *rvec","unsigned long riovcnt","unsigned long flags"],Ct.process_vm_writev],[312,"kcmp",312,["pid_t pid1","pid_t pid2","int type","unsigned long idx1","unsigned long idx2",""],Ct.kcmp],[313,"finit_module",313,[Nt.FD,"const char *uargs","int flags"],Ct.finit_module],[314,"sched_setattr",314,[Nt.PID,"struct sched_attr *attr","unsigned int flags"],Ct.sched_setattr],[315,"sched_getattr",315,[Nt.PID,"struct sched_attr *attr","unsigned int size","unsigned int flags"],Ct.sched_getattr],[316,"renameat2",316,["int olddfd","const char *oldname","int newdfd","const char *newname","unsigned int flags"],Ct.renameat2],[317,"seccomp",317,["unsigned int op","unsigned int flags","void *uargs"],Ct.seccomp],[318,"getrandom",318,[Nt.OUTPUT_CHAR_BUFFER,Nt.COUNT,"unsigned int flags"],Ct.getrandom],[319,"memfd_create",319,["const char *uname_ptr","unsigned int flags"],Ct.memfd_create],[320,"kexec_file_load",320,["int kernel_fd","int initrd_fd","unsigned long cmdline_len","const char *cmdline_ptr","unsigned long flags"],Ct.kexec_file_load],[321,"bpf",321,["int cmd","union bpf_attr *attr","unsigned int size"],Ct.bpf],[322,"execveat",322,[Nt.DFD,Nt.CONST_FNAME,"const char *const *argv","const char *const *envp","int flags"],Ct.execveat],[323,"userfaultfd",323,["int flags"],Ct.userfaultfd],[324,"membarrier",324,["int cmd","int flags"],Ct.membarrier],[325,"mlock2",325,[Nt.ADDR,Nt.SIZE,"int flags"],Ct.mlock2],[326,"copy_file_range",326,["int fd_in","loff_t *off_in","int fd_out","loff_t *off_out",Nt.SIZE,"unsigned int flags"],Ct.copy_file_range],[327,"preadv2",327,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt"),"unsigned long pos_l","unsigned long pos_h","rwf_t flags"],Ct.preadv2],[328,"pwritev2",328,[Nt.LFD,Nt.IOVEC,Nt.SIZE.copy("iovcnt"),"unsigned long pos_l","unsigned long pos_h","rwf_t flags"],Ct.pwritev2],[329,"pkey_mprotect",329,[Nt.ADDR,Nt.SIZE,"unsigned long prot","int pkey"],Ct.pkey_mprotect],[330,"pkey_alloc",330,["unsigned long flags","unsigned long init_val"],Ct.pkey_alloc],[331,"pkey_free",331,["int pkey"],Ct.pkey_free],[332,"statx",332,[Nt.DFD,Nt.CONST_PATH,"unsigned flags","unsigned mask","struct statx *buffer"],Ct.statx]],Dt=h,Ft=L,Lt=st,pt={OP:"syscall",NR:"rax",RET:"rax",ARG0:"rdi",ARG1:"rsi",ARG2:"rdx",ARG3:"r10",ARG4:"r8",ARG5:"r9",PC:"rip"},ft={},gt={};Pt.map((t=>{gt[t[1]]=t,ft[t[0]]=t}));const mt={CONST:j,SYSC:gt,ERR:nt};class Mt extends It{constructor(t,e){super(t,e),this.loadCtr=0,this.filter_name=[],this.filter_num=[],this.svc_hk={},this.configure(t)}configure(t){if(null!=t){for(let e in t)switch(e){case"svc":for(let e in t.svc)this.onSupervisorCall(e,t.svc[e]);break;case"filter_name":this.filter_name=t.filter_name;break;case"filter_num":this.filter_num=t.filter_num}this.setupBuiltinHook()}}onSupervisorCall(t,e){const n=gt[t];if(null==n)throw Ot.UNKNOW_SYSCALL(t);(e.hasOwnProperty("onEnter")||e.hasOwnProperty("onLeave"))&&(this.svc_hk[n[0]]=e)}setupBuiltinHook(){}locateRIP(t){let e="",n=-1;const _=Process.findRangeByAddress(t.rip);return this.output.tid&&(n=Process.getCurrentThreadId(),e+=`[1;${this.output._tcolor}m [TID=${n}] `),this.output.module&&(null!=_?null!=_.file?null!=this.output.hide?e+=`[${_.file.path.replace(this.output.hide,"HIDDEN")} +${t.rip.sub(_.base)}]`:e+=`[${_.file.path} +${t.rip.sub(_.base)}]`:e+=`[${_.base} +${t.rip.sub(_.base)}]`:e+=`[<unknow>  rip=${t.rip}]`),this.output.lr&&(e+=`[lr=${t.rip}]`),e}startOnLoad(t,e=null){let n=this,_=null,s=null,E=null,i=null;if(Process.findModuleByName("linker64").enumerateSymbols().forEach((t=>{t.name.indexOf("do_dlopen")>=0?_=t.address:t.name.indexOf("call_constructor")>=0?s=t.address:t.name.indexOf("__dl__ZN11ScopedTrace3EndEv")>=0&&(E=t.address)})),this.emulator&&null!=E){const t=new NativeCallback((()=>1),"int",["int"]);Interceptor.replace(E,t)}Interceptor.attach(_,(function(e){const n=e[0].readUtf8String();null!=n&&null!=t.exec(n)&&(i=n)})),Interceptor.attach(s,{onEnter:function(){if(null==i)return;const t=i;if(console.warn("[LINKER] Loading '"+i+"'"),null==e||!e.hasOwnProperty("condition")||e.condition(i,this))if(console.warn("[INTERRUPTOR][STARTING] Module '"+i+"' is loading, tracer will start"),i=null,n.start(),null!=e&&e.hasOwnProperty("threshold")){if(!(n.loadCtr<e.threshold))return console.warn("[INTERRUPTOR][STARTING] Threshold reached"),void(i=null);n.loadCtr++,n.onStart(t,this)}else n.onStart(t,this);else i=null}})}parseStruct(t,e,n,s="\n",E=!1){let i=" {"+s,o=null,r="",T=null,l=0;for(let E=0;E<e.length;E++){switch(o=e[E],o.t){case _.SHORT:T=n.add(l).readShort(),l+=2;break;case _.USHORT:T=n.add(l).readUShort(),l+=2;break;case _.INT32:T=n.add(l).readInt(),l+=4;break;case _.UINT32:T=n.add(l).readU32(),l+=4;break;case _.LONG:T=n.add(l).readLong(),l+=8;break;case _.ULONG:case _.POINTER64:T=n.add(l).readULong(),l+=8}r=this.parseValue(t,T,o,E),i+=` \t${o.n} = ${r},${s}`}return i+s+" }"}parseValue(t,e,s,E){let i="",o=null,r=null;if("string"==typeof s)i=e;else switch(o=e,s.l){case n.DFD:r=o.toInt32(),i+=r>=0?`${r}  `:r==Dt.AT_FDCWD?"AT_FDCWD ":o+" ERR?";break;case n.MFD:return r=o.toInt32(),void(null!=t.dxc.FD&&r>=0?i+=`${r}  ${t.dxc.FD[o.toInt32()+""]}  `:(r&Ft.MAP_ANONYMOUS[0])==Ft.MAP_ANONYMOUS[0]?i+=`${r} IGNORED  `:i+=r+" ");case n.FD:r=o.toInt32(),null!=t.dxc.FD&&r>=0?i+=`${r}  ${t.dxc.FD[r+""]}  `:i+=r==Dt.AT_FDCWD?"AT_FDCWD ":o+" ";break;case n.SOCKFD:r=o.toInt32(),null!=t.dxc.SOCKFD&&r>=0&&(i+=`${r}  ${t.dxc.SOCKFD[r+""]}  `),i+=o+" ";break;case n.WD:r=o.toInt32(),null!=t.dxc.WD&&r>=0&&(i+=`${r}  ${t.dxc.WD[r+""]}  `),i+=o+" ";break;case n.VADDR:if(null==s.f){i+=t.dxcOpts[s]=o;break}case n.FLAG:if(null!=s.r)if(Array.isArray(s.r)){let e=[];s.r.map((n=>e.push(t[n]))),i+=`${s.f(o,e)}`}else i+=`${s.f(o,[t[s.r]])}`;else i+=`${s.f(o)}`;t.dxcOpts[E]=o;break;case n.DSTRUCT:if(null!=this.types&&null!=this.types[s.f]){null==t.dxcOpts._extra&&(t.dxcOpts._extra=[]),s.r=E,s.v=o,t.dxcOpts._extra.push(s),t.dxcOpts[E]=o,i+=`${o} ${!0===s.c?this.parseStruct(t,this.types[s.f].getStruct(),s.v,""):""}`;break}default:switch(s.t){case _.STRING:case _.CHAR_BUFFER:i+=t.dxcOpts[E]=o.readCString();break;case _.UINT32:default:i+=t.dxcOpts[E]=o}}return i}parseRawArgs(t,e,n){return"string"==typeof e?` ${e} = ${t[pt["ARG"+n]]}`:` ${e.n} = ${this.parseValue(t,t[pt["ARG"+n]],e,n)}`}traceSyscall(t,e=null){const n=t[pt.NR],_=ft[n.toInt32()];if(null==_)return void console.log(" ["+this.locateRIP(t)+"]   "+pt.OP+" ("+n+") =<unknow>");t.dxcRET=_[4];let s="",E="";t.dxcOpts=[],_[3].map(((e,n)=>{E+=` ${this.parseRawArgs(t,e,n)} ,`})),s=`${_[1]} ( ${E.slice(0,-1)} ) `,this.output.flavor==It.FLAVOR_DXC&&(t.log=this.formatLogLine(t,s,pt.OP,n))}formatLogLine(t,e,n,_){let s=this.locateRIP(t);return s+=this.output.inst?`   ${n} :: ${_} `:"",s+=`   ${e}`,s}getSyscallError(t,e){for(let n=0;n<e.length;n++)if(t===-e[n][0])return t+" "+e[n][2];return t}traceSyscallRet(t,e=null){let _,s=t.dxcRET,E=null;if(null!=s)switch(E=t[pt.RET],s.l){case n.SIZE:s=this.output.dump_buff?"(len="+E+") ":E;break;case n.DFD:case n.FD:E.toInt32()>=0?(null==t.dxc&&(t.dxc={FD:{}},t.dxcFD=t.dxc.FD={}),null==t.dxc.FD&&(t.dxcFD=t.dxc.FD={}),t.dxc.FD[E.toInt32()+""]=t.dxcOpts[s.r],s="("+(n.DFD==s.l?"D":"")+"FD) "+E):s=s.e?"(ERROR) "+this.getSyscallError(E.toInt32(),s.e)+" ":"(ERROR) "+E;break;case n.SOCKFD:E.toInt32()>=0?(t.dxc.SOCKFD[E.toInt32()+""]=t.dxcOpts.x1+","+t.dxcOpts.x2,s="(SOCKFD) "+E):s=s.e?"(ERROR) "+this.getSyscallError(E.toInt32(),s.e)+" ":"(ERROR) "+E;case n.WD:E.toInt32()>=0?(t.dxc.WD[E.toInt32()+""]=t.dxcOpts[s.r],s="(WD) "+E):s=s.e?"(ERROR) "+this.getSyscallError(E.toInt32(),s.e)+" ":"(ERROR) "+E;break;case n.FCNTL_RET:s=Lt.FCNTL_RET(E,t[pt.ARG0]);break;case n.VADDR:null!=s.e&&(_=this.getSyscallError(E,s.e),s=_!=E?E+" SUCCESS":_);break;default:null!=s.e?(_=this.getSyscallError(E.toInt32(),s.e),s=0==_?E.toUInt32().toString(16)+" SUCCESS":_):s=E.toUInt32().toString(16)}else s=t[pt.RET];console.log(t.log+"   > "+s),null!=t.dxcOpts&&t.dxcOpts._extra&&t.dxcOpts._extra.map((e=>{console.log(` ${e.n} = `+this.parseStruct(t,this.types[e.f].getStruct(),null!=e.v?e.v:t.dxcOpts[e.r]))}))}trace(t,e,n){const _=this;if(1==n.onLeave&&(t.putCallout((function(t){const e=t[pt.NR].toInt32();null==t.dxc&&(t.dxc={FD:{}}),_.traceSyscallRet(t);const n=_.svc_hk[e];null!=n&&null!=n.onLeave&&n.onLeave(t)})),n.onLeave=null),e.mnemonic===pt.OP){const s=Process.findModuleByAddress(e.address);console.log((null!=s?s.name:"<null>")+"["+e.address+"] > "+Instruction.parse(e.address)),n.onLeave=1,t.putCallout((function(t){const e=t[pt.NR].toInt32();null==t.dxc&&(t.dxc={FD:{}});const n=_.svc_hk[e];null!=n&&null!=n.onEnter&&n.onEnter(t),_.traceSyscall(t,n)}))}return 1}printStats(){super.printStats(Pt)}}class ht extends rt{constructor(t=null){super(t),this.KAPI=mt,this.T=_,this.L=n,this.X=st}utils(){return{toScanPattern:rt.toScanPattern,toByteArray:rt.toByteArray,printBackTrace:rt.printBackTrace}}static _followThread(t){console.error("Deploying pthread_create hook"),ht.HOOKED_PTHREAD_ROUTINE={},Interceptor.attach(Module.findExportByName("libc.so","pthread_create"),{onEnter:function(e){const n=e[2];null==n||ht.HOOKED_PTHREAD_ROUTINE.hasOwnProperty(n)||(ht.HOOKED_PTHREAD_ROUTINE[n+""]=!0,console.log("["+Process.findModuleByAddress(this.context.pc).name+"] Hooking routine : "+n+" "+JSON.stringify(ht.HOOKED_PTHREAD_ROUTINE)),Interceptor.attach(n,{onEnter:function(e){const _=Process.findModuleByAddress(this.context.pc);console.log("------- [TID="+this.threadId+"]["+_.name+"]["+n+"] Thread routine start -------");const s=Tt.deepCopy(t);s.output._tcolor=rt._pickThreadColor();const E=new Mt(s,this._followThread);ht.AGENTS.push(E),E.start(this.threadId)},onLeave:function(t){console.log("------- [TID="+this.threadId+"]["+n+"] Thread routine ended -------")}}))}})}newAgentTracer(t){return new Mt(t,ht._followThread)}}ht.HOOKED_PTHREAD_ROUTINE={},ht.AGENTS=[];const Ut=new ht({});let Gt=!1;Ut.newAgentTracer({followThread:!0,scope:{syscalls:{exclude:[]},modules:{exclude:[]}},onStart:()=>{Gt||(Gt=!0,Interceptor.attach(Process.findModuleByName("libc.so").getExportByName("exit"),{onEnter:function(t){console.warn("[LIBC] exit")}}))}}).startOnLoad(/\.so$/g,{threshold:1});var yt=exports;for(var kt in s)yt[kt]=s[kt];s.__esModule&&Object.defineProperty(yt,"__esModule",{value:!0});
Share this script:
Twitter LinkedIn

Comments

Login or Sign up to leave a comment.
Loading comments...