Source code for pwnypack.shellcode.linux

from pwnypack.shellcode.base import BaseEnvironment
from pwnypack.shellcode.ops import SyscallInvoke
from pwnypack.shellcode.types import NUMERIC, CHARP, CHARPP, PTR, SyscallDef


__all__ = ['Linux']


[docs]class Linux(BaseEnvironment): """ This mix-in defines all the common Linux syscalls and the syscall mechanism. """ sys_time = SyscallDef('sys_time', PTR) #: sys_stime = SyscallDef('sys_stime', PTR) #: sys_gettimeofday = SyscallDef('sys_gettimeofday', PTR, PTR) #: sys_settimeofday = SyscallDef('sys_settimeofday', PTR, PTR) #: sys_adjtimex = SyscallDef('sys_adjtimex', PTR) #: sys_times = SyscallDef('sys_times', PTR) #: sys_gettid = SyscallDef('sys_gettid') #: sys_nanosleep = SyscallDef('sys_nanosleep', PTR, PTR) #: sys_alarm = SyscallDef('sys_alarm', NUMERIC) #: sys_getpid = SyscallDef('sys_getpid') #: sys_getppid = SyscallDef('sys_getppid') #: sys_getuid = SyscallDef('sys_getuid') #: sys_geteuid = SyscallDef('sys_geteuid') #: sys_getgid = SyscallDef('sys_getgid') #: sys_getegid = SyscallDef('sys_getegid') #: sys_getresuid = SyscallDef('sys_getresuid', PTR, PTR, PTR) #: sys_getresgid = SyscallDef('sys_getresgid', PTR, PTR, PTR) #: sys_getpgid = SyscallDef('sys_getpgid', NUMERIC) #: sys_getpgrp = SyscallDef('sys_getpgrp') #: sys_getsid = SyscallDef('sys_getsid', NUMERIC) #: sys_getgroups = SyscallDef('sys_getgroups', NUMERIC, PTR) #: sys_setregid = SyscallDef('sys_setregid', NUMERIC, NUMERIC) #: sys_setgid = SyscallDef('sys_setgid', NUMERIC) #: sys_setreuid = SyscallDef('sys_setreuid', NUMERIC, NUMERIC) #: sys_setuid = SyscallDef('sys_setuid', NUMERIC) #: sys_setresuid = SyscallDef('sys_setresuid', NUMERIC, NUMERIC, NUMERIC) #: sys_setresgid = SyscallDef('sys_setresgid', NUMERIC, NUMERIC, NUMERIC) #: sys_setfsuid = SyscallDef('sys_setfsuid', NUMERIC) #: sys_setfsgid = SyscallDef('sys_setfsgid', NUMERIC) #: sys_setpgid = SyscallDef('sys_setpgid', NUMERIC, NUMERIC) #: sys_setsid = SyscallDef('sys_setsid') #: sys_setgroups = SyscallDef('sys_setgroups', NUMERIC, PTR) #: sys_acct = SyscallDef('sys_acct', CHARP) #: sys_capget = SyscallDef('sys_capget', PTR, PTR) #: sys_capset = SyscallDef('sys_capset', PTR, PTR) #: sys_personality = SyscallDef('sys_personality', NUMERIC) #: sys_sigpending = SyscallDef('sys_sigpending', PTR) #: sys_sigprocmask = SyscallDef('sys_sigprocmask', NUMERIC, PTR, PTR) #: sys_sigaltstack = SyscallDef('sys_sigaltstack', PTR, PTR) #: sys_getitimer = SyscallDef('sys_getitimer', NUMERIC, PTR) #: sys_setitimer = SyscallDef('sys_setitimer', NUMERIC, PTR, PTR) #: sys_timer_create = SyscallDef('sys_timer_create', NUMERIC, PTR, PTR) #: sys_timer_gettime = SyscallDef('sys_timer_gettime', NUMERIC, PTR) #: sys_timer_getoverrun = SyscallDef('sys_timer_getoverrun', NUMERIC) #: sys_timer_settime = SyscallDef('sys_timer_settime', NUMERIC, NUMERIC, PTR, PTR) #: sys_timer_delete = SyscallDef('sys_timer_delete', NUMERIC) #: sys_clock_settime = SyscallDef('sys_clock_settime', NUMERIC, PTR) #: sys_clock_gettime = SyscallDef('sys_clock_gettime', NUMERIC, PTR) #: sys_clock_adjtime = SyscallDef('sys_clock_adjtime', NUMERIC, PTR) #: sys_clock_getres = SyscallDef('sys_clock_getres', NUMERIC, PTR) #: sys_clock_nanosleep = SyscallDef('sys_clock_nanosleep', NUMERIC, NUMERIC, PTR, PTR) #: sys_nice = SyscallDef('sys_nice', NUMERIC) #: sys_sched_setscheduler = SyscallDef('sys_sched_setscheduler', NUMERIC, NUMERIC, PTR) #: sys_sched_setparam = SyscallDef('sys_sched_setparam', NUMERIC, PTR) #: sys_sched_setattr = SyscallDef('sys_sched_setattr', NUMERIC, PTR, NUMERIC) #: sys_sched_getscheduler = SyscallDef('sys_sched_getscheduler', NUMERIC) #: sys_sched_getparam = SyscallDef('sys_sched_getparam', NUMERIC, PTR) #: sys_sched_getattr = SyscallDef('sys_sched_getattr', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_sched_setaffinity = SyscallDef('sys_sched_setaffinity', NUMERIC, NUMERIC, PTR) #: sys_sched_getaffinity = SyscallDef('sys_sched_getaffinity', NUMERIC, NUMERIC, PTR) #: sys_sched_yield = SyscallDef('sys_sched_yield') #: sys_sched_get_priority_max = SyscallDef('sys_sched_get_priority_max', NUMERIC) #: sys_sched_get_priority_min = SyscallDef('sys_sched_get_priority_min', NUMERIC) #: sys_sched_rr_get_interval = SyscallDef('sys_sched_rr_get_interval', NUMERIC, PTR) #: sys_setpriority = SyscallDef('sys_setpriority', NUMERIC, NUMERIC, NUMERIC) #: sys_getpriority = SyscallDef('sys_getpriority', NUMERIC, NUMERIC) #: sys_shutdown = SyscallDef('sys_shutdown', NUMERIC, NUMERIC) #: sys_reboot = SyscallDef('sys_reboot', NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_restart_syscall = SyscallDef('sys_restart_syscall') #: sys_kexec_load = SyscallDef('sys_kexec_load', NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_kexec_file_load = SyscallDef('sys_kexec_file_load', NUMERIC, NUMERIC, NUMERIC, CHARP, NUMERIC) #: sys_exit = SyscallDef('sys_exit', NUMERIC) #: sys_exit_group = SyscallDef('sys_exit_group', NUMERIC) #: sys_wait4 = SyscallDef('sys_wait4', NUMERIC, PTR, NUMERIC, PTR) #: sys_waitid = SyscallDef('sys_waitid', NUMERIC, NUMERIC, PTR, NUMERIC, PTR) #: sys_waitpid = SyscallDef('sys_waitpid', NUMERIC, PTR, NUMERIC) #: sys_set_tid_address = SyscallDef('sys_set_tid_address', PTR) #: sys_futex = SyscallDef('sys_futex', PTR, NUMERIC, NUMERIC, PTR, PTR, NUMERIC) #: sys_init_module = SyscallDef('sys_init_module', PTR, NUMERIC, CHARP) #: sys_delete_module = SyscallDef('sys_delete_module', CHARP, NUMERIC) #: sys_sigsuspend = SyscallDef('sys_sigsuspend', NUMERIC, NUMERIC, NUMERIC) #: sys_rt_sigsuspend = SyscallDef('sys_rt_sigsuspend', PTR, NUMERIC) #: sys_sigaction = SyscallDef('sys_sigaction', NUMERIC, PTR, PTR) #: sys_rt_sigaction = SyscallDef('sys_rt_sigaction', NUMERIC, PTR, PTR, NUMERIC) #: sys_rt_sigprocmask = SyscallDef('sys_rt_sigprocmask', NUMERIC, PTR, PTR, NUMERIC) #: sys_rt_sigpending = SyscallDef('sys_rt_sigpending', PTR, NUMERIC) #: sys_rt_sigtimedwait = SyscallDef('sys_rt_sigtimedwait', PTR, PTR, PTR, NUMERIC) #: sys_rt_tgsigqueueinfo = SyscallDef('sys_rt_tgsigqueueinfo', NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_kill = SyscallDef('sys_kill', NUMERIC, NUMERIC) #: sys_tgkill = SyscallDef('sys_tgkill', NUMERIC, NUMERIC, NUMERIC) #: sys_tkill = SyscallDef('sys_tkill', NUMERIC, NUMERIC) #: sys_rt_sigqueueinfo = SyscallDef('sys_rt_sigqueueinfo', NUMERIC, NUMERIC, PTR) #: sys_sgetmask = SyscallDef('sys_sgetmask') #: sys_ssetmask = SyscallDef('sys_ssetmask', NUMERIC) #: sys_signal = SyscallDef('sys_signal', NUMERIC, PTR) #: sys_pause = SyscallDef('sys_pause') #: sys_sync = SyscallDef('sys_sync') #: sys_fsync = SyscallDef('sys_fsync', NUMERIC) #: sys_fdatasync = SyscallDef('sys_fdatasync', NUMERIC) #: sys_bdflush = SyscallDef('sys_bdflush', NUMERIC, NUMERIC) #: sys_mount = SyscallDef('sys_mount', CHARP, CHARP, CHARP, NUMERIC, PTR) #: sys_umount2 = SyscallDef('sys_umount', CHARP, NUMERIC) #: sys_umount = SyscallDef('sys_oldumount', CHARP) #: sys_truncate = SyscallDef('sys_truncate', CHARP, NUMERIC) #: sys_ftruncate = SyscallDef('sys_ftruncate', NUMERIC, NUMERIC) #: sys_stat = SyscallDef('sys_stat', CHARP, PTR) #: sys_statfs = SyscallDef('sys_statfs', CHARP, PTR) #: sys_statfs64 = SyscallDef('sys_statfs64', CHARP, NUMERIC, PTR) #: sys_fstatfs = SyscallDef('sys_fstatfs', NUMERIC, PTR) #: sys_fstatfs64 = SyscallDef('sys_fstatfs64', NUMERIC, NUMERIC, PTR) #: sys_lstat = SyscallDef('sys_lstat', CHARP, PTR) #: sys_fstat = SyscallDef('sys_fstat', NUMERIC, PTR) #: sys_newstat = SyscallDef('sys_newstat', CHARP, PTR) #: sys_newlstat = SyscallDef('sys_newlstat', CHARP, PTR) #: sys_newfstat = SyscallDef('sys_newfstat', NUMERIC, PTR) #: sys_ustat = SyscallDef('sys_ustat', NUMERIC, PTR) #: sys_stat64 = SyscallDef('sys_stat64', CHARP, PTR) #: sys_fstat64 = SyscallDef('sys_fstat64', NUMERIC, PTR) #: sys_lstat64 = SyscallDef('sys_lstat64', CHARP, PTR) #: sys_fstatat64 = SyscallDef('sys_fstatat64', NUMERIC, CHARP, PTR, NUMERIC) #: sys_truncate64 = SyscallDef('sys_truncate64', CHARP, NUMERIC) #: sys_ftruncate64 = SyscallDef('sys_ftruncate64', NUMERIC, NUMERIC) #: sys_setxattr = SyscallDef('sys_setxattr', CHARP, CHARP, PTR, NUMERIC, NUMERIC) #: sys_lsetxattr = SyscallDef('sys_lsetxattr', CHARP, CHARP, PTR, NUMERIC, NUMERIC) #: sys_fsetxattr = SyscallDef('sys_fsetxattr', NUMERIC, CHARP, PTR, NUMERIC, NUMERIC) #: sys_getxattr = SyscallDef('sys_getxattr', CHARP, CHARP, PTR, NUMERIC) #: sys_lgetxattr = SyscallDef('sys_lgetxattr', CHARP, CHARP, PTR, NUMERIC) #: sys_fgetxattr = SyscallDef('sys_fgetxattr', NUMERIC, CHARP, PTR, NUMERIC) #: sys_listxattr = SyscallDef('sys_listxattr', CHARP, CHARP, NUMERIC) #: sys_llistxattr = SyscallDef('sys_llistxattr', CHARP, CHARP, NUMERIC) #: sys_flistxattr = SyscallDef('sys_flistxattr', NUMERIC, CHARP, NUMERIC) #: sys_removexattr = SyscallDef('sys_removexattr', CHARP, CHARP) #: sys_lremovexattr = SyscallDef('sys_lremovexattr', CHARP, CHARP) #: sys_fremovexattr = SyscallDef('sys_fremovexattr', NUMERIC, CHARP) #: sys_brk = SyscallDef('sys_brk', NUMERIC) #: sys_mprotect = SyscallDef('sys_mprotect', NUMERIC, NUMERIC, NUMERIC) #: sys_mremap = SyscallDef('sys_mremap', NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_remap_file_pages = SyscallDef('sys_remap_file_pages', NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_msync = SyscallDef('sys_msync', NUMERIC, NUMERIC, NUMERIC) #: sys_fadvise64 = SyscallDef('sys_fadvise64', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_fadvise64_64 = SyscallDef('sys_fadvise64_64', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_munmap = SyscallDef('sys_munmap', NUMERIC, NUMERIC) #: sys_mlock = SyscallDef('sys_mlock', NUMERIC, NUMERIC) #: sys_munlock = SyscallDef('sys_munlock', NUMERIC, NUMERIC) #: sys_mlockall = SyscallDef('sys_mlockall', NUMERIC) #: sys_munlockall = SyscallDef('sys_munlockall') #: sys_madvise = SyscallDef('sys_madvise', NUMERIC, NUMERIC, NUMERIC) #: sys_mincore = SyscallDef('sys_mincore', NUMERIC, NUMERIC, PTR) #: sys_pivot_root = SyscallDef('sys_pivot_root', CHARP, CHARP) #: sys_chroot = SyscallDef('sys_chroot', CHARP) #: sys_mknod = SyscallDef('sys_mknod', CHARP, NUMERIC, NUMERIC) #: sys_link = SyscallDef('sys_link', CHARP, CHARP) #: sys_symlink = SyscallDef('sys_symlink', CHARP, CHARP) #: sys_unlink = SyscallDef('sys_unlink', CHARP) #: sys_rename = SyscallDef('sys_rename', CHARP, CHARP) #: sys_chmod = SyscallDef('sys_chmod', CHARP, NUMERIC) #: sys_fchmod = SyscallDef('sys_fchmod', NUMERIC, NUMERIC) #: sys_fcntl = SyscallDef('sys_fcntl', NUMERIC, NUMERIC, NUMERIC) #: sys_fcntl64 = SyscallDef('sys_fcntl64', NUMERIC, NUMERIC, NUMERIC) #: sys_pipe = SyscallDef('sys_pipe', PTR) #: sys_pipe2 = SyscallDef('sys_pipe2', PTR, NUMERIC) #: sys_dup = SyscallDef('sys_dup', NUMERIC) #: sys_dup2 = SyscallDef('sys_dup2', NUMERIC, NUMERIC) #: sys_dup3 = SyscallDef('sys_dup3', NUMERIC, NUMERIC, NUMERIC) #: sys_ioperm = SyscallDef('sys_ioperm', NUMERIC, NUMERIC, NUMERIC) #: sys_ioctl = SyscallDef('sys_ioctl', NUMERIC, NUMERIC, NUMERIC) #: sys_flock = SyscallDef('sys_flock', NUMERIC, NUMERIC) #: sys_io_setup = SyscallDef('sys_io_setup', NUMERIC, PTR) #: sys_io_destroy = SyscallDef('sys_io_destroy', PTR) #: sys_io_getevents = SyscallDef('sys_io_getevents', PTR, NUMERIC, NUMERIC, PTR, PTR) #: sys_io_submit = SyscallDef('sys_io_submit', PTR, NUMERIC, PTR) #: sys_io_cancel = SyscallDef('sys_io_cancel', PTR, PTR, PTR) #: sys_sendfile = SyscallDef('sys_sendfile', NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_sendfile64 = SyscallDef('sys_sendfile64', NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_readlink = SyscallDef('sys_readlink', CHARP, CHARP, NUMERIC) #: sys_creat = SyscallDef('sys_creat', CHARP, NUMERIC) #: sys_open = SyscallDef('sys_open', CHARP, NUMERIC, NUMERIC) #: sys_close = SyscallDef('sys_close', NUMERIC) #: sys_access = SyscallDef('sys_access', CHARP, NUMERIC) #: sys_vhangup = SyscallDef('sys_vhangup') #: sys_chown = SyscallDef('sys_chown', CHARP, NUMERIC, NUMERIC) #: sys_lchown = SyscallDef('sys_lchown', CHARP, NUMERIC, NUMERIC) #: sys_fchown = SyscallDef('sys_fchown', NUMERIC, NUMERIC, NUMERIC) #: sys_chown16 = SyscallDef('sys_chown16', CHARP, NUMERIC, NUMERIC) #: sys_lchown16 = SyscallDef('sys_lchown16', CHARP, NUMERIC, NUMERIC) #: sys_fchown16 = SyscallDef('sys_fchown16', NUMERIC, NUMERIC, NUMERIC) #: sys_setregid16 = SyscallDef('sys_setregid16', NUMERIC, NUMERIC) #: sys_setgid16 = SyscallDef('sys_setgid16', NUMERIC) #: sys_setreuid16 = SyscallDef('sys_setreuid16', NUMERIC, NUMERIC) #: sys_setuid16 = SyscallDef('sys_setuid16', NUMERIC) #: sys_setresuid16 = SyscallDef('sys_setresuid16', NUMERIC, NUMERIC, NUMERIC) #: sys_getresuid16 = SyscallDef('sys_getresuid16', PTR, PTR, PTR) #: sys_setresgid16 = SyscallDef('sys_setresgid16', NUMERIC, NUMERIC, NUMERIC) #: sys_getresgid16 = SyscallDef('sys_getresgid16', PTR, PTR, PTR) #: sys_setfsuid16 = SyscallDef('sys_setfsuid16', NUMERIC) #: sys_setfsgid16 = SyscallDef('sys_setfsgid16', NUMERIC) #: sys_getgroups16 = SyscallDef('sys_getgroups16', NUMERIC, PTR) #: sys_setgroups16 = SyscallDef('sys_setgroups16', NUMERIC, PTR) #: sys_getuid16 = SyscallDef('sys_getuid16') #: sys_geteuid16 = SyscallDef('sys_geteuid16') #: sys_getgid16 = SyscallDef('sys_getgid16') #: sys_getegid16 = SyscallDef('sys_getegid16') #: sys_utime = SyscallDef('sys_utime', CHARP, PTR) #: sys_utimes = SyscallDef('sys_utimes', CHARP, PTR) #: sys_lseek = SyscallDef('sys_lseek', NUMERIC, NUMERIC, NUMERIC) #: sys_llseek = SyscallDef('sys_llseek', NUMERIC, NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_read = SyscallDef('sys_read', NUMERIC, CHARP, NUMERIC) #: sys_readahead = SyscallDef('sys_readahead', NUMERIC, NUMERIC, NUMERIC) #: sys_readv = SyscallDef('sys_readv', NUMERIC, PTR, NUMERIC) #: sys_write = SyscallDef('sys_write', NUMERIC, CHARP, NUMERIC) #: sys_writev = SyscallDef('sys_writev', NUMERIC, PTR, NUMERIC) #: sys_pread64 = SyscallDef('sys_pread64', NUMERIC, CHARP, NUMERIC, NUMERIC) #: sys_pwrite64 = SyscallDef('sys_pwrite64', NUMERIC, CHARP, NUMERIC, NUMERIC) #: sys_preadv = SyscallDef('sys_preadv', NUMERIC, PTR, NUMERIC, NUMERIC, NUMERIC) #: sys_preadv2 = SyscallDef('sys_preadv2', NUMERIC, PTR, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_pwritev = SyscallDef('sys_pwritev', NUMERIC, PTR, NUMERIC, NUMERIC, NUMERIC) #: sys_pwritev2 = SyscallDef('sys_pwritev2', NUMERIC, PTR, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_getcwd = SyscallDef('sys_getcwd', CHARP, NUMERIC) #: sys_mkdir = SyscallDef('sys_mkdir', CHARP, NUMERIC) #: sys_chdir = SyscallDef('sys_chdir', CHARP) #: sys_fchdir = SyscallDef('sys_fchdir', NUMERIC) #: sys_rmdir = SyscallDef('sys_rmdir', CHARP) #: sys_lookup_dcookie = SyscallDef('sys_lookup_dcookie', NUMERIC, CHARP, NUMERIC) #: sys_quotactl = SyscallDef('sys_quotactl', NUMERIC, CHARP, NUMERIC, PTR) #: sys_getdents = SyscallDef('sys_getdents', NUMERIC, PTR, NUMERIC) #: sys_getdents64 = SyscallDef('sys_getdents64', NUMERIC, PTR, NUMERIC) #: sys_setsockopt = SyscallDef('sys_setsockopt', NUMERIC, NUMERIC, NUMERIC, CHARP, NUMERIC) #: sys_getsockopt = SyscallDef('sys_getsockopt', NUMERIC, NUMERIC, NUMERIC, CHARP, PTR) #: sys_bind = SyscallDef('sys_bind', NUMERIC, PTR, NUMERIC) #: sys_connect = SyscallDef('sys_connect', NUMERIC, PTR, NUMERIC) #: sys_accept = SyscallDef('sys_accept', NUMERIC, PTR, PTR) #: sys_accept4 = SyscallDef('sys_accept4', NUMERIC, PTR, PTR, NUMERIC) #: sys_getsockname = SyscallDef('sys_getsockname', NUMERIC, PTR, PTR) #: sys_getpeername = SyscallDef('sys_getpeername', NUMERIC, PTR, PTR) #: sys_send = SyscallDef('sys_send', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_sendto = SyscallDef('sys_sendto', NUMERIC, PTR, NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_sendmsg = SyscallDef('sys_sendmsg', NUMERIC, PTR, NUMERIC) #: sys_sendmmsg = SyscallDef('sys_sendmmsg', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_recv = SyscallDef('sys_recv', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_recvfrom = SyscallDef('sys_recvfrom', NUMERIC, PTR, NUMERIC, NUMERIC, PTR, PTR) #: sys_recvmsg = SyscallDef('sys_recvmsg', NUMERIC, PTR, NUMERIC) #: sys_recvmmsg = SyscallDef('sys_recvmmsg', NUMERIC, PTR, NUMERIC, NUMERIC, PTR) #: sys_socket = SyscallDef('sys_socket', NUMERIC, NUMERIC, NUMERIC) #: sys_socketpair = SyscallDef('sys_socketpair', NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_socketcall = SyscallDef('sys_socketcall', NUMERIC, PTR) #: sys_listen = SyscallDef('sys_listen', NUMERIC, NUMERIC) #: sys_poll = SyscallDef('sys_poll', PTR, NUMERIC, NUMERIC) #: sys_select = SyscallDef('sys_select', NUMERIC, PTR, PTR, PTR, PTR) #: sys_old_select = SyscallDef('sys_old_select', PTR) #: sys_epoll_create = SyscallDef('sys_epoll_create', NUMERIC) #: sys_epoll_create1 = SyscallDef('sys_epoll_create1', NUMERIC) #: sys_epoll_ctl = SyscallDef('sys_epoll_ctl', NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_epoll_wait = SyscallDef('sys_epoll_wait', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_epoll_pwait = SyscallDef('sys_epoll_pwait', NUMERIC, PTR, NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_gethostname = SyscallDef('sys_gethostname', CHARP, NUMERIC) #: sys_sethostname = SyscallDef('sys_sethostname', CHARP, NUMERIC) #: sys_setdomainname = SyscallDef('sys_setdomainname', CHARP, NUMERIC) #: sys_newuname = SyscallDef('sys_newuname', PTR) #: sys_uname = SyscallDef('sys_uname', PTR) #: sys_olduname = SyscallDef('sys_olduname', PTR) #: sys_getrlimit = SyscallDef('sys_getrlimit', NUMERIC, PTR) #: sys_old_getrlimit = SyscallDef('sys_old_getrlimit', NUMERIC, PTR) #: sys_setrlimit = SyscallDef('sys_setrlimit', NUMERIC, PTR) #: sys_prlimit64 = SyscallDef('sys_prlimit64', NUMERIC, NUMERIC, PTR, PTR) #: sys_getrusage = SyscallDef('sys_getrusage', NUMERIC, PTR) #: sys_umask = SyscallDef('sys_umask', NUMERIC) #: sys_msgget = SyscallDef('sys_msgget', NUMERIC, NUMERIC) #: sys_msgsnd = SyscallDef('sys_msgsnd', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_msgrcv = SyscallDef('sys_msgrcv', NUMERIC, PTR, NUMERIC, NUMERIC, NUMERIC) #: sys_msgctl = SyscallDef('sys_msgctl', NUMERIC, NUMERIC, PTR) #: sys_semget = SyscallDef('sys_semget', NUMERIC, NUMERIC, NUMERIC) #: sys_semop = SyscallDef('sys_semop', NUMERIC, PTR, NUMERIC) #: sys_semctl = SyscallDef('sys_semctl', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_semtimedop = SyscallDef('sys_semtimedop', NUMERIC, PTR, NUMERIC, PTR) #: sys_shmat = SyscallDef('sys_shmat', NUMERIC, CHARP, NUMERIC) #: sys_shmget = SyscallDef('sys_shmget', NUMERIC, NUMERIC, NUMERIC) #: sys_shmdt = SyscallDef('sys_shmdt', CHARP) #: sys_shmctl = SyscallDef('sys_shmctl', NUMERIC, NUMERIC, PTR) #: sys_ipc = SyscallDef('sys_ipc', NUMERIC, NUMERIC, NUMERIC, NUMERIC, PTR, NUMERIC) #: sys_mq_open = SyscallDef('sys_mq_open', CHARP, NUMERIC, NUMERIC, PTR) #: sys_mq_unlink = SyscallDef('sys_mq_unlink', CHARP) #: sys_mq_timedsend = SyscallDef('sys_mq_timedsend', NUMERIC, CHARP, NUMERIC, NUMERIC, PTR) #: sys_mq_timedreceive = SyscallDef('sys_mq_timedreceive', NUMERIC, CHARP, NUMERIC, PTR, PTR) #: sys_mq_notify = SyscallDef('sys_mq_notify', NUMERIC, PTR) #: sys_mq_getsetattr = SyscallDef('sys_mq_getsetattr', NUMERIC, PTR, PTR) #: sys_pciconfig_iobase = SyscallDef('sys_pciconfig_iobase', NUMERIC, NUMERIC, NUMERIC) #: sys_pciconfig_read = SyscallDef('sys_pciconfig_read', NUMERIC, NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_pciconfig_write = SyscallDef('sys_pciconfig_write', NUMERIC, NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_prctl = SyscallDef('sys_prctl', NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_swapon = SyscallDef('sys_swapon', CHARP, NUMERIC) #: sys_swapoff = SyscallDef('sys_swapoff', CHARP) #: sys_sysctl = SyscallDef('sys_sysctl', PTR) #: sys_sysinfo = SyscallDef('sys_sysinfo', PTR) #: sys_sysfs = SyscallDef('sys_sysfs', NUMERIC, NUMERIC, NUMERIC) #: sys_nfsservctl = SyscallDef(NUMERIC, PTR, PTR) #: sys_syslog = SyscallDef('sys_syslog', NUMERIC, CHARP, NUMERIC) #: sys_uselib = SyscallDef('sys_uselib', CHARP) #: sys_ni_syscall = SyscallDef('sys_ni_syscall') #: sys_ptrace = SyscallDef('sys_ptrace', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_add_key = SyscallDef('sys_add_key', CHARP, CHARP, PTR, NUMERIC, NUMERIC) #: sys_request_key = SyscallDef('sys_request_key', CHARP, CHARP, CHARP, NUMERIC) #: sys_keyctl = SyscallDef('sys_keyctl', NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_ioprio_set = SyscallDef('sys_ioprio_set', NUMERIC, NUMERIC, NUMERIC) #: sys_ioprio_get = SyscallDef('sys_ioprio_get', NUMERIC, NUMERIC) #: sys_set_mempolicy = SyscallDef('sys_set_mempolicy', NUMERIC, PTR, NUMERIC) #: sys_migrate_pages = SyscallDef('sys_migrate_pages', NUMERIC, NUMERIC, PTR, PTR) #: sys_move_pages = SyscallDef('sys_move_pages', NUMERIC, NUMERIC, PTR, PTR, PTR, NUMERIC) #: sys_mbind = SyscallDef('sys_mbind', NUMERIC, NUMERIC, NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_get_mempolicy = SyscallDef('sys_get_mempolicy', PTR, PTR, NUMERIC, NUMERIC, NUMERIC) #: sys_inotify_init = SyscallDef('sys_inotify_init') #: sys_inotify_init1 = SyscallDef('sys_inotify_init1', NUMERIC) #: sys_inotify_add_watch = SyscallDef('sys_inotify_add_watch', NUMERIC, CHARP, NUMERIC) #: sys_inotify_rm_watch = SyscallDef('sys_inotify_rm_watch', NUMERIC, NUMERIC) #: sys_spu_run = SyscallDef('sys_spu_run', NUMERIC, PTR, PTR) #: sys_spu_create = SyscallDef('sys_spu_create', CHARP, NUMERIC, NUMERIC, NUMERIC) #: sys_mknodat = SyscallDef('sys_mknodat', NUMERIC, CHARP, NUMERIC, NUMERIC) #: sys_mkdirat = SyscallDef('sys_mkdirat', NUMERIC, CHARP, NUMERIC) #: sys_unlinkat = SyscallDef('sys_unlinkat', NUMERIC, CHARP, NUMERIC) #: sys_symlinkat = SyscallDef('sys_symlinkat', CHARP, NUMERIC, CHARP) #: sys_linkat = SyscallDef('sys_linkat', NUMERIC, CHARP, NUMERIC, CHARP, NUMERIC) #: sys_renameat = SyscallDef('sys_renameat', NUMERIC, CHARP, NUMERIC, CHARP) #: sys_renameat2 = SyscallDef('sys_renameat2', NUMERIC, CHARP, NUMERIC, CHARP, NUMERIC) #: sys_futimesat = SyscallDef('sys_futimesat', NUMERIC, CHARP, PTR) #: sys_faccessat = SyscallDef('sys_faccessat', NUMERIC, CHARP, NUMERIC) #: sys_fchmodat = SyscallDef('sys_fchmodat', NUMERIC, CHARP, NUMERIC) #: sys_fchownat = SyscallDef('sys_fchownat', NUMERIC, CHARP, NUMERIC, NUMERIC, NUMERIC) #: sys_openat = SyscallDef('sys_openat', NUMERIC, CHARP, NUMERIC, NUMERIC) #: sys_newfstatat = SyscallDef('sys_newfstatat', NUMERIC, CHARP, PTR, NUMERIC) #: sys_readlinkat = SyscallDef('sys_readlinkat', NUMERIC, CHARP, CHARP, NUMERIC) #: sys_utimensat = SyscallDef('sys_utimensat', NUMERIC, CHARP, PTR, NUMERIC) #: sys_unshare = SyscallDef('sys_unshare', NUMERIC) #: sys_splice = SyscallDef('sys_splice', NUMERIC, PTR, NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_vmsplice = SyscallDef('sys_vmsplice', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_tee = SyscallDef('sys_tee', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_sync_file_range = SyscallDef('sys_sync_file_range', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_sync_file_range2 = SyscallDef('sys_sync_file_range2', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_get_robust_list = SyscallDef('sys_get_robust_list', NUMERIC, PTR, PTR) #: sys_set_robust_list = SyscallDef('sys_set_robust_list', PTR, NUMERIC) #: sys_getcpu = SyscallDef('sys_getcpu', PTR, PTR, PTR) #: sys_signalfd = SyscallDef('sys_signalfd', NUMERIC, PTR, NUMERIC) #: sys_signalfd4 = SyscallDef('sys_signalfd4', NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_timerfd_create = SyscallDef('sys_timerfd_create', NUMERIC, NUMERIC) #: sys_timerfd_settime = SyscallDef('sys_timerfd_settime', NUMERIC, NUMERIC, PTR, PTR) #: sys_timerfd_gettime = SyscallDef('sys_timerfd_gettime', NUMERIC, PTR) #: sys_eventfd = SyscallDef('sys_eventfd', NUMERIC) #: sys_eventfd2 = SyscallDef('sys_eventfd2', NUMERIC, NUMERIC) #: sys_memfd_create = SyscallDef('sys_memfd_create', CHARP, NUMERIC) #: sys_userfaultfd = SyscallDef('sys_userfaultfd', NUMERIC) #: sys_fallocate = SyscallDef('sys_fallocate', NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_old_readdir = SyscallDef('sys_old_readdir', NUMERIC, PTR, NUMERIC) #: sys_pselect6 = SyscallDef('sys_pselect6', NUMERIC, PTR, PTR, PTR, PTR, PTR) #: sys_ppoll = SyscallDef('sys_ppoll', PTR, NUMERIC, PTR, PTR, NUMERIC) #: sys_fanotify_init = SyscallDef('sys_fanotify_init', NUMERIC, NUMERIC) #: sys_fanotify_mark = SyscallDef('sys_fanotify_mark', NUMERIC, NUMERIC, NUMERIC, NUMERIC, PTR) #: sys_syncfs = SyscallDef('sys_syncfs', NUMERIC) #: sys_fork = SyscallDef('sys_fork') #: sys_vfork = SyscallDef('sys_vfork') #: sys_clone = SyscallDef('sys_clone', NUMERIC, NUMERIC, PTR, PTR, NUMERIC) #: sys_execve = SyscallDef('sys_execve', CHARP, CHARPP, CHARPP) #: sys_perf_event_open = SyscallDef('sys_perf_event_open', PTR, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_mmap2 = SyscallDef('sys_mmap2', PTR, NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_old_mmap = SyscallDef('sys_mmap', PTR) #: sys_name_to_handle_at = SyscallDef('sys_name_to_handle_at', NUMERIC, CHARP, PTR, PTR, NUMERIC) #: sys_open_by_handle_at = SyscallDef('sys_open_by_handle_at', NUMERIC, PTR, NUMERIC) #: sys_setns = SyscallDef('sys_setns', NUMERIC, NUMERIC) #: sys_process_vm_readv = SyscallDef('sys_process_vm_readv', NUMERIC, PTR, NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_process_vm_writev = SyscallDef('sys_process_vm_writev', NUMERIC, PTR, NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_kcmp = SyscallDef('sys_kcmp', NUMERIC, NUMERIC, NUMERIC, NUMERIC, NUMERIC) #: sys_finit_module = SyscallDef('sys_finit_module', NUMERIC, CHARP, NUMERIC) #: sys_seccomp = SyscallDef('sys_seccomp', NUMERIC, NUMERIC, CHARP) #: sys_getrandom = SyscallDef('sys_getrandom', CHARP, NUMERIC, NUMERIC) #: sys_bpf = SyscallDef('sys_bpf', NUMERIC, PTR, NUMERIC) #: sys_execveat = SyscallDef('sys_execveat', NUMERIC, CHARP, CHARPP, CHARPP, NUMERIC) #: sys_membarrier = SyscallDef('sys_membarrier', NUMERIC, NUMERIC) #: sys_copy_file_range = SyscallDef('sys_copy_file_range', NUMERIC, PTR, NUMERIC, PTR, NUMERIC, NUMERIC) #: sys_mlock2 = SyscallDef('sys_mlock2', NUMERIC, NUMERIC, NUMERIC) #: @property def SYSCALL_ARG_MAP(self): raise NotImplementedError('Target does not define a syscall argument mapping') @property def SYSCALL_REG(self): raise NotImplementedError('Target does not define a syscall register') @property def SYSCALL_INSTR(self): raise NotImplementedError('Target does not define a syscall instruction') @property def SYSCALL_MAP(self): raise NotImplementedError('Target does not define a syscall mapping') def syscall(self, op): code = [] def handle_arg(reg, arg): if isinstance(arg, SyscallInvoke): code.extend( self.syscall(arg) + self.reg_push(self.SYSCALL_RET_REG) ) return self.reg_pop(reg) else: return self.reg_load(reg, arg) arg_code = [] for arg_reg, arg_value in reversed(list(zip(self.SYSCALL_ARG_MAP, op.args))): arg_code.extend(handle_arg(arg_reg, arg_value)) code.extend(arg_code) return code + \ self.reg_load(self.SYSCALL_REG, self.SYSCALL_MAP[op.syscall_def]) + \ [self.SYSCALL_INSTR] def __init__(self, *args, **kwargs): super(Linux, self).__init__(*args, **kwargs) # Compatibility back-fills if self.sys_socketcall in self.SYSCALL_MAP: def gen_socketcall_wrap(socketcall_nr): return lambda *args: self.sys_socketcall(socketcall_nr, list(args)) for syscall_name, socketcall_nr in ( ('sys_socket', 1), ('sys_bind', 2), ('sys_connect', 3), ('sys_listen', 4), ('sys_accept', 5), ('sys_getsockname', 6), ('sys_getpeername', 7), ('sys_socketpair', 8), ('sys_send', 9), ('sys_recv', 10), ('sys_sendto', 11), ('sys_recvfrom', 12), ('sys_shutdown', 13), ('sys_setsockopt', 14), ('sys_getsockopt', 15), ('sys_sendmsg', 16), ('sys_recvmsg', 17), ('sys_accept4', 18), ): syscall = getattr(self, syscall_name) if not syscall in self.SYSCALL_MAP: setattr(self, syscall_name, gen_socketcall_wrap(socketcall_nr)) if self.sys_dup2 not in self.SYSCALL_MAP and self.sys_dup3 in self.SYSCALL_MAP: self.sys_dup2 = lambda old_fd, new_fd: self.sys_dup3(old_fd, new_fd, 0) if self.sys_accept not in self.SYSCALL_MAP and self.sys_accept4 in self.SYSCALL_MAP: self.sys_accept = lambda *args: self.sys_accept4(*(args + (0,)))