首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用ptrace()取消等待返回的进程

ptrace()是一个系统调用,用于跟踪和控制其他进程的执行。它可以用于取消等待返回的进程。下面是如何使用ptrace()取消等待返回的进程的步骤:

  1. 导入相关的头文件:
代码语言:txt
复制
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
  1. 创建一个子进程:
代码语言:txt
复制
pid_t child = fork();
  1. 在子进程中执行需要等待的操作:
代码语言:txt
复制
if (child == 0) {
    // 子进程执行的代码
    // ...
}
  1. 在父进程中使用ptrace()来取消等待子进程的返回:
代码语言:txt
复制
else {
    // 父进程执行的代码
    int status;
    waitpid(child, &status, 0);  // 等待子进程返回
    ptrace(PTRACE_CONT, child, NULL, NULL);  // 取消等待子进程的返回
}

这样,父进程就可以取消等待子进程的返回,并继续执行其他操作。

ptrace()函数的参数解释:

  • 第一个参数是ptrace的操作类型,这里使用PTRACE_CONT表示继续执行。
  • 第二个参数是要跟踪的进程的PID。
  • 第三个参数是要传递给ptrace()的数据,这里设置为NULL。
  • 第四个参数是要传递给ptrace()的数据,这里设置为NULL。

ptrace()的优势是可以实现对其他进程的跟踪和控制,可以用于调试、监控和分析进程的执行。它在调试工具和性能分析工具中广泛应用。

在腾讯云中,与ptrace()相关的产品是云主机(CVM)。云主机是腾讯云提供的一种弹性、可扩展的云计算服务,可以满足各种规模和需求的应用场景。您可以通过以下链接了解更多关于腾讯云主机的信息:

请注意,以上答案仅供参考,具体实现方法可能因操作系统和编程语言而异。在实际应用中,请根据具体情况进行调整和修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )

文章目录 一、等待进程状态改变 二、detach 脱离进程调试 PTRACE_DETACH 三、调试中继续运行程序 PTRACE_CONT 一、等待进程状态改变 ---- 上一篇博客 【Android...0; // 等待进程状态 // 如果进入处于被调试状态下 , 其进程状态会发生变化 // 一旦进程处于被调试状态 , 就会处于 WUNTRACED 状态 , WUNTRACED 是宏定义..., 直接返回 if (m_nPid == 0)return PTERR_SUCCESS; // detach 调试进程 , 如果脱离成功 , 直接返回 if (ptrace(PTRACE_DETACH..., 才需要调用 waitpid() 方法 , 等待进程状态改变 ; 本操作不需要等待 被调试进程 状态返回变化 ; 三、调试中继续运行程序 PTRACE_CONT ---- 调试过程中 , 如果需要被调试进程继续运行..., 才需要调用 waitpid() 方法 , 等待进程状态改变 ; 本操作不需要等待 被调试进程 状态返回变化 ;

40110

【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

