ps4delta/code/delta/core/kern/lv2/lv2.cpp
2020-01-19 00:01:14 +01:00

761 lines
No EOL
34 KiB
C++

/*
* PS4Delta : PS4 emulation and research project
*
* Copyright 2019-2020 Force67.
* For information regarding licensing see LICENSE
* in the root of the source tree.
*/
#include <cstdint>
#include <cstdio>
#include <intrin.h>
#include <xbyak.h>
#include "sys_debug.h"
#include "sys_dynlib.h"
#include "sys_generic.h"
#include "sys_info.h"
#include "sys_mem.h"
#include "sys_thread.h"
#include "sys_vfs.h"
#include "sys_net.h"
#include "kern/module.h"
#include "kern/proc.h"
namespace krnl {
const char *syscall_getname(uint32_t idx);
int sys_write(uint32_t fd, const void *buf, size_t nbytes);
int sys_sigprocmask(int, const int *, int *);
int sys_sigaction(int how, void (*cb)(void *, void *, void *));
int sys_regmgr_call(uint32_t op, uint32_t id, void *result, void *value,
uint64_t type);
int sys_namedobj_create(const char *name, void *arg2, uint32_t arg3);
int sys_namedobj_delete();
int sys_budget_get_ptype();
int sys_getpid();
int sys_exit();
int sys_rfork();
int sys_execve();
int PS4ABI sys_sysarch(int num, void *args);
moduleInfo *called_in(void *addr) {
uintptr_t addrsafe = (uintptr_t)addr;
for (auto &mod : proc::getActive()->getModuleList()) {
auto &info = mod->getInfo();
if (addrsafe <= (uintptr_t)(info.base + info.codeSize) &&
(addrsafe >= (uintptr_t)info.base)) {
std::printf("%p called in %s\n", addr, info.name.c_str());
return &info;
}
}
return nullptr;
}
static int PS4ABI null_handler() {
void *ret = _ReturnAddress();
called_in(ret);
std::printf(">>>>>>>>>>>>> NULL HANDLER CALLED BY %p\n", ret);
return 0;
}
static int PS4ABI null_handler_notable() {
void *ret = _ReturnAddress();
called_in(ret);
std::printf(">>>>>>>>>>>>> NULL HANDLER NULLTABLE CALLED BY %p\n", ret);
return 0;
}
struct syscall_Reg {
uint32_t id;
const void *ptr;
};
static const syscall_Reg syscall_dpt[] = {
{0, (void *)&null_handler}, // sys_nosys
{1, (void *)&sys_exit},
{2, (void *)&null_handler}, // sys_fork
{3, (void *)&null_handler}, // sys_read
{4, (void *)&sys_write},
{5, (void *)&sys_open},
{6, (void *)&sys_close},
{7, (void *)&null_handler}, // sys_wait4
{8, (void *)&null_handler}, // sys_creat
{9, (void *)&null_handler}, // sys_link
{10, (void *)&null_handler}, // sys_unlink
{11, (void *)&null_handler}, // sys_execv
{12, (void *)&null_handler}, // sys_chdir
{13, (void *)&null_handler}, // sys_fchdir
{14, (void *)&null_handler}, // sys_mkd
{15, (void *)&null_handler}, // sys_chmod
{16, (void *)&null_handler}, // sys_chown
{17, (void *)&null_handler}, // sys_obreak
{18, (void *)&null_handler}, // sys_getfsstat
{19, (void *)&null_handler}, // sys_lseek
{20, (void *)&sys_getpid},
{21, (void *)&null_handler}, // sys_mount
{22, (void *)&null_handler}, // sys_unmount
{23, (void *)&null_handler}, // sys_setuid
{24, (void *)&null_handler}, // sys_getuid
{25, (void *)&null_handler}, // sys_geteuid
{26, (void *)&null_handler}, // sys_ptrace
{27, (void *)&null_handler}, // sys_recvmsg
{28, (void *)&null_handler}, // sys_sendmsg
{29, (void *)&null_handler}, // sys_recvfrom
{30, (void *)&null_handler}, // sys_accept
{31, (void *)&null_handler}, // sys_getpeername
{32, (void *)&null_handler}, // sys_getsockname
{33, (void *)&null_handler}, // sys_access
{34, (void *)&null_handler}, // sys_chflags
{35, (void *)&null_handler}, // sys_fchflags
{36, (void *)&null_handler}, // sys_sync
{37, (void *)&null_handler}, // sys_kill
{38, (void *)&null_handler}, // sys_stat
{39, (void *)&null_handler}, // sys_getppid
{40, (void *)&null_handler}, // sys_lstat
{41, (void *)&null_handler}, // sys_dup
{42, (void *)&null_handler}, // sys_pipe
{43, (void *)&null_handler}, // sys_getegid
{44, (void *)&null_handler}, // sys_profil
{45, (void *)&null_handler}, // sys_ktrace
{46, (void *)&sys_sigaction},
{47, (void *)&null_handler}, // sys_getgid
{48, (void *)&sys_sigprocmask},
{49, (void *)&null_handler}, // sys_getlogin
{50, (void *)&null_handler}, // sys_setlogin
{51, (void *)&null_handler}, // sys_acct
{52, (void *)&null_handler}, // sys_sigpending
{53, (void *)&null_handler}, // sys_sigaltstack
{54, (void *)&sys_ioctl},
{55, (void *)&null_handler}, // sys_reboot
{56, (void *)&null_handler}, // sys_revoke
{57, (void *)&null_handler}, // sys_symlink
{58, (void *)&null_handler}, // sys_readlink
{59, (void *)&sys_execve},
{60, (void *)&null_handler}, // sys_umask
{61, (void *)&null_handler}, // sys_chroot
{62, (void *)&null_handler}, // sys_fstat
{63, (void *)&null_handler}, // sys_getkerninfo
{64, (void *)&null_handler}, // sys_getpagesize
{65, (void *)&null_handler}, // sys_msync
{66, (void *)&null_handler}, // sys_vfork
{67, (void *)&null_handler}, // sys_vread
{68, (void *)&null_handler}, // sys_vwrite
{69, (void *)&null_handler}, // sys_sbrk
{70, (void *)&null_handler}, // sys_sstk
{71, (void *)&sys_mmap},
{72, (void *)&null_handler}, // sys_ovadvise
{73, (void *)&null_handler}, // sys_munmap
{74, (void *)&sys_mprotect},
{75, (void *)&null_handler}, // sys_madvise
{76, (void *)&null_handler}, // sys_vhangup
{77, (void *)&null_handler}, // sys_vlimit
{78, (void *)&null_handler}, // sys_mincore
{79, (void *)&null_handler}, // sys_getgroups
{80, (void *)&null_handler}, // sys_setgroups
{81, (void *)&null_handler}, // sys_getpgrp
{82, (void *)&null_handler}, // sys_setpgid
{83, (void *)&null_handler}, // sys_setitimer
{84, (void *)&null_handler}, // sys_wait
{85, (void *)&null_handler}, // sys_swapon
{86, (void *)&null_handler}, // sys_getitimer
{87, (void *)&null_handler}, // sys_gethostname
{88, (void *)&null_handler}, // sys_sethostname
{89, (void *)&null_handler}, // sys_getdtablesize
{90, (void *)&null_handler}, // sys_dup2
{91, (void *)&null_handler}, // sys_getdopt
{92, (void *)&null_handler}, // sys_fcntl
{93, (void *)&null_handler}, // sys_select
{94, (void *)&null_handler}, // sys_setdopt
{95, (void *)&null_handler}, // sys_fsync
{96, (void *)&null_handler}, // sys_setpriority
{97, (void *)&null_handler}, // sys_socket
{98, (void *)&null_handler}, // sys_connect
{99, (void *)&sys_netcontrol},
{100, (void *)&null_handler}, // sys_getpriority
{101, (void *)&null_handler}, // sys_netabort
{102, (void *)&null_handler}, // sys_netgetsockinfo
{103, (void *)&null_handler}, // sys_sigreturn
{104, (void *)&null_handler}, // sys_bind
{105, (void *)&null_handler}, // sys_setsockopt
{106, (void *)&null_handler}, // sys_listen
{107, (void *)&null_handler}, // sys_vtimes
{108, (void *)&null_handler}, // sys_sigvec
{109, (void *)&null_handler}, // sys_sigblock
{110, (void *)&null_handler}, // sys_sigsetmask
{111, (void *)&null_handler}, // sys_sigsuspend
{112, (void *)&null_handler}, // sys_sigstack
{113, (void *)&sys_socketex},
{114, (void *)&null_handler}, // sys_socketclose
{115, (void *)&null_handler}, // sys_vtrace
{116, (void *)&null_handler}, // sys_gettimeofday
{117, (void *)&null_handler}, // sys_getrusage
{118, (void *)&null_handler}, // sys_getsockopt
{119, (void *)&null_handler}, // sys_resuba
{120, (void *)&null_handler}, // sys_readv
{121, (void *)&null_handler}, // sys_writev
{122, (void *)&null_handler}, // sys_settimeofday
{123, (void *)&null_handler}, // sys_fchown
{124, (void *)&null_handler}, // sys_fchmod
{125, (void *)&null_handler}, // sys_netgetiflist
{126, (void *)&null_handler}, // sys_setreuid
{127, (void *)&null_handler}, // sys_setregid
{128, (void *)&null_handler}, // sys_rename
{129, (void *)&null_handler}, // sys_truncate
{130, (void *)&null_handler}, // sys_ftruncate
{131, (void *)&null_handler}, // sys_flock
{132, (void *)&null_handler}, // sys_mkfifo
{133, (void *)&null_handler}, // sys_sendto
{134, (void *)&null_handler}, // sys_shutdown
{135, (void *)&null_handler}, // sys_socketpair
{136, (void *)&null_handler}, // sys_mkdir
{137, (void *)&null_handler}, // sys_rmdir
{138, (void *)&null_handler}, // sys_utimes
{139, (void *)&null_handler}, // sys_sigreturn
{140, (void *)&null_handler}, // sys_adjtime
{141, (void *)&null_handler}, // sys_kqueueex
{142, (void *)&null_handler}, // sys_gethostid
{143, (void *)&null_handler}, // sys_sethostid
{144, (void *)&null_handler}, // sys_getrlimit
{145, (void *)&null_handler}, // sys_setrlimit
{146, (void *)&null_handler}, // sys_killpg
{147, (void *)&null_handler}, // sys_setsid
{148, (void *)&null_handler}, // sys_quotactl
{149, (void *)&null_handler}, // sys_quota
{150, (void *)&null_handler}, // sys_getsockname
{151, (void *)&null_handler}, // sys_sem_lock
{152, (void *)&null_handler}, // sys_sem_wakeup
{153, (void *)&null_handler}, // sys_asyncdaemon
{154, (void *)&null_handler}, // sys_nlm_syscall
{155, (void *)&null_handler}, // sys_nfssvc
{156, (void *)&null_handler}, // sys_getdirentries
{157, (void *)&null_handler}, // sys_statfs
{158, (void *)&null_handler}, // sys_fstatfs
{160, (void *)&null_handler}, // sys_lgetfh
{161, (void *)&null_handler}, // sys_getfh
{162, (void *)&null_handler}, // sys_getdomainname
{163, (void *)&null_handler}, // sys_setdomainname
{164, (void *)&null_handler}, // sys_uname
{165, (void *)&sys_sysarch},
{166, (void *)&null_handler}, // sys_rtprio
{169, (void *)&null_handler}, // sys_semsys
{170, (void *)&null_handler}, // sys_msgsys
{171, (void *)&null_handler}, // sys_shmsys
{173, (void *)&null_handler}, // sys_pread
{174, (void *)&null_handler}, // sys_pwrite
{175, (void *)&null_handler}, // sys_setfib
{176, (void *)&null_handler}, // sys_ntp_adjtime
{177, (void *)&null_handler}, // sys_sfork
{178, (void *)&null_handler}, // sys_getdescriptor
{179, (void *)&null_handler}, // sys_setdescriptor
{181, (void *)&null_handler}, // sys_setgid
{182, (void *)&null_handler}, // sys_setegid
{183, (void *)&null_handler}, // sys_seteuid
{184, (void *)&null_handler}, // sys_lfs_bmapv
{185, (void *)&null_handler}, // sys_lfs_markv
{186, (void *)&null_handler}, // sys_lfs_segclean
{187, (void *)&null_handler}, // sys_lfs_segwait
{188, (void *)&null_handler}, // sys_stat
{189, (void *)&null_handler}, // sys_fstat
{190, (void *)&null_handler}, // sys_lstat
{191, (void *)&null_handler}, // sys_pathconf
{192, (void *)&null_handler}, // sys_fpathconf
{194, (void *)&null_handler}, // sys_getrlimit
{195, (void *)&null_handler}, // sys_setrlimit
{196, (void *)&null_handler}, // sys_getdirentries
{197, (void *)&sys_mmap},
{198, (void *)&null_handler}, // sys_nosys
{199, (void *)&null_handler}, // sys_lseek
{200, (void *)&null_handler}, // sys_truncate
{201, (void *)&null_handler}, // sys_ftruncate
{202, (void *)&sys_sysctl},
{203, (void *)&null_handler}, // sys_mlock
{204, (void *)&null_handler}, // sys_munlock
{205, (void *)&null_handler}, // sys_undelete
{206, (void *)&null_handler}, // sys_futimes
{207, (void *)&null_handler}, // sys_getpgid
{208, (void *)&null_handler}, // sys_newreboot
{209, (void *)&null_handler}, // sys_poll
{220, (void *)&null_handler}, // sys_semctl
{221, (void *)&null_handler}, // sys_semget
{222, (void *)&null_handler}, // sys_semop
{223, (void *)&null_handler}, // sys_semconfig
{224, (void *)&null_handler}, // sys_msgctl
{225, (void *)&null_handler}, // sys_msgget
{226, (void *)&null_handler}, // sys_msgsnd
{227, (void *)&null_handler}, // sys_msgrcv
{228, (void *)&null_handler}, // sys_shmat
{229, (void *)&null_handler}, // sys_shmctl
{230, (void *)&null_handler}, // sys_shmdt
{231, (void *)&null_handler}, // sys_shmget
{232, (void *)&null_handler}, // sys_clock_gettime
{233, (void *)&null_handler}, // sys_clock_settime
{234, (void *)&null_handler}, // sys_clock_getres
{235, (void *)&null_handler}, // sys_ktimer_create
{236, (void *)&null_handler}, // sys_ktimer_delete
{237, (void *)&null_handler}, // sys_ktimer_settime
{238, (void *)&null_handler}, // sys_ktimer_gettime
{239, (void *)&null_handler}, // sys_ktimer_getoverrun
{240, (void *)&null_handler}, // sys_nanosleep
{241, (void *)&null_handler}, // sys_ffclock_getcounter
{242, (void *)&null_handler}, // sys_ffclock_setestimate
{243, (void *)&null_handler}, // sys_ffclock_getestimate
{247, (void *)&null_handler}, // sys_clock_getcpuclockid2
{248, (void *)&null_handler}, // sys_ntp_gettime
{250, (void *)&null_handler}, // sys_minherit
{251, (void *)&sys_rfork},
{252, (void *)&null_handler}, // sys_openbsd_poll
{253, (void *)&null_handler}, // sys_issetugid
{254, (void *)&null_handler}, // sys_lchown
{255, (void *)&null_handler}, // sys_aio_read
{256, (void *)&null_handler}, // sys_aio_write
{257, (void *)&null_handler}, // sys_lio_listio
{272, (void *)&null_handler}, // sys_getdents
{274, (void *)&null_handler}, // sys_lchmod
{275, (void *)&null_handler}, // sys_lchown
{276, (void *)&null_handler}, // sys_lutimes
{277, (void *)&null_handler}, // sys_msync
{278, (void *)&null_handler}, // sys_nstat
{279, (void *)&null_handler}, // sys_nfstat
{280, (void *)&null_handler}, // sys_nlstat
{289, (void *)&null_handler}, // sys_preadv
{290, (void *)&null_handler}, // sys_pwritev
{297, (void *)&null_handler}, // sys_fhstatfs
{298, (void *)&null_handler}, // sys_fhopen
{299, (void *)&null_handler}, // sys_fhstat
{300, (void *)&null_handler}, // sys_modnext
{301, (void *)&null_handler}, // sys_modstat
{302, (void *)&null_handler}, // sys_modfnext
{303, (void *)&null_handler}, // sys_modfind
{304, (void *)&null_handler}, // sys_kldload
{305, (void *)&null_handler}, // sys_kldunload
{306, (void *)&null_handler}, // sys_kldfind
{307, (void *)&null_handler}, // sys_kldnext
{308, (void *)&null_handler}, // sys_kldstat
{309, (void *)&null_handler}, // sys_kldfirstmod
{310, (void *)&null_handler}, // sys_getsid
{311, (void *)&null_handler}, // sys_setresuid
{312, (void *)&null_handler}, // sys_setresgid
{313, (void *)&null_handler}, // sys_signasleep
{314, (void *)&null_handler}, // sys_aio_return
{315, (void *)&null_handler}, // sys_aio_suspend
{316, (void *)&null_handler}, // sys_aio_cancel
{317, (void *)&null_handler}, // sys_aio_error
{318, (void *)&null_handler}, // sys_aio_read
{319, (void *)&null_handler}, // sys_aio_write
{320, (void *)&null_handler}, // sys_lio_listio
{321, (void *)&null_handler}, // sys_yield
{322, (void *)&null_handler}, // sys_thr_sleep
{323, (void *)&null_handler}, // sys_thr_wakeup
{324, (void *)&null_handler}, // sys_mlockall
{325, (void *)&null_handler}, // sys_munlockall
{326, (void *)&null_handler}, // sys_getcwd
{327, (void *)&null_handler}, // sys_sched_setparam
{328, (void *)&null_handler}, // sys_sched_getparam
{329, (void *)&null_handler}, // sys_sched_setscheduler
{330, (void *)&null_handler}, // sys_sched_getscheduler
{331, (void *)&null_handler}, // sys_sched_yield
{332, (void *)&null_handler}, // sys_sched_get_priority_max
{333, (void *)&null_handler}, // sys_sched_get_priority_min
{334, (void *)&null_handler}, // sys_sched_rr_get_interval
{335, (void *)&null_handler}, // sys_utrace
{336, (void *)&null_handler}, // sys_sendfile
{337, (void *)&null_handler}, // sys_kldsym
{338, (void *)&null_handler}, // sys_jail
{339, (void *)&null_handler}, // sys_nnpfs_syscall
{340, (void *)&sys_sigprocmask},
{341, (void *)&null_handler}, // sys_sigsuspend
{342, (void *)&sys_sigaction},
{343, (void *)&null_handler}, // sys_sigpending
{344, (void *)&null_handler}, // sys_sigreturn
{345, (void *)&null_handler}, // sys_sigtimedwait
{346, (void *)&null_handler}, // sys_sigwaitinfo
{347, (void *)&null_handler}, // sys_acl_get_file
{348, (void *)&null_handler}, // sys_acl_set_file
{349, (void *)&null_handler}, // sys_acl_get_fd
{350, (void *)&null_handler}, // sys_acl_set_fd
{351, (void *)&null_handler}, // sys_acl_delete_file
{352, (void *)&null_handler}, // sys_acl_delete_fd
{353, (void *)&null_handler}, // sys_acl_aclcheck_file
{354, (void *)&null_handler}, // sys_acl_aclcheck_fd
{355, (void *)&null_handler}, // sys_extattrctl
{356, (void *)&null_handler}, // sys_extattr_set_file
{357, (void *)&null_handler}, // sys_extattr_get_file
{358, (void *)&null_handler}, // sys_extattr_delete_file
{359, (void *)&null_handler}, // sys_aio_waitcomplete
{360, (void *)&null_handler}, // sys_getresuid
{361, (void *)&null_handler}, // sys_getresgid
{362, (void *)&null_handler}, // sys_kqueue
{363, (void *)&null_handler}, // sys_kevent
{364, (void *)&null_handler}, // sys_cap_get_proc
{365, (void *)&null_handler}, // sys_cap_set_proc
{366, (void *)&null_handler}, // sys_cap_get_fd
{367, (void *)&null_handler}, // sys_cap_get_file
{368, (void *)&null_handler}, // sys_cap_set_fd
{369, (void *)&null_handler}, // sys_cap_set_file
{371, (void *)&null_handler}, // sys_extattr_set_fd
{372, (void *)&null_handler}, // sys_extattr_get_fd
{373, (void *)&null_handler}, // sys_extattr_delete_fd
{374, (void *)&null_handler}, // sys_setugid
{375, (void *)&null_handler}, // sys_nfsclnt
{376, (void *)&null_handler}, // sys_eaccess
{377, (void *)&null_handler}, // sys_afs3_syscall
{378, (void *)&null_handler}, // sys_nmount
{379, (void *)&null_handler}, // sys_mtypeprotect
{380, (void *)&null_handler}, // sys_kse_wakeup
{381, (void *)&null_handler}, // sys_kse_create
{382, (void *)&null_handler}, // sys_kse_thr_interrupt
{383, (void *)&null_handler}, // sys_kse_release
{384, (void *)&null_handler}, // sys_mac_get_proc
{385, (void *)&null_handler}, // sys_mac_set_proc
{386, (void *)&null_handler}, // sys_mac_get_fd
{387, (void *)&null_handler}, // sys_mac_get_file
{388, (void *)&null_handler}, // sys_mac_set_fd
{389, (void *)&null_handler}, // sys_mac_set_file
{390, (void *)&null_handler}, // sys_kenv
{391, (void *)&null_handler}, // sys_lchflags
{392, (void *)&null_handler}, // sys_uuidgen
{393, (void *)&null_handler}, // sys_sendfile
{394, (void *)&null_handler}, // sys_mac_syscall
{395, (void *)&null_handler}, // sys_getfsstat
{396, (void *)&null_handler}, // sys_statfs
{397, (void *)&null_handler}, // sys_fstatfs
{398, (void *)&null_handler}, // sys_fhstatfs
{400, (void *)&null_handler}, // sys_ksem_close
{401, (void *)&null_handler}, // sys_ksem_post
{402, (void *)&null_handler}, // sys_ksem_wait
{403, (void *)&null_handler}, // sys_ksem_trywait
{404, (void *)&null_handler}, // sys_ksem_init
{405, (void *)&null_handler}, // sys_ksem_open
{406, (void *)&null_handler}, // sys_ksem_unlink
{407, (void *)&null_handler}, // sys_ksem_getvalue
{408, (void *)&null_handler}, // sys_ksem_destroy
{409, (void *)&null_handler}, // sys_mac_get_pid
{410, (void *)&null_handler}, // sys_mac_get_link
{411, (void *)&null_handler}, // sys_mac_set_link
{412, (void *)&null_handler}, // sys_extattr_set_link
{413, (void *)&null_handler}, // sys_extattr_get_link
{414, (void *)&null_handler}, // sys_extattr_delete_link
{415, (void *)&null_handler}, // sys_mac_execve
{416, (void *)&sys_sigaction},
{417, (void *)&null_handler}, // sys_sigreturn
{418, (void *)&null_handler}, // sys_xstat
{419, (void *)&null_handler}, // sys_xfstat
{420, (void *)&null_handler}, // sys_xlstat
{421, (void *)&null_handler}, // sys_getcontext
{422, (void *)&null_handler}, // sys_setcontext
{423, (void *)&null_handler}, // sys_swapcontext
{424, (void *)&null_handler}, // sys_swapoff
{425, (void *)&null_handler}, // sys_acl_get_link
{426, (void *)&null_handler}, // sys_acl_set_link
{427, (void *)&null_handler}, // sys_acl_delete_link
{428, (void *)&null_handler}, // sys_acl_aclcheck_link
{429, (void *)&null_handler}, // sys_sigwait
{430, (void *)&null_handler}, // sys_thr_create
{431, (void *)&null_handler}, // sys_thr_exit
{432, (void *)&sys_thr_self},
{433, (void *)&null_handler}, // sys_thr_kill
{436, (void *)&null_handler}, // sys_jail_attach
{437, (void *)&null_handler}, // sys_extattr_list_fd
{438, (void *)&null_handler}, // sys_extattr_list_file
{439, (void *)&null_handler}, // sys_extattr_list_link
{440, (void *)&null_handler}, // sys_kse_switchin
{441, (void *)&null_handler}, // sys_ksem_timedwait
{442, (void *)&null_handler}, // sys_thr_suspend
{443, (void *)&null_handler}, // sys_thr_wake
{444, (void *)&null_handler}, // sys_kldunloadf
{445, (void *)&null_handler}, // sys_audit
{446, (void *)&null_handler}, // sys_auditon
{447, (void *)&null_handler}, // sys_getauid
{448, (void *)&null_handler}, // sys_setauid
{449, (void *)&null_handler}, // sys_getaudit
{450, (void *)&null_handler}, // sys_setaudit
{451, (void *)&null_handler}, // sys_getaudit_addr
{452, (void *)&null_handler}, // sys_setaudit_addr
{453, (void *)&null_handler}, // sys_auditctl
{454, (void *)&sys_umtx_op},
{455, (void *)&null_handler}, // sys_thr_new
{456, (void *)&null_handler}, // sys_sigqueue
{457, (void *)&null_handler}, // sys_kmq_open
{458, (void *)&null_handler}, // sys_kmq_setattr
{459, (void *)&null_handler}, // sys_kmq_timedreceive
{460, (void *)&null_handler}, // sys_kmq_timedsend
{461, (void *)&null_handler}, // sys_kmq_tify
{462, (void *)&null_handler}, // sys_kmq_unlink
{463, (void *)&null_handler}, // sys_abort2
{464, (void *)&null_handler}, // sys_thr_set_name
{465, (void *)&null_handler}, // sys_aio_fsync
{466, (void *)&sys_rtprio_thread},
{469, (void *)&null_handler}, // sys_getpath_fromfd
{470, (void *)&null_handler}, // sys_getpath_fromaddr
{471, (void *)&null_handler}, // sys_sctp_peeloff
{472, (void *)&null_handler}, // sys_sctp_generic_sendmsg
{473, (void *)&null_handler}, // sys_sctp_generic_sendmsg_iov
{474, (void *)&null_handler}, // sys_sctp_generic_recvmsg
{475, (void *)&null_handler}, // sys_pread
{476, (void *)&null_handler}, // sys_pwrite
{477, (void *)&sys_mmap},
{478, (void *)&null_handler}, // sys_lseek
{479, (void *)&null_handler}, // sys_truncate
{480, (void *)&null_handler}, // sys_ftruncate
{481, (void *)&null_handler}, // sys_thr_kill2
{482, (void *)&null_handler}, // sys_shm_open
{483, (void *)&null_handler}, // sys_shm_unlink
{484, (void *)&null_handler}, // sys_cpuset
{485, (void *)&null_handler}, // sys_cpuset_setid
{486, (void *)&null_handler}, // sys_cpuset_getid
{487, (void *)&sys_cpuset_getaffinity},
{488, (void *)&null_handler}, // sys_cpuset_setaffinity
{489, (void *)&null_handler}, // sys_faccessat
{490, (void *)&null_handler}, // sys_fchmodat
{491, (void *)&null_handler}, // sys_fchownat
{492, (void *)&null_handler}, // sys_fexecve
{493, (void *)&null_handler}, // sys_fstatat
{494, (void *)&null_handler}, // sys_futimesat
{495, (void *)&null_handler}, // sys_linkat
{496, (void *)&null_handler}, // sys_mkdirat
{497, (void *)&null_handler}, // sys_mkfifoat
{498, (void *)&null_handler}, // sys_mkdat
{499, (void *)&null_handler}, // sys_openat
{500, (void *)&null_handler}, // sys_readlinkat
{501, (void *)&null_handler}, // sys_renameat
{502, (void *)&null_handler}, // sys_symlinkat
{503, (void *)&null_handler}, // sys_unlinkat
{504, (void *)&null_handler}, // sys_posix_openpt
{505, (void *)&null_handler}, // sys_gssd_syscall
{506, (void *)&null_handler}, // sys_jail_get
{507, (void *)&null_handler}, // sys_jail_set
{508, (void *)&null_handler}, // sys_jail_remove
{509, (void *)&null_handler}, // sys_closefrom
{510, (void *)&null_handler}, // sys_semctl
{511, (void *)&null_handler}, // sys_msgctl
{512, (void *)&null_handler}, // sys_shmctl
{513, (void *)&null_handler}, // sys_lpathconf
{514, (void *)&null_handler}, // sys_cap_new
{515, (void *)&null_handler}, // sys_cap_rights_get
{516, (void *)&null_handler}, // sys_cap_enter
{517, (void *)&null_handler}, // sys_cap_getmode
{518, (void *)&null_handler}, // sys_pdfork
{519, (void *)&null_handler}, // sys_pdkill
{520, (void *)&null_handler}, // sys_pdgetpid
{521, (void *)&null_handler}, // sys_pdwait4
{522, (void *)&null_handler}, // sys_pselect
{523, (void *)&null_handler}, // sys_getloginclass
{524, (void *)&null_handler}, // sys_setloginclass
{525, (void *)&null_handler}, // sys_rctl_get_racct
{526, (void *)&null_handler}, // sys_rctl_get_rules
{527, (void *)&null_handler}, // sys_rctl_get_limits
{528, (void *)&null_handler}, // sys_rctl_add_rule
{529, (void *)&null_handler}, // sys_rctl_remove_rule
{530, (void *)&null_handler}, // sys_posix_fallocate
{531, (void *)&null_handler}, // sys_posix_fadvise
{532, (void *)&sys_regmgr_call},
{533, (void *)&null_handler}, // sys_jitshm_create
{534, (void *)&null_handler}, // sys_jitshm_alias
{535, (void *)&null_handler}, // sys_dl_get_list
{536, (void *)&null_handler}, // sys_dl_get_info
{537, (void *)&null_handler}, // sys_dl_notify_event
{538, (void *)&null_handler}, // sys_evf_create
{539, (void *)&null_handler}, // sys_evf_delete
{540, (void *)&null_handler}, // sys_evf_open
{541, (void *)&null_handler}, // sys_evf_close
{542, (void *)&null_handler}, // sys_evf_wait
{543, (void *)&null_handler}, // sys_evf_trywait
{544, (void *)&null_handler}, // sys_evf_set
{545, (void *)&null_handler}, // sys_evf_clear
{546, (void *)&null_handler}, // sys_evf_cancel
{547, (void *)&null_handler}, // sys_query_memory_protection
{548, (void *)&null_handler}, // sys_batch_map
{549, (void *)&null_handler}, // sys_osem_create
{550, (void *)&null_handler}, // sys_osem_delete
{551, (void *)&null_handler}, // sys_osem_open
{552, (void *)&null_handler}, // sys_osem_close
{553, (void *)&null_handler}, // sys_osem_wait
{554, (void *)&null_handler}, // sys_osem_wait
{555, (void *)&null_handler}, // sys_osem_post
{556, (void *)&null_handler}, // sys_osem_cancel
{557, (void *)&sys_namedobj_create},
{558, (void *)&sys_namedobj_delete},
{559, (void *)&null_handler}, // sys_set_vm_container
{560, (void *)&null_handler}, // sys_debug_init
{561, (void *)&null_handler}, // sys_suspend_process
{562, (void *)&null_handler}, // sys_resume_process
{563, (void *)&null_handler}, // sys_opmc_enable
{564, (void *)&null_handler}, // sys_opmc_disable
{565, (void *)&null_handler}, // sys_opmc_set_ctl
{566, (void *)&null_handler}, // sys_opmc_set_ctr
{567, (void *)&null_handler}, // sys_opmc_get_ctr
{568, (void *)&null_handler}, // sys_budget_create
{569, (void *)&null_handler}, // sys_budget_delete
{570, (void *)&null_handler}, // sys_budget_get
{571, (void *)&null_handler}, // sys_budget_set
{572, (void *)&null_handler}, // sys_virtual_query
{573, (void *)&null_handler}, // sys_mdbg_call
{574, (void *)&null_handler}, // sys_sblock_create
{575, (void *)&null_handler}, // sys_sblock_delete
{576, (void *)&null_handler}, // sys_sblock_enter
{577, (void *)&null_handler}, // sys_sblock_exit
{578, (void *)&null_handler}, // sys_sblock_xenter
{579, (void *)&null_handler}, // sys_sblock_xexit
{580, (void *)&null_handler}, // sys_eport_create
{581, (void *)&null_handler}, // sys_eport_delete
{582, (void *)&null_handler}, // sys_eport_trigger
{583, (void *)&null_handler}, // sys_eport_open
{584, (void *)&null_handler}, // sys_eport_close
{585, (void *)&sys_is_in_sandbox},
{586, (void *)&sys_dmem_container},
{587, (void *)&sys_get_authinfo},
{588, (void *)&sys_mname},
{589, (void *)&sys_dynlib_dlopen},
{590, (void *)&null_handler}, // sys_dynlib_dlclose
{591, (void *)&sys_dynlib_dlsym},
{592, (void *)&sys_dynlib_get_list},
{593, (void *)&sys_dynlib_get_info},
{594, (void *)&null_handler}, // sys_dynlib_load_prx
{595, (void *)&null_handler}, // sys_dynlib_unload_prx
{596, (void *)&null_handler}, // sys_dynlib_do_copy_relocations
{597, (void *)&null_handler}, // sys_dynlib_prepare_dlclose
{598, (void *)&sys_dynlib_get_proc_param},
{599, (void *)&sys_dynlib_process_needed_and_relocate},
{600, (void *)&null_handler}, // sys_sandbox_path
{601, (void *)&sys_mdbg_service},
{602, (void *)&null_handler}, // sys_randomized_path
{603, (void *)&null_handler}, // sys_rdup
{604, (void *)&null_handler}, // sys_dl_get_metadata
{605, (void *)&null_handler}, // sys_workaround8849
{606, (void *)&null_handler}, // sys_is_development_mode
{607, (void *)&null_handler}, // sys_get_self_auth_info
{608, (void *)&sys_dynlib_get_info_ex},
{609, (void *)&null_handler}, // sys_budget_getid
{610, (void *)&sys_budget_get_ptype},
{611, (void *)&null_handler}, // sys_get_paging_stats_of_all_threads
{612, (void *)&sys_get_proc_type_info},
{613, (void *)&null_handler}, // sys_get_resident_count
{614, (void *)&null_handler}, // sys_prepare_to_suspend_process
{615, (void *)&null_handler}, // sys_get_resident_fmem_count
{616, (void *)&null_handler}, // sys_thr_get_name
{617, (void *)&null_handler}, // sys_set_gpo
{618, (void *)&null_handler}, // sys_get_paging_stats_of_all_objects
{619, (void *)&null_handler}, // sys_test_debug_rwmem
{620, (void *)&null_handler}, // sys_free_stack
{621, (void *)&null_handler}, // sys_suspend_system
{622, (void *)&null_handler}, // sys_ipmimgr_call
{623, (void *)&null_handler}, // sys_get_gpo
{624, (void *)&null_handler}, // sys_get_vm_map_timestamp
{625, (void *)&null_handler}, // sys_opmc_set_hw
{626, (void *)&null_handler}, // sys_opmc_get_hw
{627, (void *)&null_handler}, // sys_get_cpu_usage_all
{628, (void *)&null_handler}, // sys_mmap_dmem
{629, (void *)&null_handler}, // sys_physhm_open
{630, (void *)&null_handler}, // sys_physhm_unlink
{631, (void *)&null_handler}, // sys_resume_internal_hdd
{632, (void *)&null_handler}, // sys_thr_suspend_ucontext
{633, (void *)&null_handler}, // sys_thr_resume_ucontext
{634, (void *)&null_handler}, // sys_thr_get_ucontext
{635, (void *)&null_handler}, // sys_thr_set_ucontext
{636, (void *)&null_handler}, // sys_set_timezone_info
{637, (void *)&null_handler}, // sys_set_phys_fmem_limit
{638, (void *)&null_handler}, // sys_utc_to_localtime
{639, (void *)&null_handler}, // sys_localtime_to_utc
{640, (void *)&null_handler}, // sys_set_uevt
{641, (void *)&null_handler}, // sys_get_cpu_usage_proc
{642, (void *)&null_handler}, // sys_get_map_statistics
{643, (void *)&null_handler}, // sys_set_chicken_switches
{644, (void *)&null_handler}, // sys_extend_page_table_pool
{645, (void *)&null_handler}, // sys_#645
{646, (void *)&null_handler}, // sys_get_kernel_mem_statistics
{647, (void *)&null_handler}, // sys_get_sdk_compiled_version
{648, (void *)&null_handler}, // sys_app_state_change
{649, (void *)&sys_dynlib_get_obj_member},
{650, (void *)&null_handler}, // sys_budget_get_ptype_of_budget
{651, (void *)&null_handler}, // sys_prepare_to_resume_process
{652, (void *)&null_handler}, // sys_process_terminate
{653, (void *)&null_handler}, // sys_blockpool_open
{654, (void *)&null_handler}, // sys_blockpool_map
{655, (void *)&null_handler}, // sys_blockpool_unmap
{656, (void *)&null_handler}, // sys_dynlib_get_info_for_libdbg
{657, (void *)&null_handler}, // sys_blockpool_batch
{658, (void *)&null_handler}, // sys_fdatasync
{659, (void *)&null_handler}, // sys_dynlib_get_list2
{660, (void *)&null_handler}, // sys_dynlib_get_info2
{661, (void *)&null_handler}, // sys_aio_submit
{662, (void *)&null_handler}, // sys_aio_multi_delete
{663, (void *)&null_handler}, // sys_aio_multi_wait
{664, (void *)&null_handler}, // sys_aio_multi_poll
{665, (void *)&null_handler}, // sys_aio_get_data
{666, (void *)&null_handler}, // sys_aio_multi_cancel
{667, (void *)&null_handler}, // sys_get_bio_usage_all
{668, (void *)&null_handler}, // sys_aio_create
{669, (void *)&null_handler}, // sys_aio_submit_cmd
{670, (void *)&null_handler}, // sys_aio_init
{671, (void *)&null_handler}, // sys_get_page_table_stats
{672, (void *)&null_handler}, // sys_dynlib_get_list_for_libdbg
};
static void PS4ABI trace_syscall(const char *name, int index, void *addr) {
std::printf("trace_syscall: %s (%d), %p\n", name, index, addr);
}
static uintptr_t emit_calltrace(const char *name, uint32_t sid,
const void *dest) {
struct callTrace : Xbyak::CodeGenerator {
callTrace(uintptr_t name, uint32_t sid, uintptr_t dest) {
push(rdi);
push(rsi);
push(rdx);
push(rcx);
push(r8);
push(r9);
push(r10);
push(r11);
sub(rsp, 0x28);
mov(rdi, name);
mov(esi, sid);
mov(rdx, rsp);
mov(rcx, reinterpret_cast<uintptr_t>(&trace_syscall));
call(rcx);
add(rsp, 0x28);
pop(r11);
pop(r10);
pop(r9);
pop(r8);
pop(rcx);
pop(rdx);
pop(rsi);
pop(rdi);
mov(rax, dest);
jmp(rax);
}
};
callTrace *gen = new callTrace(reinterpret_cast<uintptr_t>(name), sid,
reinterpret_cast<uintptr_t>(dest));
return reinterpret_cast<uintptr_t>(gen->getCode());
}
uintptr_t lv2_get(uint32_t sid) {
for (auto &it : syscall_dpt) {
if (sid == it.id) {
return reinterpret_cast<uintptr_t>(it.ptr);
//return emit_calltrace(syscall_getname(sid), sid, it.ptr);
}
}
// LOG_WARNING("unknown syscall {}", sid);
return reinterpret_cast<uintptr_t>(&null_handler_notable);
}
} // namespace krnl