首页
学习
活动
专区
工具
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)。云主机是腾讯云提供的一种弹性、可扩展的云计算服务,可以满足各种规模和需求的应用场景。您可以通过以下链接了解更多关于腾讯云主机的信息:

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

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

相关·内容

Mac如何显示取消显示最近使用文档

Mac可以隐藏最近使用文档吗?有些小伙伴mac打开finder会自动打开“最近使用”项目,将最近所有打开图片,txt文档等都一一展现出来,没有任何隐私可言。...那么该如何在finder设置不显示最近文档呢?下面小编就介绍一下该如何关闭最近使用这项功能。 1、在左上角,点击finder(我已经更新版本,所以显示是访达),中偏好设置。...2、在弹出界面内点击通用。 3、点击下方开启“新访”窗口时打开。 4、点击下拉,可以选择你想打开finder时默认显示文件框。...5、如想想在finder左边栏不显示“最近打开”选择的话,可以点击第二步右侧“边栏”将个人收藏下最近使用对勾取消掉就可以。 4、修改后打开finder显示如图。

5.8K30

【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() 方法 , 等待进程状态改变 ; 本操作不需要等待 被调试进程 状态返回变化 ;

34710

【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 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限

41220

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.1K20

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 这里示例不在展开, 只说明这种方法和其效果, 对其感兴趣可以看下述链接.

3.6K96

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.7K60

【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

62020

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一些手段。

3.3K30

如何使用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.7K30

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

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

3.1K42

Linux内核15-内核如何创建进程

)) ptrace_event_pid(trace, pid); /* * 如果实现vfork调用,则将父进程插入等待队列,并挂起父进程...在未来某个进程切换时间点上,调度器把子进程描述符中thread成员中值加载到CPU上,赋予子进程CPU使用权。...esp寄存器加载thread.esp值(也就是获取了子进程内核态栈地址),eip寄存器加载ret_from_fork()函数返回地址(子进程执行下一条指令)。...基本上,新进程执行恰恰在fork()、vfork()或clone()系统调用结束之时。该系统调用返回值保存在寄存器eax中:对于子进程是0,对于父进程来说就是子进程PID。...创建完进程4要素之后,把新进程最开始执行指令设置到eip寄存器即可。然后就是等待内核调度。当轮到新进程使用CPU时候,就从eip寄存器开始执行。

2K10

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

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

1.2K00

iOS逆向之【Anti ptrace】去掉ptrace反调试保护进行lldb调试方案(内含demo)

1、一个被跟踪进程运行中,直到发生一个信号,则进程被中止,并且通知其父进程。 2、在进程中止状态下,进程内存空间可以被读写。父进程还可以使子进程继续执行,并选择是否是否忽略引起中止信号。...、AFLEXLoader、dumpdecrypted、debugserver、ssh、class_dump、hook 破解方案 1、运行时期,断点ptrace,直接返回 2、分析如何调用ptrace...跳过ptrace:过命令thread return直接返回,以跳过函数逻辑。...> thread return > c > DONE II、分析如何调用ptrace,hook ptrace 去掉ptrace思路 当程序运行后,使用 debugserver *:1234...最后在 IDA 中找到调用ptrace代码,分析如何调用ptrace。 开始hook ptrace

2.1K10

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

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

1K40

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.8K10

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来收集它,这个进程才算是真正消亡了。

30410
领券