process_vm_readv(2) System Calls Manual process_vm_readv(2) process_vm_readv, process_vm_writev - (libc -lc) #include ssize_t process_vm_readv(pid_t pid, const struct iovec *local_iov, unsigned long liovcnt, const struct iovec *remote_iov, unsigned long riovcnt, unsigned long flags); ssize_t process_vm_writev(pid_t pid, const struct iovec *local_iov, unsigned long liovcnt, const struct iovec *remote_iov, unsigned long riovcnt, unsigned long flags); glibc ( feature_test_macros(7)): process_vm_readv(), process_vm_writev(): _GNU_SOURCE (" ") pid (" "). . process_vm_readv() . remote_iov riovcnt: remote_iov pid riovcnt remote_iov. local_iov liovcnt: local_iov liovcnt local_iov. process_vm_writev() process_vm_readv()-- . liovcnt local_iov riovcnt remote_iov process_vm_readv(). local_iov remote_iov iovec iovec(3type). . process_vm_readv() local_iov[0] local_iov[1] . remote_iov[0] remote_iov[1] . process_vm_writev() local_iov[0] local_iov[1] remote_iov[0] remote_iov[1]. remote_iov[i].iov_len local_iov[i].iov_len . . flags 0. liovcnt riovcnt IOV_MAX ( sysconf(_SC_IOV_MAX)). local_iov . local_iov . / . / ( ) remote_iov . / . ( C ) ( 4 KiB) iovec . ( remote_iov local_iov . .) ptrace PTRACE_MODE_ATTACH_REALCREDS ptrace(2). process_vm_readv() process_vm_writev() . / . ( iovec. iovec .) / . -1 errno . EFAULT local_iov . EFAULT remote_iov pid. EINVAL iov_len local_iov remote_iov ssize_t. EINVAL flags 0. EINVAL liovcnt riovcnt . ENOMEM iovec. EPERM pid. ESRCH pid. . 3.2 glibc 2.15. process_vm_readv() process_vm_writev() . ( ). process_vm_readv(). 20 0x10000 PID 10 10 buf1 10 buf2. #define _GNU_SOURCE #include #include #include int main(void) { char buf1[10]; char buf2[10]; pid_t pid = 10; /* PID of remote process */ ssize_t nread; struct iovec local[2]; struct iovec remote[1]; local[0].iov_base = buf1; local[0].iov_len = 10; local[1].iov_base = buf2; local[1].iov_len = 10; remote[0].iov_base = (void *) 0x10000; remote[0].iov_len = 20; nread = process_vm_readv(pid, local, 2, remote, 1, 0); if (nread != 20) exit(EXIT_FAILURE); exit(EXIT_SUCCESS); } readv(2), writev(2) 3 . . : . 6.18 8 2026 process_vm_readv(2)