- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否可以从该进程中的线程跟踪同一进程?我在 [1] 中发现了一个讨论,它似乎提出了一种(可能有效也可能无效)对我来说有点涉及的方法,因为我对 pthreads API 不太熟悉。有人尝试过这个吗?任何代码指针都会很棒。
最佳答案
您绝对不想为此使用 POSIX 线程(pthreads)。 POSIX 线程引入了一套全新的应用程序语义,这些语义在这里根本不适用。
第二段解释了如何正确执行此操作:
对于第一个,我找到了一个合理的方法来避免这个问题:调试线程可以执行“vfork()”(或者,如果 vfork() 在libc,直接“克隆(CLONE_VFORK | CLONE_MM)”)以获得新的位于_不同_线程组中的线程,但能够 ptrace 和也与虚拟机“同步”,只是因为它与所有虚拟机共享它可能想要调试的其他线程
这种机制就是 gdb(1) 和 crash(8) 等用户空间调试器的工作原理:它们使用 vfork(2) 创建紧密耦合的子进程,或者使用类似的 Linux 特定的 clone(2) 系统调用。
事实上,除了原始的 init(1) 程序之外,每个程序都是这样运行的:当前进程 fork ,一个进程[通常是子进程],然后 exec(2)' 所需的程序覆盖其执行环境。
关于linux - 使用 ptrace 自附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31394989/
有人添加到 Wikipedia "ptrace" article声称在 Linux 上,一个 ptraced 进程本身不能 ptrace 另一个进程。我正在尝试确定是否(如果是,为什么)是这种情况。下
我的 Linux 守护程序有问题。它以 root 权限开始,进行一些配置,然后通过切换到某个用户和组来永久删除权限并继续工作。切换到非特权用户是这样完成的: void switch_to_user_g
在 ptrace 上发了很多问题之后(最近的 5 个问题是我的 :( )我终于在替换时得到了想要的输出 reg_val[1] = ptrace(PTRACE_PEEKDATA, child, 4 *
来自手册页: PTRACE_GET_SYSCALL_INFO (since Linux 5.3) Retrieve information about the system call that cau
我的Linux守护程序有问题。它从root特权开始,进行一些配置,然后通过切换到某些用户和组永久放弃特权并继续工作。切换到非特权用户的操作如下: void switch_to_user_group(s
目前,对于一个项目,我需要使用 ptrace() 编写某种调试器。最后,它应该显示程序中进入/退出的每个函数/系统调用以进行跟踪。 现在,我被困住了。我制作了一个小程序,它应该尝试跟踪给定的程序,并根
考虑这个无限循环的简单程序: int main(void) { for(;;); } 使用 ptrace 向其中注入(inject)系统调用非常简单,如下所示: #include #
我有以下代码。它只是在进入无限循环之前调用 ptrace(PTRACE_TRACEME)。 我有两个问题: 执行二进制文件后,即使我是 root,我也无法附加 gdb。 使用 ptrace(PTRAC
我正在使用 Go 的系统调用包 Ptrace 接口(interface)来跟踪进程。问题是,如果被跟踪者长时间运行,跟踪似乎会挂起。我尝试用 C 实现复制这个问题,但一切似乎都运行良好。 这是重现该问
我只想跟踪 C 程序的一部分以进行系统调用。我使用 ptrace() 和 PTRACE_TRACEME 选项来开始跟踪。如何在几行代码后阻止此进程被跟踪。我正在尝试使用 PTRACE_DETACH 但
ptrace 可以在进入/退出系统调用时获取寄存器和内存数据。但是,如果 linux 系统调用处理程序更改了一些内存,包括堆栈中的某个位置,我如何才能知道哪个内存已被更改。 最佳答案 你不能;但例如
我想在 Linux 上跟踪 PIE,例如在给定的指令地址中断。从反汇编中,我得到了指令的相对地址 - 如何找出可执行文件的加载位置,以便获得绝对地址? GDB 能够跟踪 PIE - 它是如何处理的?
我想使用 ptrace() 调用从用户定义的函数中捕获信息。 但是函数地址不稳定(因为ASLR)。 如何以编程方式获取另一个程序的函数信息,例如gdb? #include #include #in
我在研究项目上遇到了问题。我正在尝试的是使用 ptrace 来观察目标进程的执行。在 ptrace 的帮助下,我将 mprotect 系统调用注入(inject)目标代码段(类似于断点)并将堆栈保护设
我正在尝试使用 ptrace 实现数据流异常检测。经过一些研究,我实现了一个类似于 strace 的程序。现在,我对此感到困惑,这就是 wiki 告诉我的关于系统调用的内容: "System call
我以 ./main & 运行我的进程 它给了我一个看起来像这样的地址:[1] 4257 然后在一个新的终端上我这样做:./tracer 4257 这行代码返回-1 ptrace(PTRACE_ATTA
我正在编写一个程序来监视系统调用(除其他外)。但是我在让 ptrace 识别我传递给它的进程 ID 时遇到了一些麻烦。执行程序后,我收到此错误消息: :No such process 但是,我已经在调
当我附加到另一个进程时,我无法跟踪 fork/exec 事件,从 waitpid 返回的 status 始终为零(在右移 16 次之后)。 我已经成功附加到 bash shell,但是无论我运行什么命
我想按以下方式(伪代码)使用 ptrace: child : foo(); now that foo is done parent should use ptrace to chang
我正在尝试使用 ptrace 在运行时更改另一个程序变量,在我的例子中是一个虚拟 shell。 int main(void) { char buf[MAXLINE]; fgets
我是一名优秀的程序员,十分优秀!