小编Kor*_*kçu的帖子

GDB查找命令错误"警告:无法在y处访问x字节的目标内存,停止搜索"

我正在尝试使用gdb在KMines中查找当前的标志计数.我知道我应该首先寻找内存映射以避免不存在的内存位置.所以我运行info proc mappings命令来查看内存段.我0xd27000-0x168b000从结果中获取了一个随机内存gap()并执行了如下命令:find 0x00d27000, 0x0168b000, 10

但我得到了warning: Unable to access 1458 bytes of target memory at 0x168aa4f, halting search.错误.虽然地址0x168aa4f介于0xd27000和0x168b000之间,但gdb表示它无法访问它.为什么会这样?我该怎么做才能避免这种情况?或者有没有办法忽略未映射/不可访问的内存位置?

编辑:我试图将地址0x168aa4f的值设置为1并且它可以工作,因此gdb实际上可以访问该地址,但在与find命令一起使用时会出错.但为什么?

debugging gdb find memory-segmentation

5
推荐指数
1
解决办法
2084
查看次数

如何在python中调用linux syscall PROCESS_VM_READV?

我正在尝试学习如何在 python 中调用 PROCESS_VM_READV。从手册中阅读,我决定创建类似于他们示例的内容。

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

import ctypes
libc = ctypes.CDLL('libc.so.6')
vm=libc.process_vm_readv
Run Code Online (Sandbox Code Playgroud)

在示例中,有一个名为iovec的结构体。所以,我需要在python中重新创建它

class iovec(ctypes.Structure):
    _fields_=[("iov_base",ctypes.c_void_p),("iov_len",ctypes.c_int)]
Run Code Online (Sandbox Code Playgroud)

然后创建变量本地和远程

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
Run Code Online (Sandbox Code Playgroud)

最后,使用 KMines 的 pid 调用 PROCESS_VM_READV

vm(2242,local,2,remote,1,0)
Run Code Online (Sandbox Code Playgroud)

但它返回 -1 并且本地或远程的 iov_base 没有变化。我觉得我在这里犯了一个非常简单的错误,但不能完全指出它。

任何帮助表示赞赏,祝你有美好的一天。

linux struct ctypes system-calls python-3.x

3
推荐指数
1
解决办法
1338
查看次数