, pid, NULL, 0) 函数附着目标进程 , 获取目标进程控制权 , 传入 PTRACE_ATTACH 参数 ; 具体 ptrace 函数族参数 , 参考 【Android 逆向】ptrace...函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 ) 博客 ; 之后 , 需要 阻塞等待...被调试 目标进程返回 , 如果目标进程状态变为 WUNTRACED 被调试状态 , 就可以执行下一步操作 ; int status = 0; /* 等待关联进程结果返回 , 目标进程状态变为..."); return -1; } int status = 0; /* 等待关联进程结果返回 , 目标进程状态变为 WUNTRACED */ waitpid(pid, &status, WUNTRACED..., 传入 PTRACE_GETREGS 参数 ; 具体 ptrace 函数族参数 , 参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限

47220
  • Android逆向分析从入门到深入

    表示设置远程进程寄存器环境 PTRACE_CONT,表示使远程进程继续运行 PTRACE_PEEKTEXT,从远程进程指定内存地址读取一个word大小数据 PTRACE_POKETEXT,往远程进程指定内存地址写入一个...gdb流程图 检测ptrace 当我们使用ptrace方式跟踪一个进程时,目标进程会记录自己被谁跟踪,可以查看/proc/pid/status来确认....下图是Frida原理, 其最初建立连接时通过ptrace向相关进程注入代码, 其后使用其特有的通道来通信, 如下图. Frida-Gadget支持Android下非root和iOS下非越狱逆向....待debug完毕, 使用下述语句取消打开app时等待....取消等待debug: adb shell am clear-debug-app 这里示例不在展开, 只说明这种方法和其效果, 对其感兴趣可以看下述链接.

    1.2K22

    Android逆向分析从入门到深入

    ,表示设置远程进程寄存器环境 PTRACE_CONT,表示使远程进程继续运行 PTRACE_PEEKTEXT,从远程进程指定内存地址读取一个word大小数据 PTRACE_POKETEXT,往远程进程指定内存地址写入一个...[gdb流程图] 检测ptrace 当我们使用ptrace方式跟踪一个进程时,目标进程会记录自己被谁跟踪,可以查看/proc/pid/status来确认....下图是Frida原理, 其最初建立连接时通过ptrace向相关进程注入代码, 其后使用其特有的通道来通信, 如下图. Frida-Gadget支持Android下非root和iOS下非越狱逆向....待debug完毕, 使用下述语句取消打开app时等待....取消等待debug: adb shell am clear-debug-app 这里示例不在展开, 只说明这种方法和其效果, 对其感兴趣可以看下述链接.

    4K96

    如何使用 Supervisor 管理你进程

    在我们开发生活中,常常需要让某些应用或服务持续运行。这时候,就需要一个能够帮助我们管理这些进程工具。Supervisor 是一个广泛使用进程管理工具,它可以让你轻松管理和控制多个进程。...在本文中,我们将一起学习如何在 Linux 系统中安装和使用 Supervisor,确保你应用或服务能够无忧无虑地运行。什么是 Supervisor?...Supervisor 常用命令在深入了解如何在特定环境下安装和配置 Supervisor 之前,让我们先熟悉几个最常用 Supervisor 命令:命令...supervisorctl status在 Ubuntu 上 安装 Supervisor安装和配置 Supervisor 在 Ubuntu 系统上流程与在 CentOS 上类似,但使用包管理器为...通过简单配置,你可以确保你应用和服务能够稳定运行,即使在遇到突发问题时也能自动恢复。希望这篇指南能帮助你更好地理解和使用 Supervisor!

    12110

    Linux Hook 笔记

    进程用wait 函数(系统调用)来等待内核通知. 然后就可以查看系统调用参数以及做其他事情....当我们检查完了系统调用之后, 可以调用ptrace并设置参数PTRACE_CONT让子进程继续运行. 值得一提是, 这里child为子进程进程ID, 由fork函数返回....使用PTRACE_ATTACH参数就可以追踪正在运行程序: ptrace(PTRACE_ATTACH, pid, NULL, NULL) 其中pid位想要追踪进程进程id....当前进程会给被追踪进程发送SIGSTOP信号,但不要求立即停止, 一般会等待进程完成当前调用. ATTACH之后就和操作fork出来TRACEME子进程一样操作就好了....我们用之前替换寄存器内容方法,将%rip内容修改为int 3机器码, 使得对应进程暂停执行; 恢复寄存器状态时使用PTRACE_SETREGS参数.

    2.8K60

    linux-沙盒入门,ptrace从0到1

    ptrace使用场景: 编写动态分析工具,如gdb,strace 反追踪,一个进程只能被一个进程追踪(注:一个进程能同时追踪多个进程),若此进程已被追踪,其他基于ptrace追踪器将无法再追踪此进程,...当使用ptrace跟踪后,所有发送给被跟踪进程信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程状态就会被系统标注为TASK_TRACED,而父进程收到信号后,就可以对停止下来进程进行检查和修改...一个信号就是一条小消息,它通知进程系统中发生了一个某种类型事件,信号是多种多样,并且一个信号对应一个事件,这样才能做到当进程收到一个信号后,知道到底是一个什么事件,应该如何处理(但是要保证必须识别这个信号...);//跟踪pid进程 wait(NULL); //等待系统通知 ptrace(PTRACE_GETREGS, traced_process, NULL, ®s);/*获取目标进程所有寄存器值...绕过简单ptrace 上面谈论到ptrace在隐藏过程中攻防博弈,并没有说如何绕过ptrace,接下来我们讲如何绕过ptrace一些手段。

    4.1K30

    【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一、等待远程进程 mmap 函数执行完毕 二、从寄存器中获取进程返回值 三、博客资源 前言 前置博客 : 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 |...动态库中 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 ) 本博客进行收尾 , 远程调用 mmap 函数后 , 等待函数执行 , 获取该函数执行返回值 ; 一、等待远程进程 mmap...&stat, WUNTRACED); } 二、从寄存器中获取进程返回值 ---- 等待远程进程 mmap 函数执行完毕返回后 , 先调用 ptrace_getregs 方法 , ptrace_getregs...(target_pid, regs) 获取远程进程 寄存器信息 ; 然后读取该寄存器数据中 EAX 寄存器值 , 用于获取远程执行 dlopen 函数返回值 , 返回是 libbridge.so...动态库首地址 ; /* 读取寄存器返回值 */ long ptrace_retval(struct pt_regs* regs) { #if defined(__arm__) return regs

    65020

    如何使用Vegile隐藏指定进程运行

    如果广大研究人员已经在目标系统上部署好了后门之后,该工具将帮助我们进一步对后门/rootkit进行设置,并隐藏指定进程,而且不会在Metasploit中限制会话。...工具特性 1、支持使用reverse_shell后门; 2、支持msfvenom命令; 3、进程隐藏; 4、支持使用crontab和xinit.d实现后门持久化; 5、实现会话、后门、rootkit...) 然后切换到项目目录中,并给工具脚本提供可执行权限即可: cd Vegile chmod +x Vegile 工具使用 如果不使用任何参数直接运行Vegile的话,我们将能看到工具帮助菜单以及常见命令选项...-h / --help (向右滑动,查看更多) 工具运行截图 、 工具使用演示 不受限制会话与无法终止后门: 演示视频:【https://www.youtube.com/watch...v=oYyH1G3Lsvo】 隐藏后门/rootkit进程: 演示视频:【https://www.youtube.com/watch?

    1.8K30

    如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程返回一个非零退出码?

    问题 如何在 Bash 脚本中等待该脚本启动多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零退出码? 简单脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊 sleep 函数,它将睡眠秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它返回代码...# 存储上一个子进程启动 pid echo " pid = ${pids[$i]}" done for pid in $pids; do wait $pid rc=$?

    10300

    Android app反调试与代码保护一些基本方案

    在Java程序代码里也可检测该属性值,如下: ? NDK: (1)ptrace函数 Linux内核ptrace函数原型: ?...ptrace可以允许A进程控制B进程,并且A进程可以检查和修改B进程内存和寄存器。...但是一个进程只能被一个进程调试,所以根据这个特点,可以让进程自己ptrace自己,传入request设置为PTRACE_TRACEME,程序被自己附加调试后,其他调试操作就会失败了。...这里,就可以使用Inotify API对上述三个文件监控,如果有发现打开、读写操作,极大概率就是进程正在被破解。...取消 发布到看一看 确定 最多200字,当前共字 发送中 ? 微信扫一扫 关注该公众号 ? 微信扫一扫 使用小程序 即将打开""小程序 取消 打开

    3.4K42

    自己动手写一个GDB|基本功能

    本文并不是 GDB 使用教程,所以不会对 GDB 使用进行详细介绍。本文目的是,教会大家自己动手撸一个简易 GDB。所以阅读本文前,最好先了解下 GDB 使用。...然后子进程会调用 load_executable_file() 函数加载要进行调试程序,并且等待进程发送调试命令。...接着,当调用 execl() 系统调用加载并且执行被调试程序时,内核会把当前被调试进程挂起(把运行状态设置为停止状态),等待进程发送调试命令。...这些命令都可以通过 ptrace() 系统调用发送,下面我们介绍一下怎么使用 ptrace() 系统调用来对被调试进程进行调试操作。...*/ ptrace(PTRACE_SINGLESTEP, debug_pid, 0, 0); /* 5) 等待被调试进程(子进程)发送信号 */ wait

    1.3K40

    Chaos Mesh® 技术内幕 | 如何注入 IO 故障?

    如何恢复?毕竟在有文件被打开情况下是无法 umount 。 后文将用同一个手段解决这两个问题:使用 ptrace 方法在运行时替换已经打开 fd。...0x050f (对应 syscall 指令),再依照系统调用调用约定将各个寄存器值设为对应系统调用编号或参数,然后使用 ptrace 单步执行,就能从 rax 寄存器中拿到系统调用返回值。...然后用 ptrace 让目标进程运行这段程序,就完成了在运行时对 fd 替换。 读者可以稍稍思考如何使用类似的方式来改换 cwd,替换 mmap 呢?它们流程完全是类似的。...去掉 CLONE_THREAD 之后等待进程死亡问题 在子进程死亡时,会向父进程发送 SIGCHLD 信号通知自己死亡。...然后使用 wait 来等待所有子进程死亡再退出。

    1.2K00

    Linux:断点原理与实现

    前言 从事编程工作我们,总有调试时刻,不管是通过 IDE 调试开发中代码,还是通过 GDB 排查正在运行进程。...特别是经常使用 GDB 童鞋,对它提供强大功能更加如数家珍,其中就不乏 breakpoint(断点)。 刚好最近做到 Ptrace 相关实验,也顺便撸了这篇小文来分享下 断点 当中道理。...在ptrace中有两个角色: tracee:被追踪者,它是被监控进程,通过ptrace系统调用操作作用在它之上 (譬如:上文 22346 进程); tracer:追踪者,它负责监视并处理被追踪者传来信息...恢复运行,等待 trap 触发 // 让 tracee 继续运行 ptrace(PTRACE_CONT, pid, addr, data) 5....,也让每个断点处可以重复利用; 甚至还比如:涉及到 Ptrace 错误返回都要优雅处理,因为在每个返回值不为 0 情况下,贸然进行下一步是非常危险,非常大可能导致 tracee coredump;

    1.9K10

    Linux内核内幕:深入解析进程结束过程

    那么内核是如何处理进程自身消亡,又是如何处理它进程、父进程呢?让我们来结合《Linux内核设计与实现》以及Linux v6.3版本进行学习与了解。...,请注意这里使用tsk指针指向了当前进程。...接着通过validate_creds_for_do_exit来检验进程cred结构体是否有效,该结构体是与进程安全相关,并通过io_uring_files_cancel取消已经提交io_uring...audit_free(tsk); tsk->exit_code = code; taskstats_exit(tsk, group_dead); 这里首先调用acct_collect来收集进程系统资源使用情况...它实体task_struct也即进程描述符仍然存在,需要等待其父进程调用wait来收集它,这个进程才算是真正消亡了。

    50710

    【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构返回值获取 | arm 架构远程调用 )

    文章目录 前言 一、x86 架构返回值获取 二、ARM 架构远程调用 前言 在之前博客 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 /...函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 ) 中 , 介绍了 调试进程 远程调用 远程进程 libc.so 动态库中 mmap 函数 , 本博客继续对该远程调用过程进行一些补充...; 一、x86 架构返回值获取 ---- 远程调用 返回值获取 : 在 x86 架构 CPU 中 , 使用 EAX 寄存器记录返回值 , 在 ARM 架构 CPU 中 , 使用 R0 寄存器记录返回值...0 ; 设置该返回作用是 , 为了使 远程进程崩溃 , 调试程序 可以收回控制权 ; regs->ARM_lr = 0; 上述操作寄存器值是在本地设置 , 通过 ptrace_setregs...函数 , 才能将寄存器值设置到远程进程中 ; 寄存器设置完毕后 , 调用 ptrace_continue 函数 , 恢复 远程进程运行 ; if (ptrace_setregs(pid, regs

    49120
    领券