diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-26 10:01:55 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-26 10:01:55 +0100 |
| commit | 4a033b8e767fee3fd2de805d8a94e8e7f094015f (patch) | |
| tree | 24551dceea043da7f6c6685d832d193e627b2000 /src | |
| parent | 4f5ad4b3acbdf2ce29c68ad0c8a6dd908175ea20 (diff) | |
| download | box64-4a033b8e767fee3fd2de805d8a94e8e7f094015f.tar.gz box64-4a033b8e767fee3fd2de805d8a94e8e7f094015f.zip | |
Added syscall 131
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64syscall.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c index a1c23c5b..2c94e39a 100755 --- a/src/emu/x64syscall.c +++ b/src/emu/x64syscall.c @@ -34,6 +34,7 @@ #include "x64tls.h" typedef struct x64_sigaction_s x64_sigaction_t; +typedef struct x64_stack_s x64_stack_t; //int32_t my_getrandom(x64emu_t* emu, void* buf, uint32_t buflen, uint32_t flags); @@ -41,6 +42,7 @@ int of_convert(int flag); int32_t my_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode); //int my_sigaction(x64emu_t* emu, int signum, const x86_sigaction_t *act, x86_sigaction_t *oldact); +int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss); //int32_t my_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]); void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset); int my_munmap(x64emu_t* emu, void* addr, unsigned long length); @@ -69,6 +71,7 @@ scwrap_t syscallwrap[] = { //{ 10, __NR_mprotect, 3}, // same //{ 11, __NR_munmap, 2}, // same { 5, __NR_fstat, 2}, + //{ 131, __NR_sigaltstack, 2}, // wrapped to use my_sigaltstack { 186, __NR_gettid, 0 }, { 202, __NR_futex, 6}, }; @@ -163,6 +166,9 @@ void EXPORT x64Syscall(x64emu_t *emu) case 11: // sys_munmap R_EAX = (uint32_t)my_munmap(emu, (void*)R_RDI, R_RSI); break; + case 131: // sys_sigaltstack + R_EAX = (uint32_t)my_sigaltstack(emu, (void*)R_RDI, (void*)R_RSI); + break; default: printf_log(LOG_INFO, "Error: Unsupported Syscall 0x%02Xh (%d)\n", s, s); emu->quit = 1; |