├── README.md └── jni ├── Android.mk ├── Application.mk ├── include ├── syscalls_aarch32.h ├── syscalls_aarch64.h ├── syscalls_armeabi.h ├── syscalls_x86.h └── syscalls_x86_64.h ├── logger.h ├── remote_caller.cpp ├── remote_caller.h ├── svc_hook.cpp ├── svc_hook.h └── test.cpp /README.md: -------------------------------------------------------------------------------- 1 | # svc_hook 2 | svc hook demo 3 | 4 | - hook openat read 5 | ``` 6 | svc_hook(__NR_openat, NULL, (void *)&after_openat, NULL); 7 | svc_hook(__NR_read, NULL, NULL, NULL); 8 | ``` 9 | 10 | - trace open and read 11 | ``` 12 | redfin:/ # /data/local/tmp/main 13 | ===== handle syscall no 56 : sys_openat 14 | after_openat /proc/self/maps 15 | open fd is 3 16 | ===== handle syscall no 63 : sys_read 17 | read buf : 65348f7000-65349 18 | 19 | ===== handle syscall no 63 : sys_read 20 | ``` 21 | -------------------------------------------------------------------------------- /jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | 5 | ifeq ($(TARGET_ARCH_ABI),armeabi) 6 | LOCAL_ARM_MODE := arm 7 | endif 8 | 9 | LOCAL_CPPFLAGS := -Wno-narrowing -Wall -pie -fPIE -std=gnu++11 #-Werror 10 | LOCAL_CPPFLAGS += -fno-strict-aliasing -Wno-unused-value -Wno-parentheses -Wno-write-strings 11 | 12 | LOCAL_MODULE := $(LOCAL_MODULE_NAME) 13 | 14 | SUB_DIRS = $(LOCAL_PATH) 15 | 16 | MY_FILES_SUFFIX := %.cpp %.c 17 | rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) 18 | 19 | MY_ALL_FILES = $(foreach src_path,$(SUB_DIRS),$(call rwildcard,$(src_path),*.*)) 20 | My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%) 21 | 22 | MY_SRC_LIST := $(foreach src_file, $(MY_ALL_FILES), $(filter $(MY_FILES_SUFFIX),$(src_file))) 23 | MY_SRC_LIST := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%) 24 | 25 | LOCAL_SRC_FILES := $(MY_SRC_LIST) 26 | 27 | $(warning $(foreach src_file,$(LOCAL_SRC_FILES), $(warning $(src_file)))) 28 | 29 | LOCAL_LDFLAGS += -Wl,--gc-sections -pie -fPIE 30 | LOCAL_LDLIBS := -llog #-lz 31 | 32 | LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden 33 | 34 | include $(BUILD_EXECUTABLE) 35 | -------------------------------------------------------------------------------- /jni/Application.mk: -------------------------------------------------------------------------------- 1 | APP_ABI := armeabi-v7a 2 | APP_ABI += x86 3 | APP_ABI += arm64-v8a 4 | APP_ABI += x86_64 5 | 6 | APP_STL = c++_static 7 | APP_PLATFORM := android-24 8 | RELEASE_BUILD := true 9 | 10 | #local module name 11 | LOCAL_MODULE_NAME := main 12 | -------------------------------------------------------------------------------- /jni/include/syscalls_aarch32.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH32_H_ 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH32_H_ 19 | 20 | 21 | // See tools/extract_linux_syscall_tables . 22 | constexpr const char* kSyscalls_Aarch32[] = { 23 | "sys_restart_syscall", // 0 24 | "sys_exit", // 1 25 | "sys_fork", // 2 26 | "sys_read", // 3 27 | "sys_write", // 4 28 | "sys_open", // 5 29 | "sys_close", // 6 30 | "", // 7 31 | "sys_creat", // 8 32 | "sys_link", // 9 33 | "sys_unlink", // 10 34 | "sys_execve", // 11 35 | "sys_chdir", // 12 36 | "", // 13 37 | "sys_mknod", // 14 38 | "sys_chmod", // 15 39 | "sys_lchown", // 16 40 | "", // 17 41 | "", // 18 42 | "sys_lseek", // 19 43 | "sys_getpid", // 20 44 | "sys_mount", // 21 45 | "", // 22 46 | "sys_setuid", // 23 47 | "sys_getuid", // 24 48 | "", // 25 49 | "sys_ptrace", // 26 50 | "", // 27 51 | "", // 28 52 | "sys_pause", // 29 53 | "", // 30 54 | "", // 31 55 | "", // 32 56 | "sys_access", // 33 57 | "sys_nice", // 34 58 | "", // 35 59 | "sys_sync", // 36 60 | "sys_kill", // 37 61 | "sys_rename", // 38 62 | "sys_mkdir", // 39 63 | "sys_rmdir", // 40 64 | "sys_dup", // 41 65 | "sys_pipe", // 42 66 | "sys_times", // 43 67 | "", // 44 68 | "sys_brk", // 45 69 | "sys_setgid", // 46 70 | "sys_getgid", // 47 71 | "", // 48 72 | "sys_geteuid", // 49 73 | "sys_getegid", // 50 74 | "sys_acct", // 51 75 | "sys_umount2", // 52 76 | "", // 53 77 | "sys_ioctl", // 54 78 | "sys_fcntl", // 55 79 | "", // 56 80 | "sys_setpgid", // 57 81 | "", // 58 82 | "", // 59 83 | "sys_umask", // 60 84 | "sys_chroot", // 61 85 | "sys_ustat", // 62 86 | "sys_dup2", // 63 87 | "sys_getppid", // 64 88 | "sys_getpgrp", // 65 89 | "sys_setsid", // 66 90 | "sys_sigaction", // 67 91 | "", // 68 92 | "", // 69 93 | "sys_setreuid", // 70 94 | "sys_setregid", // 71 95 | "sys_sigsuspend", // 72 96 | "sys_sigpending", // 73 97 | "sys_sethostname", // 74 98 | "sys_setrlimit", // 75 99 | "", // 76 100 | "sys_getrusage", // 77 101 | "sys_gettimeofday", // 78 102 | "sys_settimeofday", // 79 103 | "sys_getgroups", // 80 104 | "sys_setgroups", // 81 105 | "", // 82 106 | "sys_symlink", // 83 107 | "", // 84 108 | "sys_readlink", // 85 109 | "sys_uselib", // 86 110 | "sys_swapon", // 87 111 | "sys_reboot", // 88 112 | "", // 89 113 | "", // 90 114 | "sys_munmap", // 91 115 | "sys_truncate", // 92 116 | "sys_ftruncate", // 93 117 | "sys_fchmod", // 94 118 | "sys_fchown", // 95 119 | "sys_getpriority", // 96 120 | "sys_setpriority", // 97 121 | "", // 98 122 | "sys_statfs", // 99 123 | "sys_fstatfs", // 100 124 | "", // 101 125 | "", // 102 126 | "sys_syslog", // 103 127 | "sys_setitimer", // 104 128 | "sys_getitimer", // 105 129 | "sys_stat", // 106 130 | "sys_lstat", // 107 131 | "sys_fstat", // 108 132 | "", // 109 133 | "", // 110 134 | "sys_vhangup", // 111 135 | "", // 112 136 | "", // 113 137 | "sys_wait4", // 114 138 | "sys_swapoff", // 115 139 | "sys_sysinfo", // 116 140 | "", // 117 141 | "sys_fsync", // 118 142 | "sys_sigreturn", // 119 143 | "sys_clone", // 120 144 | "sys_setdomainname", // 121 145 | "sys_uname", // 122 146 | "", // 123 147 | "sys_adjtimex", // 124 148 | "sys_mprotect", // 125 149 | "sys_sigprocmask", // 126 150 | "", // 127 151 | "sys_init_module", // 128 152 | "sys_delete_module", // 129 153 | "", // 130 154 | "sys_quotactl", // 131 155 | "sys_getpgid", // 132 156 | "sys_fchdir", // 133 157 | "sys_bdflush", // 134 158 | "sys_sysfs", // 135 159 | "sys_personality", // 136 160 | "", // 137 161 | "sys_setfsuid", // 138 162 | "sys_setfsgid", // 139 163 | "sys__llseek", // 140 164 | "sys_getdents", // 141 165 | "sys__newselect", // 142 166 | "sys_flock", // 143 167 | "sys_msync", // 144 168 | "sys_readv", // 145 169 | "sys_writev", // 146 170 | "sys_getsid", // 147 171 | "sys_fdatasync", // 148 172 | "sys__sysctl", // 149 173 | "sys_mlock", // 150 174 | "sys_munlock", // 151 175 | "sys_mlockall", // 152 176 | "sys_munlockall", // 153 177 | "sys_sched_setparam", // 154 178 | "sys_sched_getparam", // 155 179 | "sys_sched_setscheduler", // 156 180 | "sys_sched_getscheduler", // 157 181 | "sys_sched_yield", // 158 182 | "sys_sched_get_priority_max", // 159 183 | "sys_sched_get_priority_min", // 160 184 | "sys_sched_rr_get_interval", // 161 185 | "sys_nanosleep", // 162 186 | "sys_mremap", // 163 187 | "sys_setresuid", // 164 188 | "sys_getresuid", // 165 189 | "", // 166 190 | "", // 167 191 | "sys_poll", // 168 192 | "sys_nfsservctl", // 169 193 | "sys_setresgid", // 170 194 | "sys_getresgid", // 171 195 | "sys_prctl", // 172 196 | "sys_rt_sigreturn", // 173 197 | "sys_rt_sigaction", // 174 198 | "sys_rt_sigprocmask", // 175 199 | "sys_rt_sigpending", // 176 200 | "sys_rt_sigtimedwait", // 177 201 | "sys_rt_sigqueueinfo", // 178 202 | "sys_rt_sigsuspend", // 179 203 | "sys_pread64", // 180 204 | "sys_pwrite64", // 181 205 | "sys_chown", // 182 206 | "sys_getcwd", // 183 207 | "sys_capget", // 184 208 | "sys_capset", // 185 209 | "sys_sigaltstack", // 186 210 | "sys_sendfile", // 187 211 | "", // 188 212 | "", // 189 213 | "sys_vfork", // 190 214 | "", // 191 215 | "sys_mmap2", // 192 216 | "sys_truncate64", // 193 217 | "sys_ftruncate64", // 194 218 | "sys_stat64", // 195 219 | "sys_lstat64", // 196 220 | "sys_fstat64", // 197 221 | "sys_lchown32", // 198 222 | "sys_getuid32", // 199 223 | "sys_getgid32", // 200 224 | "sys_geteuid32", // 201 225 | "sys_getegid32", // 202 226 | "sys_setreuid32", // 203 227 | "sys_setregid32", // 204 228 | "sys_getgroups32", // 205 229 | "sys_setgroups32", // 206 230 | "sys_fchown32", // 207 231 | "sys_setresuid32", // 208 232 | "sys_getresuid32", // 209 233 | "sys_setresgid32", // 210 234 | "sys_getresgid32", // 211 235 | "sys_chown32", // 212 236 | "sys_setuid32", // 213 237 | "sys_setgid32", // 214 238 | "sys_setfsuid32", // 215 239 | "sys_setfsgid32", // 216 240 | "sys_getdents64", // 217 241 | "sys_pivot_root", // 218 242 | "sys_mincore", // 219 243 | "sys_madvise", // 220 244 | "sys_fcntl64", // 221 245 | "", // 222 246 | "", // 223 247 | "sys_gettid", // 224 248 | "sys_readahead", // 225 249 | "sys_setxattr", // 226 250 | "sys_lsetxattr", // 227 251 | "sys_fsetxattr", // 228 252 | "sys_getxattr", // 229 253 | "sys_lgetxattr", // 230 254 | "sys_fgetxattr", // 231 255 | "sys_listxattr", // 232 256 | "sys_llistxattr", // 233 257 | "sys_flistxattr", // 234 258 | "sys_removexattr", // 235 259 | "sys_lremovexattr", // 236 260 | "sys_fremovexattr", // 237 261 | "sys_tkill", // 238 262 | "sys_sendfile64", // 239 263 | "sys_futex", // 240 264 | "sys_sched_setaffinity", // 241 265 | "sys_sched_getaffinity", // 242 266 | "sys_io_setup", // 243 267 | "sys_io_destroy", // 244 268 | "sys_io_getevents", // 245 269 | "sys_io_submit", // 246 270 | "sys_io_cancel", // 247 271 | "sys_exit_group", // 248 272 | "sys_lookup_dcookie", // 249 273 | "sys_epoll_create", // 250 274 | "sys_epoll_ctl", // 251 275 | "sys_epoll_wait", // 252 276 | "sys_remap_file_pages", // 253 277 | "", // 254 278 | "", // 255 279 | "sys_set_tid_address", // 256 280 | "sys_timer_create", // 257 281 | "sys_timer_settime", // 258 282 | "sys_timer_gettime", // 259 283 | "sys_timer_getoverrun", // 260 284 | "sys_timer_delete", // 261 285 | "sys_clock_settime", // 262 286 | "sys_clock_gettime", // 263 287 | "sys_clock_getres", // 264 288 | "sys_clock_nanosleep", // 265 289 | "sys_statfs64", // 266 290 | "sys_fstatfs64", // 267 291 | "sys_tgkill", // 268 292 | "sys_utimes", // 269 293 | "sys_arm_fadvise64_64", // 270 294 | "sys_pciconfig_iobase", // 271 295 | "sys_pciconfig_read", // 272 296 | "sys_pciconfig_write", // 273 297 | "sys_mq_open", // 274 298 | "sys_mq_unlink", // 275 299 | "sys_mq_timedsend", // 276 300 | "sys_mq_timedreceive", // 277 301 | "sys_mq_notify", // 278 302 | "sys_mq_getsetattr", // 279 303 | "sys_waitid", // 280 304 | "sys_socket", // 281 305 | "sys_bind", // 282 306 | "sys_connect", // 283 307 | "sys_listen", // 284 308 | "sys_accept", // 285 309 | "sys_getsockname", // 286 310 | "sys_getpeername", // 287 311 | "sys_socketpair", // 288 312 | "sys_send", // 289 313 | "sys_sendto", // 290 314 | "sys_recv", // 291 315 | "sys_recvfrom", // 292 316 | "sys_shutdown", // 293 317 | "sys_setsockopt", // 294 318 | "sys_getsockopt", // 295 319 | "sys_sendmsg", // 296 320 | "sys_recvmsg", // 297 321 | "sys_semop", // 298 322 | "sys_semget", // 299 323 | "sys_semctl", // 300 324 | "sys_msgsnd", // 301 325 | "sys_msgrcv", // 302 326 | "sys_msgget", // 303 327 | "sys_msgctl", // 304 328 | "sys_shmat", // 305 329 | "sys_shmdt", // 306 330 | "sys_shmget", // 307 331 | "sys_shmctl", // 308 332 | "sys_add_key", // 309 333 | "sys_request_key", // 310 334 | "sys_keyctl", // 311 335 | "sys_semtimedop", // 312 336 | "sys_vserver", // 313 337 | "sys_ioprio_set", // 314 338 | "sys_ioprio_get", // 315 339 | "sys_inotify_init", // 316 340 | "sys_inotify_add_watch", // 317 341 | "sys_inotify_rm_watch", // 318 342 | "sys_mbind", // 319 343 | "sys_get_mempolicy", // 320 344 | "sys_set_mempolicy", // 321 345 | "sys_openat", // 322 346 | "sys_mkdirat", // 323 347 | "sys_mknodat", // 324 348 | "sys_fchownat", // 325 349 | "sys_futimesat", // 326 350 | "sys_fstatat64", // 327 351 | "sys_unlinkat", // 328 352 | "sys_renameat", // 329 353 | "sys_linkat", // 330 354 | "sys_symlinkat", // 331 355 | "sys_readlinkat", // 332 356 | "sys_fchmodat", // 333 357 | "sys_faccessat", // 334 358 | "sys_pselect6", // 335 359 | "sys_ppoll", // 336 360 | "sys_unshare", // 337 361 | "sys_set_robust_list", // 338 362 | "sys_get_robust_list", // 339 363 | "sys_splice", // 340 364 | "sys_sync_file_range2", // 341 365 | "sys_tee", // 342 366 | "sys_vmsplice", // 343 367 | "sys_move_pages", // 344 368 | "sys_getcpu", // 345 369 | "sys_epoll_pwait", // 346 370 | "sys_kexec_load", // 347 371 | "sys_utimensat", // 348 372 | "sys_signalfd", // 349 373 | "sys_timerfd_create", // 350 374 | "sys_eventfd", // 351 375 | "sys_fallocate", // 352 376 | "sys_timerfd_settime", // 353 377 | "sys_timerfd_gettime", // 354 378 | "sys_signalfd4", // 355 379 | "sys_eventfd2", // 356 380 | "sys_epoll_create1", // 357 381 | "sys_dup3", // 358 382 | "sys_pipe2", // 359 383 | "sys_inotify_init1", // 360 384 | "sys_preadv", // 361 385 | "sys_pwritev", // 362 386 | "sys_rt_tgsigqueueinfo", // 363 387 | "sys_perf_event_open", // 364 388 | "sys_recvmmsg", // 365 389 | "sys_accept4", // 366 390 | "sys_fanotify_init", // 367 391 | "sys_fanotify_mark", // 368 392 | "sys_prlimit64", // 369 393 | "sys_name_to_handle_at", // 370 394 | "sys_open_by_handle_at", // 371 395 | "sys_clock_adjtime", // 372 396 | "sys_syncfs", // 373 397 | "sys_sendmmsg", // 374 398 | "sys_setns", // 375 399 | "sys_process_vm_readv", // 376 400 | "sys_process_vm_writev", // 377 401 | "sys_kcmp", // 378 402 | "sys_finit_module", // 379 403 | "sys_sched_setattr", // 380 404 | "sys_sched_getattr", // 381 405 | "sys_renameat2", // 382 406 | "sys_seccomp", // 383 407 | "sys_getrandom", // 384 408 | "sys_memfd_create", // 385 409 | "sys_bpf", // 386 410 | "sys_execveat", // 387 411 | "sys_userfaultfd", // 388 412 | "sys_membarrier", // 389 413 | "sys_mlock2", // 390 414 | "sys_copy_file_range", // 391 415 | "sys_preadv2", // 392 416 | "sys_pwritev2", // 393 417 | "sys_pkey_mprotect", // 394 418 | "sys_pkey_alloc", // 395 419 | "sys_pkey_free", // 396 420 | "sys_statx", // 397 421 | "sys_rseq", // 398 422 | }; 423 | 424 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH32_H_ 425 | -------------------------------------------------------------------------------- /jni/include/syscalls_aarch64.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH64_H_ 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH64_H_ 19 | 20 | // See tools/extract_linux_syscall_tables . 21 | constexpr const char* kSyscalls_Aarch64[] = { 22 | "sys_io_setup", // 0 23 | "sys_io_destroy", // 1 24 | "sys_io_submit", // 2 25 | "sys_io_cancel", // 3 26 | "sys_io_getevents", // 4 27 | "sys_setxattr", // 5 28 | "sys_lsetxattr", // 6 29 | "sys_fsetxattr", // 7 30 | "sys_getxattr", // 8 31 | "sys_lgetxattr", // 9 32 | "sys_fgetxattr", // 10 33 | "sys_listxattr", // 11 34 | "sys_llistxattr", // 12 35 | "sys_flistxattr", // 13 36 | "sys_removexattr", // 14 37 | "sys_lremovexattr", // 15 38 | "sys_fremovexattr", // 16 39 | "sys_getcwd", // 17 40 | "sys_lookup_dcookie", // 18 41 | "sys_eventfd2", // 19 42 | "sys_epoll_create1", // 20 43 | "sys_epoll_ctl", // 21 44 | "sys_epoll_pwait", // 22 45 | "sys_dup", // 23 46 | "sys_dup3", // 24 47 | "sys_fcntl", // 25 48 | "sys_inotify_init1", // 26 49 | "sys_inotify_add_watch", // 27 50 | "sys_inotify_rm_watch", // 28 51 | "sys_ioctl", // 29 52 | "sys_ioprio_set", // 30 53 | "sys_ioprio_get", // 31 54 | "sys_flock", // 32 55 | "sys_mknodat", // 33 56 | "sys_mkdirat", // 34 57 | "sys_unlinkat", // 35 58 | "sys_symlinkat", // 36 59 | "sys_linkat", // 37 60 | "sys_renameat", // 38 61 | "sys_umount2", // 39 62 | "sys_mount", // 40 63 | "sys_pivot_root", // 41 64 | "sys_nfsservctl", // 42 65 | "sys_statfs", // 43 66 | "sys_fstatfs", // 44 67 | "sys_truncate", // 45 68 | "sys_ftruncate", // 46 69 | "sys_fallocate", // 47 70 | "sys_faccessat", // 48 71 | "sys_chdir", // 49 72 | "sys_fchdir", // 50 73 | "sys_chroot", // 51 74 | "sys_fchmod", // 52 75 | "sys_fchmodat", // 53 76 | "sys_fchownat", // 54 77 | "sys_fchown", // 55 78 | "sys_openat", // 56 79 | "sys_close", // 57 80 | "sys_vhangup", // 58 81 | "sys_pipe2", // 59 82 | "sys_quotactl", // 60 83 | "sys_getdents64", // 61 84 | "sys_lseek", // 62 85 | "sys_read", // 63 86 | "sys_write", // 64 87 | "sys_readv", // 65 88 | "sys_writev", // 66 89 | "sys_pread64", // 67 90 | "sys_pwrite64", // 68 91 | "sys_preadv", // 69 92 | "sys_pwritev", // 70 93 | "sys_sendfile", // 71 94 | "sys_pselect6", // 72 95 | "sys_ppoll", // 73 96 | "sys_signalfd4", // 74 97 | "sys_vmsplice", // 75 98 | "sys_splice", // 76 99 | "sys_tee", // 77 100 | "sys_readlinkat", // 78 101 | "sys_fstatat", // 79 102 | "sys_fstat", // 80 103 | "sys_sync", // 81 104 | "sys_fsync", // 82 105 | "sys_fdatasync", // 83 106 | "sys_sync_file_range", // 84 107 | "sys_timerfd_create", // 85 108 | "sys_timerfd_settime", // 86 109 | "sys_timerfd_gettime", // 87 110 | "sys_utimensat", // 88 111 | "sys_acct", // 89 112 | "sys_capget", // 90 113 | "sys_capset", // 91 114 | "sys_personality", // 92 115 | "sys_exit", // 93 116 | "sys_exit_group", // 94 117 | "sys_waitid", // 95 118 | "sys_set_tid_address", // 96 119 | "sys_unshare", // 97 120 | "sys_futex", // 98 121 | "sys_set_robust_list", // 99 122 | "sys_get_robust_list", // 100 123 | "sys_nanosleep", // 101 124 | "sys_getitimer", // 102 125 | "sys_setitimer", // 103 126 | "sys_kexec_load", // 104 127 | "sys_init_module", // 105 128 | "sys_delete_module", // 106 129 | "sys_timer_create", // 107 130 | "sys_timer_gettime", // 108 131 | "sys_timer_getoverrun", // 109 132 | "sys_timer_settime", // 110 133 | "sys_timer_delete", // 111 134 | "sys_clock_settime", // 112 135 | "sys_clock_gettime", // 113 136 | "sys_clock_getres", // 114 137 | "sys_clock_nanosleep", // 115 138 | "sys_syslog", // 116 139 | "sys_ptrace", // 117 140 | "sys_sched_setparam", // 118 141 | "sys_sched_setscheduler", // 119 142 | "sys_sched_getscheduler", // 120 143 | "sys_sched_getparam", // 121 144 | "sys_sched_setaffinity", // 122 145 | "sys_sched_getaffinity", // 123 146 | "sys_sched_yield", // 124 147 | "sys_sched_get_priority_max", // 125 148 | "sys_sched_get_priority_min", // 126 149 | "sys_sched_rr_get_interval", // 127 150 | "sys_restart_syscall", // 128 151 | "sys_kill", // 129 152 | "sys_tkill", // 130 153 | "sys_tgkill", // 131 154 | "sys_sigaltstack", // 132 155 | "sys_rt_sigsuspend", // 133 156 | "sys_rt_sigaction", // 134 157 | "sys_rt_sigprocmask", // 135 158 | "sys_rt_sigpending", // 136 159 | "sys_rt_sigtimedwait", // 137 160 | "sys_rt_sigqueueinfo", // 138 161 | "sys_rt_sigreturn", // 139 162 | "sys_setpriority", // 140 163 | "sys_getpriority", // 141 164 | "sys_reboot", // 142 165 | "sys_setregid", // 143 166 | "sys_setgid", // 144 167 | "sys_setreuid", // 145 168 | "sys_setuid", // 146 169 | "sys_setresuid", // 147 170 | "sys_getresuid", // 148 171 | "sys_setresgid", // 149 172 | "sys_getresgid", // 150 173 | "sys_setfsuid", // 151 174 | "sys_setfsgid", // 152 175 | "sys_times", // 153 176 | "sys_setpgid", // 154 177 | "sys_getpgid", // 155 178 | "sys_getsid", // 156 179 | "sys_setsid", // 157 180 | "sys_getgroups", // 158 181 | "sys_setgroups", // 159 182 | "sys_uname", // 160 183 | "sys_sethostname", // 161 184 | "sys_setdomainname", // 162 185 | "sys_getrlimit", // 163 186 | "sys_setrlimit", // 164 187 | "sys_getrusage", // 165 188 | "sys_umask", // 166 189 | "sys_prctl", // 167 190 | "sys_getcpu", // 168 191 | "sys_gettimeofday", // 169 192 | "sys_settimeofday", // 170 193 | "sys_adjtimex", // 171 194 | "sys_getpid", // 172 195 | "sys_getppid", // 173 196 | "sys_getuid", // 174 197 | "sys_geteuid", // 175 198 | "sys_getgid", // 176 199 | "sys_getegid", // 177 200 | "sys_gettid", // 178 201 | "sys_sysinfo", // 179 202 | "sys_mq_open", // 180 203 | "sys_mq_unlink", // 181 204 | "sys_mq_timedsend", // 182 205 | "sys_mq_timedreceive", // 183 206 | "sys_mq_notify", // 184 207 | "sys_mq_getsetattr", // 185 208 | "sys_msgget", // 186 209 | "sys_msgctl", // 187 210 | "sys_msgrcv", // 188 211 | "sys_msgsnd", // 189 212 | "sys_semget", // 190 213 | "sys_semctl", // 191 214 | "sys_semtimedop", // 192 215 | "sys_semop", // 193 216 | "sys_shmget", // 194 217 | "sys_shmctl", // 195 218 | "sys_shmat", // 196 219 | "sys_shmdt", // 197 220 | "sys_socket", // 198 221 | "sys_socketpair", // 199 222 | "sys_bind", // 200 223 | "sys_listen", // 201 224 | "sys_accept", // 202 225 | "sys_connect", // 203 226 | "sys_getsockname", // 204 227 | "sys_getpeername", // 205 228 | "sys_sendto", // 206 229 | "sys_recvfrom", // 207 230 | "sys_setsockopt", // 208 231 | "sys_getsockopt", // 209 232 | "sys_shutdown", // 210 233 | "sys_sendmsg", // 211 234 | "sys_recvmsg", // 212 235 | "sys_readahead", // 213 236 | "sys_brk", // 214 237 | "sys_munmap", // 215 238 | "sys_mremap", // 216 239 | "sys_add_key", // 217 240 | "sys_request_key", // 218 241 | "sys_keyctl", // 219 242 | "sys_clone", // 220 243 | "sys_execve", // 221 244 | "sys_mmap", // 222 245 | "sys_fadvise64", // 223 246 | "sys_swapon", // 224 247 | "sys_swapoff", // 225 248 | "sys_mprotect", // 226 249 | "sys_msync", // 227 250 | "sys_mlock", // 228 251 | "sys_munlock", // 229 252 | "sys_mlockall", // 230 253 | "sys_munlockall", // 231 254 | "sys_mincore", // 232 255 | "sys_madvise", // 233 256 | "sys_remap_file_pages", // 234 257 | "sys_mbind", // 235 258 | "sys_get_mempolicy", // 236 259 | "sys_set_mempolicy", // 237 260 | "sys_migrate_pages", // 238 261 | "sys_move_pages", // 239 262 | "sys_rt_tgsigqueueinfo", // 240 263 | "sys_perf_event_open", // 241 264 | "sys_accept4", // 242 265 | "sys_recvmmsg", // 243 266 | "sys_arch_specific_syscall", // 244 267 | "", // 245 268 | "", // 246 269 | "", // 247 270 | "", // 248 271 | "", // 249 272 | "", // 250 273 | "", // 251 274 | "", // 252 275 | "", // 253 276 | "", // 254 277 | "", // 255 278 | "", // 256 279 | "", // 257 280 | "", // 258 281 | "", // 259 282 | "sys_wait4", // 260 283 | "sys_prlimit64", // 261 284 | "sys_fanotify_init", // 262 285 | "sys_fanotify_mark", // 263 286 | "sys_name_to_handle_at", // 264 287 | "sys_open_by_handle_at", // 265 288 | "sys_clock_adjtime", // 266 289 | "sys_syncfs", // 267 290 | "sys_setns", // 268 291 | "sys_sendmmsg", // 269 292 | "sys_process_vm_readv", // 270 293 | "sys_process_vm_writev", // 271 294 | "sys_kcmp", // 272 295 | "sys_finit_module", // 273 296 | "sys_sched_setattr", // 274 297 | "sys_sched_getattr", // 275 298 | "sys_renameat2", // 276 299 | "sys_seccomp", // 277 300 | "sys_getrandom", // 278 301 | "sys_memfd_create", // 279 302 | "sys_bpf", // 280 303 | "sys_execveat", // 281 304 | "sys_userfaultfd", // 282 305 | "sys_membarrier", // 283 306 | "sys_mlock2", // 284 307 | "sys_copy_file_range", // 285 308 | "sys_preadv2", // 286 309 | "sys_pwritev2", // 287 310 | "sys_pkey_mprotect", // 288 311 | "sys_pkey_alloc", // 289 312 | "sys_pkey_free", // 290 313 | "sys_statx", // 291 314 | "sys_io_pgetevents", // 292 315 | "sys_rseq", // 293 316 | }; 317 | 318 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_AARCH64_H_ 319 | -------------------------------------------------------------------------------- /jni/include/syscalls_armeabi.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_ARMEABI_H_ 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_ARMEABI_H_ 19 | 20 | // See tools/extract_linux_syscall_tables . 21 | constexpr const char* kSyscalls_ArmEabi[] = { 22 | "sys_restart_syscall", // 0 23 | "sys_exit", // 1 24 | "sys_fork", // 2 25 | "sys_read", // 3 26 | "sys_write", // 4 27 | "sys_open", // 5 28 | "sys_close", // 6 29 | "", // 7 30 | "sys_creat", // 8 31 | "sys_link", // 9 32 | "sys_unlink", // 10 33 | "sys_execve", // 11 34 | "sys_chdir", // 12 35 | "sys_time", // 13 36 | "sys_mknod", // 14 37 | "sys_chmod", // 15 38 | "sys_lchown", // 16 39 | "", // 17 40 | "", // 18 41 | "sys_lseek", // 19 42 | "sys_getpid", // 20 43 | "sys_mount", // 21 44 | "sys_umount", // 22 45 | "sys_setuid", // 23 46 | "sys_getuid", // 24 47 | "sys_stime", // 25 48 | "sys_ptrace", // 26 49 | "sys_alarm", // 27 50 | "", // 28 51 | "sys_pause", // 29 52 | "sys_utime", // 30 53 | "", // 31 54 | "", // 32 55 | "sys_access", // 33 56 | "sys_nice", // 34 57 | "", // 35 58 | "sys_sync", // 36 59 | "sys_kill", // 37 60 | "sys_rename", // 38 61 | "sys_mkdir", // 39 62 | "sys_rmdir", // 40 63 | "sys_dup", // 41 64 | "sys_pipe", // 42 65 | "sys_times", // 43 66 | "", // 44 67 | "sys_brk", // 45 68 | "sys_setgid", // 46 69 | "sys_getgid", // 47 70 | "", // 48 71 | "sys_geteuid", // 49 72 | "sys_getegid", // 50 73 | "sys_acct", // 51 74 | "sys_umount2", // 52 75 | "", // 53 76 | "sys_ioctl", // 54 77 | "sys_fcntl", // 55 78 | "", // 56 79 | "sys_setpgid", // 57 80 | "", // 58 81 | "", // 59 82 | "sys_umask", // 60 83 | "sys_chroot", // 61 84 | "sys_ustat", // 62 85 | "sys_dup2", // 63 86 | "sys_getppid", // 64 87 | "sys_getpgrp", // 65 88 | "sys_setsid", // 66 89 | "sys_sigaction", // 67 90 | "", // 68 91 | "", // 69 92 | "sys_setreuid", // 70 93 | "sys_setregid", // 71 94 | "sys_sigsuspend", // 72 95 | "sys_sigpending", // 73 96 | "sys_sethostname", // 74 97 | "sys_setrlimit", // 75 98 | "sys_getrlimit", // 76 99 | "sys_getrusage", // 77 100 | "sys_gettimeofday", // 78 101 | "sys_settimeofday", // 79 102 | "sys_getgroups", // 80 103 | "sys_setgroups", // 81 104 | "sys_select", // 82 105 | "sys_symlink", // 83 106 | "", // 84 107 | "sys_readlink", // 85 108 | "sys_uselib", // 86 109 | "sys_swapon", // 87 110 | "sys_reboot", // 88 111 | "sys_readdir", // 89 112 | "sys_mmap", // 90 113 | "sys_munmap", // 91 114 | "sys_truncate", // 92 115 | "sys_ftruncate", // 93 116 | "sys_fchmod", // 94 117 | "sys_fchown", // 95 118 | "sys_getpriority", // 96 119 | "sys_setpriority", // 97 120 | "", // 98 121 | "sys_statfs", // 99 122 | "sys_fstatfs", // 100 123 | "", // 101 124 | "sys_socketcall", // 102 125 | "sys_syslog", // 103 126 | "sys_setitimer", // 104 127 | "sys_getitimer", // 105 128 | "sys_stat", // 106 129 | "sys_lstat", // 107 130 | "sys_fstat", // 108 131 | "", // 109 132 | "", // 110 133 | "sys_vhangup", // 111 134 | "", // 112 135 | "sys_syscall", // 113 136 | "sys_wait4", // 114 137 | "sys_swapoff", // 115 138 | "sys_sysinfo", // 116 139 | "sys_ipc", // 117 140 | "sys_fsync", // 118 141 | "sys_sigreturn", // 119 142 | "sys_clone", // 120 143 | "sys_setdomainname", // 121 144 | "sys_uname", // 122 145 | "", // 123 146 | "sys_adjtimex", // 124 147 | "sys_mprotect", // 125 148 | "sys_sigprocmask", // 126 149 | "", // 127 150 | "sys_init_module", // 128 151 | "sys_delete_module", // 129 152 | "", // 130 153 | "sys_quotactl", // 131 154 | "sys_getpgid", // 132 155 | "sys_fchdir", // 133 156 | "sys_bdflush", // 134 157 | "sys_sysfs", // 135 158 | "sys_personality", // 136 159 | "", // 137 160 | "sys_setfsuid", // 138 161 | "sys_setfsgid", // 139 162 | "sys__llseek", // 140 163 | "sys_getdents", // 141 164 | "sys__newselect", // 142 165 | "sys_flock", // 143 166 | "sys_msync", // 144 167 | "sys_readv", // 145 168 | "sys_writev", // 146 169 | "sys_getsid", // 147 170 | "sys_fdatasync", // 148 171 | "sys__sysctl", // 149 172 | "sys_mlock", // 150 173 | "sys_munlock", // 151 174 | "sys_mlockall", // 152 175 | "sys_munlockall", // 153 176 | "sys_sched_setparam", // 154 177 | "sys_sched_getparam", // 155 178 | "sys_sched_setscheduler", // 156 179 | "sys_sched_getscheduler", // 157 180 | "sys_sched_yield", // 158 181 | "sys_sched_get_priority_max", // 159 182 | "sys_sched_get_priority_min", // 160 183 | "sys_sched_rr_get_interval", // 161 184 | "sys_nanosleep", // 162 185 | "sys_mremap", // 163 186 | "sys_setresuid", // 164 187 | "sys_getresuid", // 165 188 | "", // 166 189 | "", // 167 190 | "sys_poll", // 168 191 | "sys_nfsservctl", // 169 192 | "sys_setresgid", // 170 193 | "sys_getresgid", // 171 194 | "sys_prctl", // 172 195 | "sys_rt_sigreturn", // 173 196 | "sys_rt_sigaction", // 174 197 | "sys_rt_sigprocmask", // 175 198 | "sys_rt_sigpending", // 176 199 | "sys_rt_sigtimedwait", // 177 200 | "sys_rt_sigqueueinfo", // 178 201 | "sys_rt_sigsuspend", // 179 202 | "sys_pread64", // 180 203 | "sys_pwrite64", // 181 204 | "sys_chown", // 182 205 | "sys_getcwd", // 183 206 | "sys_capget", // 184 207 | "sys_capset", // 185 208 | "sys_sigaltstack", // 186 209 | "sys_sendfile", // 187 210 | "", // 188 211 | "", // 189 212 | "sys_vfork", // 190 213 | "sys_ugetrlimit", // 191 214 | "sys_mmap2", // 192 215 | "sys_truncate64", // 193 216 | "sys_ftruncate64", // 194 217 | "sys_stat64", // 195 218 | "sys_lstat64", // 196 219 | "sys_fstat64", // 197 220 | "sys_lchown32", // 198 221 | "sys_getuid32", // 199 222 | "sys_getgid32", // 200 223 | "sys_geteuid32", // 201 224 | "sys_getegid32", // 202 225 | "sys_setreuid32", // 203 226 | "sys_setregid32", // 204 227 | "sys_getgroups32", // 205 228 | "sys_setgroups32", // 206 229 | "sys_fchown32", // 207 230 | "sys_setresuid32", // 208 231 | "sys_getresuid32", // 209 232 | "sys_setresgid32", // 210 233 | "sys_getresgid32", // 211 234 | "sys_chown32", // 212 235 | "sys_setuid32", // 213 236 | "sys_setgid32", // 214 237 | "sys_setfsuid32", // 215 238 | "sys_setfsgid32", // 216 239 | "sys_getdents64", // 217 240 | "sys_pivot_root", // 218 241 | "sys_mincore", // 219 242 | "sys_madvise", // 220 243 | "sys_fcntl64", // 221 244 | "", // 222 245 | "", // 223 246 | "sys_gettid", // 224 247 | "sys_readahead", // 225 248 | "sys_setxattr", // 226 249 | "sys_lsetxattr", // 227 250 | "sys_fsetxattr", // 228 251 | "sys_getxattr", // 229 252 | "sys_lgetxattr", // 230 253 | "sys_fgetxattr", // 231 254 | "sys_listxattr", // 232 255 | "sys_llistxattr", // 233 256 | "sys_flistxattr", // 234 257 | "sys_removexattr", // 235 258 | "sys_lremovexattr", // 236 259 | "sys_fremovexattr", // 237 260 | "sys_tkill", // 238 261 | "sys_sendfile64", // 239 262 | "sys_futex", // 240 263 | "sys_sched_setaffinity", // 241 264 | "sys_sched_getaffinity", // 242 265 | "sys_io_setup", // 243 266 | "sys_io_destroy", // 244 267 | "sys_io_getevents", // 245 268 | "sys_io_submit", // 246 269 | "sys_io_cancel", // 247 270 | "sys_exit_group", // 248 271 | "sys_lookup_dcookie", // 249 272 | "sys_epoll_create", // 250 273 | "sys_epoll_ctl", // 251 274 | "sys_epoll_wait", // 252 275 | "sys_remap_file_pages", // 253 276 | "", // 254 277 | "", // 255 278 | "sys_set_tid_address", // 256 279 | "sys_timer_create", // 257 280 | "sys_timer_settime", // 258 281 | "sys_timer_gettime", // 259 282 | "sys_timer_getoverrun", // 260 283 | "sys_timer_delete", // 261 284 | "sys_clock_settime", // 262 285 | "sys_clock_gettime", // 263 286 | "sys_clock_getres", // 264 287 | "sys_clock_nanosleep", // 265 288 | "sys_statfs64", // 266 289 | "sys_fstatfs64", // 267 290 | "sys_tgkill", // 268 291 | "sys_utimes", // 269 292 | "sys_arm_fadvise64_64", // 270 293 | "sys_pciconfig_iobase", // 271 294 | "sys_pciconfig_read", // 272 295 | "sys_pciconfig_write", // 273 296 | "sys_mq_open", // 274 297 | "sys_mq_unlink", // 275 298 | "sys_mq_timedsend", // 276 299 | "sys_mq_timedreceive", // 277 300 | "sys_mq_notify", // 278 301 | "sys_mq_getsetattr", // 279 302 | "sys_waitid", // 280 303 | "sys_socket", // 281 304 | "sys_bind", // 282 305 | "sys_connect", // 283 306 | "sys_listen", // 284 307 | "sys_accept", // 285 308 | "sys_getsockname", // 286 309 | "sys_getpeername", // 287 310 | "sys_socketpair", // 288 311 | "sys_send", // 289 312 | "sys_sendto", // 290 313 | "sys_recv", // 291 314 | "sys_recvfrom", // 292 315 | "sys_shutdown", // 293 316 | "sys_setsockopt", // 294 317 | "sys_getsockopt", // 295 318 | "sys_sendmsg", // 296 319 | "sys_recvmsg", // 297 320 | "sys_semop", // 298 321 | "sys_semget", // 299 322 | "sys_semctl", // 300 323 | "sys_msgsnd", // 301 324 | "sys_msgrcv", // 302 325 | "sys_msgget", // 303 326 | "sys_msgctl", // 304 327 | "sys_shmat", // 305 328 | "sys_shmdt", // 306 329 | "sys_shmget", // 307 330 | "sys_shmctl", // 308 331 | "sys_add_key", // 309 332 | "sys_request_key", // 310 333 | "sys_keyctl", // 311 334 | "sys_semtimedop", // 312 335 | "sys_vserver", // 313 336 | "sys_ioprio_set", // 314 337 | "sys_ioprio_get", // 315 338 | "sys_inotify_init", // 316 339 | "sys_inotify_add_watch", // 317 340 | "sys_inotify_rm_watch", // 318 341 | "sys_mbind", // 319 342 | "sys_get_mempolicy", // 320 343 | "sys_set_mempolicy", // 321 344 | "sys_openat", // 322 345 | "sys_mkdirat", // 323 346 | "sys_mknodat", // 324 347 | "sys_fchownat", // 325 348 | "sys_futimesat", // 326 349 | "sys_fstatat64", // 327 350 | "sys_unlinkat", // 328 351 | "sys_renameat", // 329 352 | "sys_linkat", // 330 353 | "sys_symlinkat", // 331 354 | "sys_readlinkat", // 332 355 | "sys_fchmodat", // 333 356 | "sys_faccessat", // 334 357 | "sys_pselect6", // 335 358 | "sys_ppoll", // 336 359 | "sys_unshare", // 337 360 | "sys_set_robust_list", // 338 361 | "sys_get_robust_list", // 339 362 | "sys_splice", // 340 363 | "sys_arm_sync_file_range", // 341 364 | "sys_tee", // 342 365 | "sys_vmsplice", // 343 366 | "sys_move_pages", // 344 367 | "sys_getcpu", // 345 368 | "sys_epoll_pwait", // 346 369 | "sys_kexec_load", // 347 370 | "sys_utimensat", // 348 371 | "sys_signalfd", // 349 372 | "sys_timerfd_create", // 350 373 | "sys_eventfd", // 351 374 | "sys_fallocate", // 352 375 | "sys_timerfd_settime", // 353 376 | "sys_timerfd_gettime", // 354 377 | "sys_signalfd4", // 355 378 | "sys_eventfd2", // 356 379 | "sys_epoll_create1", // 357 380 | "sys_dup3", // 358 381 | "sys_pipe2", // 359 382 | "sys_inotify_init1", // 360 383 | "sys_preadv", // 361 384 | "sys_pwritev", // 362 385 | "sys_rt_tgsigqueueinfo", // 363 386 | "sys_perf_event_open", // 364 387 | "sys_recvmmsg", // 365 388 | "sys_accept4", // 366 389 | "sys_fanotify_init", // 367 390 | "sys_fanotify_mark", // 368 391 | "sys_prlimit64", // 369 392 | "sys_name_to_handle_at", // 370 393 | "sys_open_by_handle_at", // 371 394 | "sys_clock_adjtime", // 372 395 | "sys_syncfs", // 373 396 | "sys_sendmmsg", // 374 397 | "sys_setns", // 375 398 | "sys_process_vm_readv", // 376 399 | "sys_process_vm_writev", // 377 400 | "sys_kcmp", // 378 401 | "sys_finit_module", // 379 402 | "sys_sched_setattr", // 380 403 | "sys_sched_getattr", // 381 404 | "sys_renameat2", // 382 405 | "sys_seccomp", // 383 406 | "sys_getrandom", // 384 407 | "sys_memfd_create", // 385 408 | "sys_bpf", // 386 409 | "sys_execveat", // 387 410 | "sys_userfaultfd", // 388 411 | "sys_membarrier", // 389 412 | "sys_mlock2", // 390 413 | "sys_copy_file_range", // 391 414 | "sys_preadv2", // 392 415 | "sys_pwritev2", // 393 416 | "sys_pkey_mprotect", // 394 417 | "sys_pkey_alloc", // 395 418 | "sys_pkey_free", // 396 419 | "sys_statx", // 397 420 | "sys_rseq", // 398 421 | "sys_io_pgetevents", // 399 422 | }; 423 | 424 | 425 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_ARMEABI_H_ 426 | -------------------------------------------------------------------------------- /jni/include/syscalls_x86.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_H_ 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_H_ 19 | 20 | // See tools/extract_linux_syscall_tables . 21 | constexpr const char* kSyscalls_x86[] = { 22 | "sys_restart_syscall", // 0 23 | "sys_exit", // 1 24 | "sys_fork", // 2 25 | "sys_read", // 3 26 | "sys_write", // 4 27 | "sys_open", // 5 28 | "sys_close", // 6 29 | "sys_waitpid", // 7 30 | "sys_creat", // 8 31 | "sys_link", // 9 32 | "sys_unlink", // 10 33 | "sys_execve", // 11 34 | "sys_chdir", // 12 35 | "sys_time", // 13 36 | "sys_mknod", // 14 37 | "sys_chmod", // 15 38 | "sys_lchown", // 16 39 | "sys_break", // 17 40 | "sys_oldstat", // 18 41 | "sys_lseek", // 19 42 | "sys_getpid", // 20 43 | "sys_mount", // 21 44 | "sys_umount", // 22 45 | "sys_setuid", // 23 46 | "sys_getuid", // 24 47 | "sys_stime", // 25 48 | "sys_ptrace", // 26 49 | "sys_alarm", // 27 50 | "sys_oldfstat", // 28 51 | "sys_pause", // 29 52 | "sys_utime", // 30 53 | "sys_stty", // 31 54 | "sys_gtty", // 32 55 | "sys_access", // 33 56 | "sys_nice", // 34 57 | "sys_ftime", // 35 58 | "sys_sync", // 36 59 | "sys_kill", // 37 60 | "sys_rename", // 38 61 | "sys_mkdir", // 39 62 | "sys_rmdir", // 40 63 | "sys_dup", // 41 64 | "sys_pipe", // 42 65 | "sys_times", // 43 66 | "sys_prof", // 44 67 | "sys_brk", // 45 68 | "sys_setgid", // 46 69 | "sys_getgid", // 47 70 | "sys_signal", // 48 71 | "sys_geteuid", // 49 72 | "sys_getegid", // 50 73 | "sys_acct", // 51 74 | "sys_umount2", // 52 75 | "sys_lock", // 53 76 | "sys_ioctl", // 54 77 | "sys_fcntl", // 55 78 | "sys_mpx", // 56 79 | "sys_setpgid", // 57 80 | "sys_ulimit", // 58 81 | "sys_oldolduname", // 59 82 | "sys_umask", // 60 83 | "sys_chroot", // 61 84 | "sys_ustat", // 62 85 | "sys_dup2", // 63 86 | "sys_getppid", // 64 87 | "sys_getpgrp", // 65 88 | "sys_setsid", // 66 89 | "sys_sigaction", // 67 90 | "sys_sgetmask", // 68 91 | "sys_ssetmask", // 69 92 | "sys_setreuid", // 70 93 | "sys_setregid", // 71 94 | "sys_sigsuspend", // 72 95 | "sys_sigpending", // 73 96 | "sys_sethostname", // 74 97 | "sys_setrlimit", // 75 98 | "sys_getrlimit", // 76 99 | "sys_getrusage", // 77 100 | "sys_gettimeofday", // 78 101 | "sys_settimeofday", // 79 102 | "sys_getgroups", // 80 103 | "sys_setgroups", // 81 104 | "sys_select", // 82 105 | "sys_symlink", // 83 106 | "sys_oldlstat", // 84 107 | "sys_readlink", // 85 108 | "sys_uselib", // 86 109 | "sys_swapon", // 87 110 | "sys_reboot", // 88 111 | "sys_readdir", // 89 112 | "sys_mmap", // 90 113 | "sys_munmap", // 91 114 | "sys_truncate", // 92 115 | "sys_ftruncate", // 93 116 | "sys_fchmod", // 94 117 | "sys_fchown", // 95 118 | "sys_getpriority", // 96 119 | "sys_setpriority", // 97 120 | "sys_profil", // 98 121 | "sys_statfs", // 99 122 | "sys_fstatfs", // 100 123 | "sys_ioperm", // 101 124 | "sys_socketcall", // 102 125 | "sys_syslog", // 103 126 | "sys_setitimer", // 104 127 | "sys_getitimer", // 105 128 | "sys_stat", // 106 129 | "sys_lstat", // 107 130 | "sys_fstat", // 108 131 | "sys_olduname", // 109 132 | "sys_iopl", // 110 133 | "sys_vhangup", // 111 134 | "sys_idle", // 112 135 | "sys_vm86old", // 113 136 | "sys_wait4", // 114 137 | "sys_swapoff", // 115 138 | "sys_sysinfo", // 116 139 | "sys_ipc", // 117 140 | "sys_fsync", // 118 141 | "sys_sigreturn", // 119 142 | "sys_clone", // 120 143 | "sys_setdomainname", // 121 144 | "sys_uname", // 122 145 | "sys_modify_ldt", // 123 146 | "sys_adjtimex", // 124 147 | "sys_mprotect", // 125 148 | "sys_sigprocmask", // 126 149 | "sys_create_module", // 127 150 | "sys_init_module", // 128 151 | "sys_delete_module", // 129 152 | "sys_get_kernel_syms", // 130 153 | "sys_quotactl", // 131 154 | "sys_getpgid", // 132 155 | "sys_fchdir", // 133 156 | "sys_bdflush", // 134 157 | "sys_sysfs", // 135 158 | "sys_personality", // 136 159 | "sys_afs_syscall", // 137 160 | "sys_setfsuid", // 138 161 | "sys_setfsgid", // 139 162 | "sys__llseek", // 140 163 | "sys_getdents", // 141 164 | "sys__newselect", // 142 165 | "sys_flock", // 143 166 | "sys_msync", // 144 167 | "sys_readv", // 145 168 | "sys_writev", // 146 169 | "sys_getsid", // 147 170 | "sys_fdatasync", // 148 171 | "sys__sysctl", // 149 172 | "sys_mlock", // 150 173 | "sys_munlock", // 151 174 | "sys_mlockall", // 152 175 | "sys_munlockall", // 153 176 | "sys_sched_setparam", // 154 177 | "sys_sched_getparam", // 155 178 | "sys_sched_setscheduler", // 156 179 | "sys_sched_getscheduler", // 157 180 | "sys_sched_yield", // 158 181 | "sys_sched_get_priority_max", // 159 182 | "sys_sched_get_priority_min", // 160 183 | "sys_sched_rr_get_interval", // 161 184 | "sys_nanosleep", // 162 185 | "sys_mremap", // 163 186 | "sys_setresuid", // 164 187 | "sys_getresuid", // 165 188 | "sys_vm86", // 166 189 | "sys_query_module", // 167 190 | "sys_poll", // 168 191 | "sys_nfsservctl", // 169 192 | "sys_setresgid", // 170 193 | "sys_getresgid", // 171 194 | "sys_prctl", // 172 195 | "sys_rt_sigreturn", // 173 196 | "sys_rt_sigaction", // 174 197 | "sys_rt_sigprocmask", // 175 198 | "sys_rt_sigpending", // 176 199 | "sys_rt_sigtimedwait", // 177 200 | "sys_rt_sigqueueinfo", // 178 201 | "sys_rt_sigsuspend", // 179 202 | "sys_pread64", // 180 203 | "sys_pwrite64", // 181 204 | "sys_chown", // 182 205 | "sys_getcwd", // 183 206 | "sys_capget", // 184 207 | "sys_capset", // 185 208 | "sys_sigaltstack", // 186 209 | "sys_sendfile", // 187 210 | "sys_getpmsg", // 188 211 | "sys_putpmsg", // 189 212 | "sys_vfork", // 190 213 | "sys_ugetrlimit", // 191 214 | "sys_mmap2", // 192 215 | "sys_truncate64", // 193 216 | "sys_ftruncate64", // 194 217 | "sys_stat64", // 195 218 | "sys_lstat64", // 196 219 | "sys_fstat64", // 197 220 | "sys_lchown32", // 198 221 | "sys_getuid32", // 199 222 | "sys_getgid32", // 200 223 | "sys_geteuid32", // 201 224 | "sys_getegid32", // 202 225 | "sys_setreuid32", // 203 226 | "sys_setregid32", // 204 227 | "sys_getgroups32", // 205 228 | "sys_setgroups32", // 206 229 | "sys_fchown32", // 207 230 | "sys_setresuid32", // 208 231 | "sys_getresuid32", // 209 232 | "sys_setresgid32", // 210 233 | "sys_getresgid32", // 211 234 | "sys_chown32", // 212 235 | "sys_setuid32", // 213 236 | "sys_setgid32", // 214 237 | "sys_setfsuid32", // 215 238 | "sys_setfsgid32", // 216 239 | "sys_pivot_root", // 217 240 | "sys_mincore", // 218 241 | "sys_madvise", // 219 242 | "sys_getdents64", // 220 243 | "sys_fcntl64", // 221 244 | "", // 222 245 | "", // 223 246 | "sys_gettid", // 224 247 | "sys_readahead", // 225 248 | "sys_setxattr", // 226 249 | "sys_lsetxattr", // 227 250 | "sys_fsetxattr", // 228 251 | "sys_getxattr", // 229 252 | "sys_lgetxattr", // 230 253 | "sys_fgetxattr", // 231 254 | "sys_listxattr", // 232 255 | "sys_llistxattr", // 233 256 | "sys_flistxattr", // 234 257 | "sys_removexattr", // 235 258 | "sys_lremovexattr", // 236 259 | "sys_fremovexattr", // 237 260 | "sys_tkill", // 238 261 | "sys_sendfile64", // 239 262 | "sys_futex", // 240 263 | "sys_sched_setaffinity", // 241 264 | "sys_sched_getaffinity", // 242 265 | "sys_set_thread_area", // 243 266 | "sys_get_thread_area", // 244 267 | "sys_io_setup", // 245 268 | "sys_io_destroy", // 246 269 | "sys_io_getevents", // 247 270 | "sys_io_submit", // 248 271 | "sys_io_cancel", // 249 272 | "sys_fadvise64", // 250 273 | "", // 251 274 | "sys_exit_group", // 252 275 | "sys_lookup_dcookie", // 253 276 | "sys_epoll_create", // 254 277 | "sys_epoll_ctl", // 255 278 | "sys_epoll_wait", // 256 279 | "sys_remap_file_pages", // 257 280 | "sys_set_tid_address", // 258 281 | "sys_timer_create", // 259 282 | "sys_timer_settime", // 260 283 | "sys_timer_gettime", // 261 284 | "sys_timer_getoverrun", // 262 285 | "sys_timer_delete", // 263 286 | "sys_clock_settime", // 264 287 | "sys_clock_gettime", // 265 288 | "sys_clock_getres", // 266 289 | "sys_clock_nanosleep", // 267 290 | "sys_statfs64", // 268 291 | "sys_fstatfs64", // 269 292 | "sys_tgkill", // 270 293 | "sys_utimes", // 271 294 | "sys_fadvise64_64", // 272 295 | "sys_vserver", // 273 296 | "sys_mbind", // 274 297 | "sys_get_mempolicy", // 275 298 | "sys_set_mempolicy", // 276 299 | "sys_mq_open", // 277 300 | "sys_mq_unlink", // 278 301 | "sys_mq_timedsend", // 279 302 | "sys_mq_timedreceive", // 280 303 | "sys_mq_notify", // 281 304 | "sys_mq_getsetattr", // 282 305 | "sys_kexec_load", // 283 306 | "sys_waitid", // 284 307 | "", // 285 308 | "sys_add_key", // 286 309 | "sys_request_key", // 287 310 | "sys_keyctl", // 288 311 | "sys_ioprio_set", // 289 312 | "sys_ioprio_get", // 290 313 | "sys_inotify_init", // 291 314 | "sys_inotify_add_watch", // 292 315 | "sys_inotify_rm_watch", // 293 316 | "sys_migrate_pages", // 294 317 | "sys_openat", // 295 318 | "sys_mkdirat", // 296 319 | "sys_mknodat", // 297 320 | "sys_fchownat", // 298 321 | "sys_futimesat", // 299 322 | "sys_fstatat64", // 300 323 | "sys_unlinkat", // 301 324 | "sys_renameat", // 302 325 | "sys_linkat", // 303 326 | "sys_symlinkat", // 304 327 | "sys_readlinkat", // 305 328 | "sys_fchmodat", // 306 329 | "sys_faccessat", // 307 330 | "sys_pselect6", // 308 331 | "sys_ppoll", // 309 332 | "sys_unshare", // 310 333 | "sys_set_robust_list", // 311 334 | "sys_get_robust_list", // 312 335 | "sys_splice", // 313 336 | "sys_sync_file_range", // 314 337 | "sys_tee", // 315 338 | "sys_vmsplice", // 316 339 | "sys_move_pages", // 317 340 | "sys_getcpu", // 318 341 | "sys_epoll_pwait", // 319 342 | "sys_utimensat", // 320 343 | "sys_signalfd", // 321 344 | "sys_timerfd_create", // 322 345 | "sys_eventfd", // 323 346 | "sys_fallocate", // 324 347 | "sys_timerfd_settime", // 325 348 | "sys_timerfd_gettime", // 326 349 | "sys_signalfd4", // 327 350 | "sys_eventfd2", // 328 351 | "sys_epoll_create1", // 329 352 | "sys_dup3", // 330 353 | "sys_pipe2", // 331 354 | "sys_inotify_init1", // 332 355 | "sys_preadv", // 333 356 | "sys_pwritev", // 334 357 | "sys_rt_tgsigqueueinfo", // 335 358 | "sys_perf_event_open", // 336 359 | "sys_recvmmsg", // 337 360 | "sys_fanotify_init", // 338 361 | "sys_fanotify_mark", // 339 362 | "sys_prlimit64", // 340 363 | "sys_name_to_handle_at", // 341 364 | "sys_open_by_handle_at", // 342 365 | "sys_clock_adjtime", // 343 366 | "sys_syncfs", // 344 367 | "sys_sendmmsg", // 345 368 | "sys_setns", // 346 369 | "sys_process_vm_readv", // 347 370 | "sys_process_vm_writev", // 348 371 | "sys_kcmp", // 349 372 | "sys_finit_module", // 350 373 | "sys_sched_setattr", // 351 374 | "sys_sched_getattr", // 352 375 | "sys_renameat2", // 353 376 | "sys_seccomp", // 354 377 | "sys_getrandom", // 355 378 | "sys_memfd_create", // 356 379 | "sys_bpf", // 357 380 | "sys_execveat", // 358 381 | "sys_socket", // 359 382 | "sys_socketpair", // 360 383 | "sys_bind", // 361 384 | "sys_connect", // 362 385 | "sys_listen", // 363 386 | "sys_accept4", // 364 387 | "sys_getsockopt", // 365 388 | "sys_setsockopt", // 366 389 | "sys_getsockname", // 367 390 | "sys_getpeername", // 368 391 | "sys_sendto", // 369 392 | "sys_sendmsg", // 370 393 | "sys_recvfrom", // 371 394 | "sys_recvmsg", // 372 395 | "sys_shutdown", // 373 396 | "sys_userfaultfd", // 374 397 | "sys_membarrier", // 375 398 | "sys_mlock2", // 376 399 | "sys_copy_file_range", // 377 400 | "sys_preadv2", // 378 401 | "sys_pwritev2", // 379 402 | "sys_pkey_mprotect", // 380 403 | "sys_pkey_alloc", // 381 404 | "sys_pkey_free", // 382 405 | "sys_statx", // 383 406 | "sys_arch_prctl", // 384 407 | "sys_io_pgetevents", // 385 408 | "sys_rseq", // 386 409 | }; 410 | 411 | 412 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_H_ 413 | -------------------------------------------------------------------------------- /jni/include/syscalls_x86_64.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2019 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_64_H_ 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_64_H_ 19 | 20 | 21 | // See tools/extract_linux_syscall_tables . 22 | constexpr const char* kSyscalls_x86_64[] = { 23 | "sys_read", // 0 24 | "sys_write", // 1 25 | "sys_open", // 2 26 | "sys_close", // 3 27 | "sys_stat", // 4 28 | "sys_fstat", // 5 29 | "sys_lstat", // 6 30 | "sys_poll", // 7 31 | "sys_lseek", // 8 32 | "sys_mmap", // 9 33 | "sys_mprotect", // 10 34 | "sys_munmap", // 11 35 | "sys_brk", // 12 36 | "sys_rt_sigaction", // 13 37 | "sys_rt_sigprocmask", // 14 38 | "sys_rt_sigreturn", // 15 39 | "sys_ioctl", // 16 40 | "sys_pread64", // 17 41 | "sys_pwrite64", // 18 42 | "sys_readv", // 19 43 | "sys_writev", // 20 44 | "sys_access", // 21 45 | "sys_pipe", // 22 46 | "sys_select", // 23 47 | "sys_sched_yield", // 24 48 | "sys_mremap", // 25 49 | "sys_msync", // 26 50 | "sys_mincore", // 27 51 | "sys_madvise", // 28 52 | "sys_shmget", // 29 53 | "sys_shmat", // 30 54 | "sys_shmctl", // 31 55 | "sys_dup", // 32 56 | "sys_dup2", // 33 57 | "sys_pause", // 34 58 | "sys_nanosleep", // 35 59 | "sys_getitimer", // 36 60 | "sys_alarm", // 37 61 | "sys_setitimer", // 38 62 | "sys_getpid", // 39 63 | "sys_sendfile", // 40 64 | "sys_socket", // 41 65 | "sys_connect", // 42 66 | "sys_accept", // 43 67 | "sys_sendto", // 44 68 | "sys_recvfrom", // 45 69 | "sys_sendmsg", // 46 70 | "sys_recvmsg", // 47 71 | "sys_shutdown", // 48 72 | "sys_bind", // 49 73 | "sys_listen", // 50 74 | "sys_getsockname", // 51 75 | "sys_getpeername", // 52 76 | "sys_socketpair", // 53 77 | "sys_setsockopt", // 54 78 | "sys_getsockopt", // 55 79 | "sys_clone", // 56 80 | "sys_fork", // 57 81 | "sys_vfork", // 58 82 | "sys_execve", // 59 83 | "sys_exit", // 60 84 | "sys_wait4", // 61 85 | "sys_kill", // 62 86 | "sys_uname", // 63 87 | "sys_semget", // 64 88 | "sys_semop", // 65 89 | "sys_semctl", // 66 90 | "sys_shmdt", // 67 91 | "sys_msgget", // 68 92 | "sys_msgsnd", // 69 93 | "sys_msgrcv", // 70 94 | "sys_msgctl", // 71 95 | "sys_fcntl", // 72 96 | "sys_flock", // 73 97 | "sys_fsync", // 74 98 | "sys_fdatasync", // 75 99 | "sys_truncate", // 76 100 | "sys_ftruncate", // 77 101 | "sys_getdents", // 78 102 | "sys_getcwd", // 79 103 | "sys_chdir", // 80 104 | "sys_fchdir", // 81 105 | "sys_rename", // 82 106 | "sys_mkdir", // 83 107 | "sys_rmdir", // 84 108 | "sys_creat", // 85 109 | "sys_link", // 86 110 | "sys_unlink", // 87 111 | "sys_symlink", // 88 112 | "sys_readlink", // 89 113 | "sys_chmod", // 90 114 | "sys_fchmod", // 91 115 | "sys_chown", // 92 116 | "sys_fchown", // 93 117 | "sys_lchown", // 94 118 | "sys_umask", // 95 119 | "sys_gettimeofday", // 96 120 | "sys_getrlimit", // 97 121 | "sys_getrusage", // 98 122 | "sys_sysinfo", // 99 123 | "sys_times", // 100 124 | "sys_ptrace", // 101 125 | "sys_getuid", // 102 126 | "sys_syslog", // 103 127 | "sys_getgid", // 104 128 | "sys_setuid", // 105 129 | "sys_setgid", // 106 130 | "sys_geteuid", // 107 131 | "sys_getegid", // 108 132 | "sys_setpgid", // 109 133 | "sys_getppid", // 110 134 | "sys_getpgrp", // 111 135 | "sys_setsid", // 112 136 | "sys_setreuid", // 113 137 | "sys_setregid", // 114 138 | "sys_getgroups", // 115 139 | "sys_setgroups", // 116 140 | "sys_setresuid", // 117 141 | "sys_getresuid", // 118 142 | "sys_setresgid", // 119 143 | "sys_getresgid", // 120 144 | "sys_getpgid", // 121 145 | "sys_setfsuid", // 122 146 | "sys_setfsgid", // 123 147 | "sys_getsid", // 124 148 | "sys_capget", // 125 149 | "sys_capset", // 126 150 | "sys_rt_sigpending", // 127 151 | "sys_rt_sigtimedwait", // 128 152 | "sys_rt_sigqueueinfo", // 129 153 | "sys_rt_sigsuspend", // 130 154 | "sys_sigaltstack", // 131 155 | "sys_utime", // 132 156 | "sys_mknod", // 133 157 | "sys_uselib", // 134 158 | "sys_personality", // 135 159 | "sys_ustat", // 136 160 | "sys_statfs", // 137 161 | "sys_fstatfs", // 138 162 | "sys_sysfs", // 139 163 | "sys_getpriority", // 140 164 | "sys_setpriority", // 141 165 | "sys_sched_setparam", // 142 166 | "sys_sched_getparam", // 143 167 | "sys_sched_setscheduler", // 144 168 | "sys_sched_getscheduler", // 145 169 | "sys_sched_get_priority_max", // 146 170 | "sys_sched_get_priority_min", // 147 171 | "sys_sched_rr_get_interval", // 148 172 | "sys_mlock", // 149 173 | "sys_munlock", // 150 174 | "sys_mlockall", // 151 175 | "sys_munlockall", // 152 176 | "sys_vhangup", // 153 177 | "sys_modify_ldt", // 154 178 | "sys_pivot_root", // 155 179 | "sys__sysctl", // 156 180 | "sys_prctl", // 157 181 | "sys_arch_prctl", // 158 182 | "sys_adjtimex", // 159 183 | "sys_setrlimit", // 160 184 | "sys_chroot", // 161 185 | "sys_sync", // 162 186 | "sys_acct", // 163 187 | "sys_settimeofday", // 164 188 | "sys_mount", // 165 189 | "sys_umount2", // 166 190 | "sys_swapon", // 167 191 | "sys_swapoff", // 168 192 | "sys_reboot", // 169 193 | "sys_sethostname", // 170 194 | "sys_setdomainname", // 171 195 | "sys_iopl", // 172 196 | "sys_ioperm", // 173 197 | "sys_create_module", // 174 198 | "sys_init_module", // 175 199 | "sys_delete_module", // 176 200 | "sys_get_kernel_syms", // 177 201 | "sys_query_module", // 178 202 | "sys_quotactl", // 179 203 | "sys_nfsservctl", // 180 204 | "sys_getpmsg", // 181 205 | "sys_putpmsg", // 182 206 | "sys_afs_syscall", // 183 207 | "sys_tuxcall", // 184 208 | "sys_security", // 185 209 | "sys_gettid", // 186 210 | "sys_readahead", // 187 211 | "sys_setxattr", // 188 212 | "sys_lsetxattr", // 189 213 | "sys_fsetxattr", // 190 214 | "sys_getxattr", // 191 215 | "sys_lgetxattr", // 192 216 | "sys_fgetxattr", // 193 217 | "sys_listxattr", // 194 218 | "sys_llistxattr", // 195 219 | "sys_flistxattr", // 196 220 | "sys_removexattr", // 197 221 | "sys_lremovexattr", // 198 222 | "sys_fremovexattr", // 199 223 | "sys_tkill", // 200 224 | "sys_time", // 201 225 | "sys_futex", // 202 226 | "sys_sched_setaffinity", // 203 227 | "sys_sched_getaffinity", // 204 228 | "sys_set_thread_area", // 205 229 | "sys_io_setup", // 206 230 | "sys_io_destroy", // 207 231 | "sys_io_getevents", // 208 232 | "sys_io_submit", // 209 233 | "sys_io_cancel", // 210 234 | "sys_get_thread_area", // 211 235 | "sys_lookup_dcookie", // 212 236 | "sys_epoll_create", // 213 237 | "sys_epoll_ctl_old", // 214 238 | "sys_epoll_wait_old", // 215 239 | "sys_remap_file_pages", // 216 240 | "sys_getdents64", // 217 241 | "sys_set_tid_address", // 218 242 | "sys_restart_syscall", // 219 243 | "sys_semtimedop", // 220 244 | "sys_fadvise64", // 221 245 | "sys_timer_create", // 222 246 | "sys_timer_settime", // 223 247 | "sys_timer_gettime", // 224 248 | "sys_timer_getoverrun", // 225 249 | "sys_timer_delete", // 226 250 | "sys_clock_settime", // 227 251 | "sys_clock_gettime", // 228 252 | "sys_clock_getres", // 229 253 | "sys_clock_nanosleep", // 230 254 | "sys_exit_group", // 231 255 | "sys_epoll_wait", // 232 256 | "sys_epoll_ctl", // 233 257 | "sys_tgkill", // 234 258 | "sys_utimes", // 235 259 | "sys_vserver", // 236 260 | "sys_mbind", // 237 261 | "sys_set_mempolicy", // 238 262 | "sys_get_mempolicy", // 239 263 | "sys_mq_open", // 240 264 | "sys_mq_unlink", // 241 265 | "sys_mq_timedsend", // 242 266 | "sys_mq_timedreceive", // 243 267 | "sys_mq_notify", // 244 268 | "sys_mq_getsetattr", // 245 269 | "sys_kexec_load", // 246 270 | "sys_waitid", // 247 271 | "sys_add_key", // 248 272 | "sys_request_key", // 249 273 | "sys_keyctl", // 250 274 | "sys_ioprio_set", // 251 275 | "sys_ioprio_get", // 252 276 | "sys_inotify_init", // 253 277 | "sys_inotify_add_watch", // 254 278 | "sys_inotify_rm_watch", // 255 279 | "sys_migrate_pages", // 256 280 | "sys_openat", // 257 281 | "sys_mkdirat", // 258 282 | "sys_mknodat", // 259 283 | "sys_fchownat", // 260 284 | "sys_futimesat", // 261 285 | "sys_newfstatat", // 262 286 | "sys_unlinkat", // 263 287 | "sys_renameat", // 264 288 | "sys_linkat", // 265 289 | "sys_symlinkat", // 266 290 | "sys_readlinkat", // 267 291 | "sys_fchmodat", // 268 292 | "sys_faccessat", // 269 293 | "sys_pselect6", // 270 294 | "sys_ppoll", // 271 295 | "sys_unshare", // 272 296 | "sys_set_robust_list", // 273 297 | "sys_get_robust_list", // 274 298 | "sys_splice", // 275 299 | "sys_tee", // 276 300 | "sys_sync_file_range", // 277 301 | "sys_vmsplice", // 278 302 | "sys_move_pages", // 279 303 | "sys_utimensat", // 280 304 | "sys_epoll_pwait", // 281 305 | "sys_signalfd", // 282 306 | "sys_timerfd_create", // 283 307 | "sys_eventfd", // 284 308 | "sys_fallocate", // 285 309 | "sys_timerfd_settime", // 286 310 | "sys_timerfd_gettime", // 287 311 | "sys_accept4", // 288 312 | "sys_signalfd4", // 289 313 | "sys_eventfd2", // 290 314 | "sys_epoll_create1", // 291 315 | "sys_dup3", // 292 316 | "sys_pipe2", // 293 317 | "sys_inotify_init1", // 294 318 | "sys_preadv", // 295 319 | "sys_pwritev", // 296 320 | "sys_rt_tgsigqueueinfo", // 297 321 | "sys_perf_event_open", // 298 322 | "sys_recvmmsg", // 299 323 | "sys_fanotify_init", // 300 324 | "sys_fanotify_mark", // 301 325 | "sys_prlimit64", // 302 326 | "sys_name_to_handle_at", // 303 327 | "sys_open_by_handle_at", // 304 328 | "sys_clock_adjtime", // 305 329 | "sys_syncfs", // 306 330 | "sys_sendmmsg", // 307 331 | "sys_setns", // 308 332 | "sys_getcpu", // 309 333 | "sys_process_vm_readv", // 310 334 | "sys_process_vm_writev", // 311 335 | "sys_kcmp", // 312 336 | "sys_finit_module", // 313 337 | "sys_sched_setattr", // 314 338 | "sys_sched_getattr", // 315 339 | "sys_renameat2", // 316 340 | "sys_seccomp", // 317 341 | "sys_getrandom", // 318 342 | "sys_memfd_create", // 319 343 | "sys_kexec_file_load", // 320 344 | "sys_bpf", // 321 345 | "sys_execveat", // 322 346 | "sys_userfaultfd", // 323 347 | "sys_membarrier", // 324 348 | "sys_mlock2", // 325 349 | "sys_copy_file_range", // 326 350 | "sys_preadv2", // 327 351 | "sys_pwritev2", // 328 352 | "sys_pkey_mprotect", // 329 353 | "sys_pkey_alloc", // 330 354 | "sys_pkey_free", // 331 355 | "sys_statx", // 332 356 | "sys_io_pgetevents", // 333 357 | "sys_rseq", // 334 358 | "", // 335 359 | "", // 336 360 | "", // 337 361 | "", // 338 362 | "", // 339 363 | "", // 340 364 | "", // 341 365 | "", // 342 366 | "", // 343 367 | "", // 344 368 | "", // 345 369 | "", // 346 370 | "", // 347 371 | "", // 348 372 | "", // 349 373 | "", // 350 374 | "", // 351 375 | "", // 352 376 | "", // 353 377 | "", // 354 378 | "", // 355 379 | "", // 356 380 | "", // 357 381 | "", // 358 382 | "", // 359 383 | "", // 360 384 | "", // 361 385 | "", // 362 386 | "", // 363 387 | "", // 364 388 | "", // 365 389 | "", // 366 390 | "", // 367 391 | "", // 368 392 | "", // 369 393 | "", // 370 394 | "", // 371 395 | "", // 372 396 | "", // 373 397 | "", // 374 398 | "", // 375 399 | "", // 376 400 | "", // 377 401 | "", // 378 402 | "", // 379 403 | "", // 380 404 | "", // 381 405 | "", // 382 406 | "", // 383 407 | "", // 384 408 | "", // 385 409 | "", // 386 410 | "", // 387 411 | "", // 388 412 | "", // 389 413 | "", // 390 414 | "", // 391 415 | "", // 392 416 | "", // 393 417 | "", // 394 418 | "", // 395 419 | "", // 396 420 | "", // 397 421 | "", // 398 422 | "", // 399 423 | "", // 400 424 | "", // 401 425 | "", // 402 426 | "", // 403 427 | "", // 404 428 | "", // 405 429 | "", // 406 430 | "", // 407 431 | "", // 408 432 | "", // 409 433 | "", // 410 434 | "", // 411 435 | "", // 412 436 | "", // 413 437 | "", // 414 438 | "", // 415 439 | "", // 416 440 | "", // 417 441 | "", // 418 442 | "", // 419 443 | "", // 420 444 | "", // 421 445 | "", // 422 446 | "", // 423 447 | "", // 424 448 | "", // 425 449 | "", // 426 450 | "", // 427 451 | "", // 428 452 | "", // 429 453 | "", // 430 454 | "", // 431 455 | "", // 432 456 | "", // 433 457 | "", // 434 458 | "", // 435 459 | "", // 436 460 | "", // 437 461 | "", // 438 462 | "", // 439 463 | "", // 440 464 | "", // 441 465 | "", // 442 466 | "", // 443 467 | "", // 444 468 | "", // 445 469 | "", // 446 470 | "", // 447 471 | "", // 448 472 | "", // 449 473 | "", // 450 474 | "", // 451 475 | "", // 452 476 | "", // 453 477 | "", // 454 478 | "", // 455 479 | "", // 456 480 | "", // 457 481 | "", // 458 482 | "", // 459 483 | "", // 460 484 | "", // 461 485 | "", // 462 486 | "", // 463 487 | "", // 464 488 | "", // 465 489 | "", // 466 490 | "", // 467 491 | "", // 468 492 | "", // 469 493 | "", // 470 494 | "", // 471 495 | "", // 472 496 | "", // 473 497 | "", // 474 498 | "", // 475 499 | "", // 476 500 | "", // 477 501 | "", // 478 502 | "", // 479 503 | "", // 480 504 | "", // 481 505 | "", // 482 506 | "", // 483 507 | "", // 484 508 | "", // 485 509 | "", // 486 510 | "", // 487 511 | "", // 488 512 | "", // 489 513 | "", // 490 514 | "", // 491 515 | "", // 492 516 | "", // 493 517 | "", // 494 518 | "", // 495 519 | "", // 496 520 | "", // 497 521 | "", // 498 522 | "", // 499 523 | "", // 500 524 | "", // 501 525 | "", // 502 526 | "", // 503 527 | "", // 504 528 | "", // 505 529 | "", // 506 530 | "", // 507 531 | "", // 508 532 | "", // 509 533 | "", // 510 534 | "", // 511 535 | "sys_rt_sigaction", // 512 536 | "sys_rt_sigreturn", // 513 537 | "sys_ioctl", // 514 538 | "sys_readv", // 515 539 | "sys_writev", // 516 540 | "sys_recvfrom", // 517 541 | "sys_sendmsg", // 518 542 | "sys_recvmsg", // 519 543 | "sys_execve", // 520 544 | "sys_ptrace", // 521 545 | "sys_rt_sigpending", // 522 546 | "sys_rt_sigtimedwait", // 523 547 | "sys_rt_sigqueueinfo", // 524 548 | "sys_sigaltstack", // 525 549 | "sys_timer_create", // 526 550 | "sys_mq_notify", // 527 551 | "sys_kexec_load", // 528 552 | "sys_waitid", // 529 553 | "sys_set_robust_list", // 530 554 | "sys_get_robust_list", // 531 555 | "sys_vmsplice", // 532 556 | "sys_move_pages", // 533 557 | "sys_preadv", // 534 558 | "sys_pwritev", // 535 559 | "sys_rt_tgsigqueueinfo", // 536 560 | "sys_recvmmsg", // 537 561 | "sys_sendmmsg", // 538 562 | "sys_process_vm_readv", // 539 563 | "sys_process_vm_writev", // 540 564 | "sys_setsockopt", // 541 565 | "sys_getsockopt", // 542 566 | "sys_io_setup", // 543 567 | "sys_io_submit", // 544 568 | "sys_execveat", // 545 569 | "sys_preadv2", // 546 570 | "sys_pwritev2", // 547 571 | }; 572 | 573 | 574 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_SYSCALLS_SYSCALLS_X86_64_H_ 575 | -------------------------------------------------------------------------------- /jni/logger.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : logger 4 | * @created : Wednesday Dec 07, 2022 11:30:16 CST 5 | */ 6 | 7 | #ifndef LOGGER_H 8 | #define LOGGER_H 9 | 10 | #include 11 | 12 | #ifdef DEBUG_ 13 | #define LOGD(fmt, ...) fprintf(stdout, fmt "\n", ##__VA_ARGS__) 14 | #define LOGE(fmt, ...) fprintf(stderr, fmt "\n", ##__VA_ARGS__) 15 | #else 16 | #define LOGD(fmt, ...) 17 | #define LOGE(fmt, ...) 18 | #endif 19 | 20 | #endif /* end of include guard LOGGER_H */ 21 | 22 | -------------------------------------------------------------------------------- /jni/remote_caller.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : remote_caller 4 | * @created : Wednesday Dec 07, 2022 11:04:11 CST 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | //http://aospxref.com/android-13.0.0_r3/s?path=asm/sigcontext.h&project=bionic 14 | #include 15 | 16 | #include "remote_caller.h" 17 | #include "logger.h" 18 | 19 | #if defined(__i386__) 20 | #include "include/syscalls_x86.h" 21 | const char *const *syscall_table = &kSyscalls_x86[0]; 22 | #elif defined(__x86_64__) 23 | #include "include/syscalls_x86_64.h" 24 | const char *const *syscall_table = &kSyscalls_x86_64[0]; 25 | #elif defined(__arm__) 26 | #include "include/syscalls_armeabi.h" 27 | const char *const *syscall_table = &kSyscalls_ArmEabi[0]; 28 | #elif defined(__aarch64__) 29 | #include "include/syscalls_aarch64.h" 30 | const char *const *syscall_table = &kSyscalls_Aarch64[0]; 31 | #endif 32 | 33 | 34 | void trace_sys_call(int sysno){ 35 | //LOGD("===== handle syscall no %d : %s", sysno, syscall_table[sysno]); 36 | printf("===== handle syscall no %d : %s\n", sysno, syscall_table[sysno]); 37 | } 38 | 39 | #define MAX_SYSCALL_NO 1024 40 | RemoteCaller *g_remote_caller[MAX_SYSCALL_NO] = {0}; 41 | 42 | RemoteCaller::RemoteCaller(int syscall_no, void *before_hook_func, void *after_hook_func, void *patch_func): 43 | caller_mutex_(PTHREAD_MUTEX_INITIALIZER), 44 | caller_cond_(PTHREAD_COND_INITIALIZER), 45 | callee_mutex_(PTHREAD_MUTEX_INITIALIZER), 46 | callee_cond_(PTHREAD_COND_INITIALIZER), 47 | call_result_(0), 48 | syscall_no_(syscall_no), 49 | start_loop_(false), 50 | before_hook_func_((hook_function_t)before_hook_func), 51 | after_hook_func_((hook_function_t)after_hook_func), 52 | patch_func_((hook_function_t)patch_func){ 53 | handleSigsys(); 54 | start_remote_thread(); 55 | } 56 | 57 | RemoteCaller *RemoteCaller::getInstance(int syscall_no){ 58 | if(syscall_no > MAX_SYSCALL_NO-1 || syscall_no < 0){ 59 | LOGE("syscall_no %d error", syscall_no); 60 | abort(); 61 | return NULL; 62 | } 63 | 64 | if(g_remote_caller[syscall_no] == NULL){ 65 | g_remote_caller[syscall_no] = new RemoteCaller(syscall_no, NULL, NULL, NULL); 66 | } 67 | 68 | return g_remote_caller[syscall_no]; 69 | } 70 | 71 | void RemoteCaller::registerSyscall(int syscall_no, void *before_hook_func, void *after_hook_func, void *patch_func){ 72 | if(syscall_no > MAX_SYSCALL_NO-1 || syscall_no < 0){ 73 | LOGE("syscall_no %d error", syscall_no); 74 | return; 75 | } 76 | 77 | if(g_remote_caller[syscall_no] == NULL){ 78 | g_remote_caller[syscall_no] = new RemoteCaller(syscall_no, before_hook_func, after_hook_func, patch_func); 79 | } 80 | } 81 | 82 | bool RemoteCaller::handle_sigsys_ = false; 83 | 84 | static void sigsys_handler(int sig, siginfo_t *info, void *secret){ 85 | LOGD("%s : catch siganl %d by caller %p\n", __func__, sig, (void *)info->si_call_addr); 86 | ucontext_t *ctx = (ucontext_t *)secret; 87 | struct sigcontext *sigctx = reinterpret_cast(&ctx->uc_mcontext); 88 | bool is_handle_syscall = false; 89 | #if defined(__i386__) 90 | //int 80 = [ cd 50 ] 91 | uint8_t *insn = (((uint8_t *)info->si_call_addr) - 2); 92 | is_handle_syscall = (insn[0] == 0xcd) && (insn[1] == 0x50); 93 | int sysno = sigctx->eax; 94 | unsigned long *presult = (unsigned long *)&sigctx->eax; 95 | #elif defined(__x86_64__) 96 | //int 80 = [ cd 50 ] 97 | uint8_t *insn = (((uint8_t *)info->si_call_addr) - 2); 98 | is_handle_syscall = (insn[0] == 0xcd) && (insn[1] == 0x50); 99 | int sysno = sigctx->rax; 100 | unsigned long *presult = (unsigned long *)&sigctx->rax; 101 | #elif defined(__arm__) 102 | is_handle_syscall = *(((uint32_t *)info->si_call_addr) - 1) == 0xef000000; //00 00 00 ef svc #0 103 | int sysno = sigctx->arm_r7; 104 | unsigned long *presult = (unsigned long *)&sigctx->arm_r0; 105 | #elif defined(__aarch64__) 106 | is_handle_syscall = *(((uint32_t *)info->si_call_addr) - 1) == 0xd4000001; //01 00 00 d4 svc #0 107 | int sysno = sigctx->regs[8]; 108 | unsigned long *presult = (unsigned long *)&sigctx->regs[0]; 109 | #else 110 | LOGE("unsupport arch"); 111 | exit(0); 112 | #endif 113 | if(is_handle_syscall){ 114 | long ret = RemoteCaller::getInstance(sysno)->remote_syscall(sigctx); 115 | *presult = ret; 116 | }else{ 117 | LOGD(">>>>> handle signal not caused by ebpf"); 118 | } 119 | } 120 | 121 | void RemoteCaller::handleSigsys(){ 122 | if(!RemoteCaller::handle_sigsys_){ 123 | LOGD("register SIGSYS start"); 124 | struct sigaction act; 125 | struct sigaction old_act; 126 | sigemptyset(&act.sa_mask); 127 | act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; 128 | act.sa_sigaction = sigsys_handler; 129 | sigaction(SIGSYS, &act, &old_act); 130 | RemoteCaller::handle_sigsys_ = true; 131 | LOGD("register SIGSYS end"); 132 | } 133 | } 134 | 135 | unsigned long RemoteCaller::get_syscall_param(sigcontext* sigctx, int index){ 136 | if(index < 0 || index >= 6) return 0; 137 | unsigned long *regs = NULL; 138 | unsigned long *sp = NULL; 139 | #if defined(__i386__) 140 | sp = (unsigned long *)sigctx->esp; 141 | switch(index){ 142 | case 0: 143 | return sigctx->eax; 144 | case 1: 145 | return sigctx->eax; 146 | case 2: 147 | return sigctx->eax; 148 | case 3: 149 | return sigctx->esp; 150 | case 4: 151 | return sp[1]; 152 | case 5: 153 | return sp[2]; 154 | default: 155 | return 0; 156 | } 157 | #elif defined(__x86_64__) 158 | // 159 | sp = (unsigned long *)sigctx->rsp; 160 | switch(index){ 161 | case 0: 162 | return sigctx->rdi; 163 | case 1: 164 | return sigctx->rsi; 165 | case 2: 166 | return sigctx->rdx; 167 | case 3: 168 | //if is syscallno == NR_syscall 169 | //return sigctx->r10; 170 | return sigctx->rcx; 171 | case 4: 172 | return sigctx->r8; 173 | case 5: 174 | return sigctx->r9; 175 | default: 176 | return 0; 177 | } 178 | #elif defined(__arm__) 179 | regs = (unsigned long *)&sigctx->arm_r0; 180 | sp = (unsigned long *)sigctx->arm_sp; 181 | if(index <= 3) { 182 | //r0 - r3 183 | return regs[index]; 184 | }else{ 185 | //stack 186 | return sp[index-3]; 187 | } 188 | #elif defined(__aarch64__) 189 | regs = (unsigned long *)&(sigctx->regs[0]); 190 | sp = (unsigned long *)sigctx->sp; 191 | if(index <= 7) { 192 | //x0 - x7 193 | return regs[index]; 194 | }else{ 195 | //stack 196 | return sp[index-3]; 197 | } 198 | #else 199 | LOGE("unsupport arch"); 200 | exit(0); 201 | #endif 202 | } 203 | 204 | void *RemoteCaller::remote_call_thread_function(void *args_ptr){ 205 | pthread_cond_signal(&caller_cond_); 206 | while(start_loop_){ 207 | pthread_mutex_lock(&callee_mutex_); 208 | LOGD("## RemoteCaller wait call"); 209 | pthread_cond_wait(&callee_cond_, &callee_mutex_); 210 | 211 | LOGD("## RemoteCaller wait call"); 212 | #if 1 213 | unsigned long param0 = get_syscall_param(call_args_, 0); 214 | unsigned long param1 = get_syscall_param(call_args_, 1); 215 | unsigned long param2 = get_syscall_param(call_args_, 2); 216 | unsigned long param3 = get_syscall_param(call_args_, 3); 217 | unsigned long param4 = get_syscall_param(call_args_, 4); 218 | //unsigned long param5 = get_syscall_param(call_args_, 5); 219 | //do something before hook 220 | if(before_hook_func_){ 221 | before_hook_func_(param0, param1, param2, param3, param4); 222 | } 223 | call_result_ = syscall(syscall_no_, param0, param1, param2, param3, param4); 224 | 225 | trace_sys_call(syscall_no_); 226 | //do something after hook 227 | if(after_hook_func_){ 228 | after_hook_func_(param0, param1, param2, param3, param4); 229 | } 230 | 231 | //patch result or do something after hook 232 | if(patch_func_){ 233 | call_result_ = patch_func_(param0, param1, param2, param3, param4); 234 | } 235 | #else 236 | switch(syscall_no_){ 237 | case __NR_openat: 238 | call_result_ = syscall(syscall_no_, 239 | get_syscall_param(call_args_, 0), 240 | get_syscall_param(call_args_, 1), 241 | get_syscall_param(call_args_, 2), 242 | get_syscall_param(call_args_, 3), 243 | get_syscall_param(call_args_, 4), 244 | get_syscall_param(call_args_, 5) 245 | ); 246 | break; 247 | default: 248 | LOGE("unsupport syscall %d, add call function type\n", syscall_no_); 249 | call_result_ = -1; 250 | break; 251 | } 252 | #endif 253 | LOGD("## RemoteCaller call_result_ is %ld", call_result_); 254 | pthread_mutex_unlock(&callee_mutex_); 255 | LOGD("## RemoteCaller wake call thread"); 256 | pthread_cond_signal(&caller_cond_); 257 | } 258 | return NULL; 259 | } 260 | 261 | void RemoteCaller::start_remote_thread(){ 262 | if(!start_loop_){ 263 | start_loop_ = true; 264 | LOGD("start remote thread for syscall no %d", syscall_no_); 265 | pthread_mutex_lock(&caller_mutex_); 266 | std::thread td(std::bind(&RemoteCaller::remote_call_thread_function, this, (void *)&call_args_)); 267 | td.detach(); 268 | //这里要保证线程逻辑起来,所以必须要wait 269 | pthread_cond_wait(&caller_cond_, &caller_mutex_); 270 | pthread_mutex_unlock(&caller_mutex_); 271 | LOGD("start remote thread for syscall no %d finished", syscall_no_); 272 | } 273 | } 274 | 275 | void RemoteCaller::stop_remote_thread(){ 276 | start_loop_ = false; 277 | } 278 | 279 | //线程中内存是共享的,所以remote call转换传递参数给当前线程,并等待结果 280 | long RemoteCaller::remote_syscall(sigcontext *sigctx){ 281 | //这里控制所有的syscall排队 282 | LOGD("locked exec remote_syscall"); 283 | pthread_mutex_lock(&caller_mutex_); 284 | call_args_ = sigctx; 285 | //如果一个系统调用一个线程的情况,这里不需要复制,这里是为了写通用的情况 286 | //signal 唤醒线程,等待 287 | LOGD("wake up remote thread"); 288 | pthread_cond_signal(&callee_cond_); 289 | 290 | //强制让调用进程等待 291 | LOGD("wait remote thread..."); 292 | pthread_cond_wait(&caller_cond_, &caller_mutex_); 293 | 294 | //wait signal 295 | long ret = call_result_; 296 | pthread_mutex_unlock(&caller_mutex_); 297 | LOGD("unlocked exec remote_syscall"); 298 | return ret; 299 | } 300 | -------------------------------------------------------------------------------- /jni/remote_caller.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : remote_caller 4 | * @created : Wednesday Dec 07, 2022 11:04:08 CST 5 | */ 6 | 7 | #ifndef REMOTE_CALLER_H 8 | #define REMOTE_CALLER_H 9 | 10 | #include 11 | 12 | typedef long (*hook_function_t)(unsigned long,unsigned long,unsigned long,unsigned long,unsigned long); 13 | 14 | class RemoteCaller{ 15 | public: 16 | static void registerSyscall(int syscall_no, void *before_hook_func, void *after_hook_func, void *patch_func_ = NULL); 17 | static RemoteCaller *getInstance(int syscall_no); 18 | long remote_syscall(sigcontext *sigctx); 19 | 20 | protected: 21 | RemoteCaller(int syscall_no, void *before_hook_func, void *after_hook_func, void *patch_func_); 22 | 23 | void *remote_call_thread_function(void *args); 24 | void start_remote_thread(); 25 | void stop_remote_thread(); 26 | unsigned long get_syscall_param(sigcontext* sigctx, int index); 27 | 28 | static void handleSigsys(); 29 | private: 30 | pthread_mutex_t caller_mutex_; 31 | pthread_cond_t caller_cond_; 32 | pthread_mutex_t callee_mutex_; 33 | pthread_cond_t callee_cond_; 34 | long call_result_; 35 | int syscall_no_; 36 | bool start_loop_; 37 | sigcontext *call_args_; 38 | hook_function_t before_hook_func_; 39 | hook_function_t after_hook_func_; 40 | hook_function_t patch_func_; 41 | static bool handle_sigsys_; 42 | }; 43 | 44 | 45 | #endif /* end of include guard REMOTE_CALLER_H */ 46 | 47 | -------------------------------------------------------------------------------- /jni/svc_hook.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : svc_hook 4 | * @created : Thursday Dec 01, 2022 16:39:34 CST 5 | */ 6 | #define _GNU_SOURCE 1 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | #include "svc_hook.h" 26 | #include "remote_caller.h" 27 | #include "logger.h" 28 | 29 | int svc_register_hook(int signo){ 30 | struct sock_filter filter[] = { 31 | BPF_STMT(BPF_LD + BPF_W + BPF_ABS, 32 | (offsetof(struct seccomp_data, nr))), 33 | BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, signo, 0, 1), 34 | BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_TRAP), 35 | BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW), 36 | }; 37 | struct sock_fprog prog = { 38 | .len = (unsigned short)(sizeof(filter)/sizeof(filter[0])), 39 | .filter = filter, 40 | }; 41 | 42 | if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) { 43 | LOGE("prctl(NO_NEW_PRIVS)"); 44 | goto failed; 45 | } 46 | if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog)) { 47 | LOGE("prctl(SECCOMP)"); 48 | goto failed; 49 | } 50 | return 0; 51 | 52 | failed: 53 | if (errno == EINVAL) 54 | LOGE("SECCOMP_FILTER is not available. :(n\n"); 55 | return -1; 56 | } 57 | 58 | int svc_hook(int sysno, void *before_hook_func, void *after_hook_func, void *patch_func){ 59 | RemoteCaller::registerSyscall(sysno, before_hook_func, after_hook_func, patch_func); 60 | return svc_register_hook(sysno); 61 | } -------------------------------------------------------------------------------- /jni/svc_hook.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : svc_hook 4 | * @created : Thursday Dec 01, 2022 16:36:06 CST 5 | */ 6 | 7 | #ifndef SVC_HOOK_H 8 | #define SVC_HOOK_H 9 | 10 | #include 11 | 12 | #ifdef __cplusplus 13 | extern "C" { 14 | #endif 15 | 16 | int svc_hook(int sysno, void *before_hook_func, void *after_hook_func, void *patch_func); 17 | 18 | #ifdef __cplusplus 19 | } 20 | #endif 21 | 22 | #endif /* end of include guard SVC_HOOK_H */ 23 | 24 | -------------------------------------------------------------------------------- /jni/test.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : wz 3 | * @file : test 4 | * @created : Tuesday Jul 05, 2022 20:29:13 CST 5 | */ 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include "svc_hook.h" 12 | 13 | int before_openat(int dirfd, const char *pathname, int flags){ 14 | printf("%s %s\n", __func__, pathname); 15 | return -1; 16 | } 17 | 18 | int after_openat(int dirfd, const char *pathname, int flags){ 19 | printf("%s %s\n", __func__, pathname); 20 | return -1; 21 | } 22 | 23 | int main(int argc, char **argv){ 24 | svc_hook(__NR_openat, NULL, (void *)&after_openat, NULL); 25 | svc_hook(__NR_read, NULL, NULL, NULL); 26 | svc_hook(__NR_pread64, NULL, NULL, NULL); 27 | 28 | int fd = open("/proc/self/maps", 0); 29 | printf("open fd is %d\n", fd); 30 | if(fd > 0){ 31 | char buf[1024] = {0}; 32 | ssize_t sz = read(fd, buf, 16); 33 | printf("read buf : %s\n", buf); 34 | } 35 | 36 | getchar(); 37 | return 0; 38 | } 39 | --------------------------------------------------------------------------------