Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中调用linux系统调用进程\u VM\u READV?_Linux_Python 3.x_Struct_System Calls_Ctypes - Fatal编程技术网

如何在python中调用linux系统调用进程\u VM\u READV?

如何在python中调用linux系统调用进程\u VM\u READV?,linux,python-3.x,struct,system-calls,ctypes,Linux,Python 3.x,Struct,System Calls,Ctypes,我试图学习如何在python中调用PROCESS\u VM\u READV。从中,我决定创建一些类似于他们的示例的东西 我已经用root访问权限在终端中打开了python3。然后导入并初始化所需的模块和变量 import ctypes libc = ctypes.CDLL('libc.so.6') vm=libc.process_vm_readv 在这个示例中,有一个名为的结构。所以,我需要用python重新创建它 class iovec(ctypes.Structure): _fie

我试图学习如何在python中调用PROCESS\u VM\u READV。从中,我决定创建一些类似于他们的示例的东西

我已经用root访问权限在终端中打开了python3。然后导入并初始化所需的模块和变量

import ctypes
libc = ctypes.CDLL('libc.so.6')
vm=libc.process_vm_readv
在这个示例中,有一个名为的结构。所以,我需要用python重新创建它

class iovec(ctypes.Structure):
    _fields_=[("iov_base",ctypes.c_void_p),("iov_len",ctypes.c_int)]
然后创建本地和远程变量

p1=ctypes.c_char_p(b"")
p1=ctypes.cast(p1,ctypes.c_void_p)
local=iovec(p1,10)
remote=iovec(0x00400000,20)  # Address of ELF header
最后,使用KMines的pid调用PROCESS_VM_READV

vm(2242,local,2,remote,1,0)
但它返回-1,并且本地或远程的iov_基址没有变化。我觉得我在这里犯了一个很简单的错误,但我不能完全指出它


非常感谢您的帮助,祝您度过愉快的一天。

在这里可能太晚了,但我能够复制过程之人的例子

我们需要传递一个有效的可读远程地址,出于测试目的,我编译了一个简单的hello world并使用gdb来读取一个有效地址

(gdb) break main
Breakpoint 1 at 0x5a9: file hello.c, line 4.
(gdb) run
Starting program: /user/Desktop/hello
=> 0x800005a9 <main+25>:    sub    esp,0xc
   0x800005ac <main+28>:    lea    edx,[eax-0x19b0]
   0x800005b2 <main+34>:    push   edx
   0x800005b3 <main+35>:    mov    ebx,eax
   0x800005b5 <main+37>:    call   0x800003f0 <puts@plt>
   0x800005ba <main+42>:    add    esp,0x10
   0x800005bd <main+45>:    nop
   0x800005be <main+46>:    lea    esp,[ebp-0x8]
   0x800005c1 <main+49>:    pop    ecx
   0x800005c2 <main+50>:    pop    ebx
(gdb) x/20b 0x800005a9
0x800005a9 <main+25>:   0x83    0xec    0x0c    0x8d    0x90    0x50    0xe6    0xff
0x800005b1 <main+33>:   0xff    0x52    0x89    0xc3    0xe8    0x36    0xfe    0xff
0x800005b9 <main+41>:   0xff    0x83    0xc4    0x10
输出

user@ubuntu:~/Desktop# python process_vm_readv.py
[+] received 20 bytes
[+] 0x83 0xec 0xc 0x8d 0x90 0x50 0xe6 0xff 0xff 0x52 0x89 0xc3 0xe8 0x36 0xfe 0xff 0xff 0x83 0xc4 0x10
user@ubuntu:~/Desktop# python process_vm_readv.py
[+] received 20 bytes
[+] 0x83 0xec 0xc 0x8d 0x90 0x50 0xe6 0xff 0xff 0x52 0x89 0xc3 0xe8 0x36 0xfe 0xff 0xff 0x83 0xc4 0x10