我正在尝试创建一个Java库,以便在linux上为进程读写内存值。
每次我读取一个值时,ptrace都会返回-1,而且每次都会读取不同的int。
以下是我的主要类代码:
public final class Main {
public static void main(String... args) {
// 10702 ? 00:00:00 idea.sh
Memory buffer = new Memory(4);
System.out.println(ptrace.ptrace(1, 10702, new Pointer(0x7f1f80e81fb
在使用Ptrace命中断点后,我在重置进程时遇到了问题。我实际上是在用python包装。
我在64位的Ubuntu上运行这个程序。
我理解重置该位置的数据并递减指令指针的概念,但在我收到陷阱信号并执行此操作后,我的进程并未结束。代码片段:
# Continue to bp
res = libc.ptrace(PTRACE_CONT,pid,0,0)
libc.wait(byref(wait_status))
if _wifstopped(wait_status):
print('Breakpoint hit. Signal: %s' % (strsignal(_wst
我在一些Linux发行版(Debian,Linux .)上测试了以下代码并且工作,但是在CentOS下,即使我以根用户的身份运行它,也会得到一个错误:
#!/usr/bin/env python
import re
maps_file = open("/proc/18396/maps", 'r')
mem_file = open("/proc/18396/mem", 'r', 0)
for line in maps_file.readlines(): # for each mapped region
m = re.mat
如果程序使用ptrace来检测它是否在调试器中运行,我发现了下面的技巧:
catch syscall ptrace
commands 1
set ($eax) = 0
continue
end
有人能解释一下它是怎么工作的吗?我试图在i r eax之后插入commands 1,但是我不理解我得到的负值:
Catchpoint 1 (call to syscall ptrace), 0x00007ffff778af1e in ptrace (request=PTRACE_TRACEME) at ../sysdeps/unix/sysv/linux/ptrace.c:45
45 ../sysde
我试图在另一个进程中注入一个共享库,并设法让它在x64上工作。不过,当我尝试将它用于32位时,发生了一些奇怪的事情:由于输入/输出错误(errno 5),ptrace无法正确执行。我不知道该做什么,因为同样的代码适用于x64。然后,我尝试使用一个名为test_ptrace的函数来创建一个较小的示例。令人惊讶的是,错误并没有发生在那里,尽管它所做的事情本质上是相同的(在目标进程上分配内存,注入一个有效负载,设置寄存器来匹配有效负载,运行有效负载)。当我看到错误没有发生时,我再次尝试使用一个名为load_library的函数注入共享库。但不幸的是,这个错误再次出现了。
//this is the