wait4/ptrace/WIFSTOPPED/WIFSIGNALED

2023-10-09 20:19

本文主要是介绍wait4/ptrace/WIFSTOPPED/WIFSIGNALED,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

按理,当RE/OLE的时候child是会收到SIGSEGV/SIGFPE...等表示RE的信号,或者SIGXFSZ表示OLE的信号

但是在wait4以后WIFSIGNALED(status)并没有得到正确的结果。

Sempr大牛的版本是另做了一些处理:
int sig = status >> 8; 
if(sig == 5);
else{
     switch(sig){
         case SIGSEGV: ...
         case SIGXFSZ: ...
        ...
    }
}

对此感到非常难以理解,于是咨询Sempr大牛。

大牛以其强悍的记忆力回忆一年前的事情,大致的回复是

  status >> 8 差不多是EXITCODE
  sig == 5 差不多是正常暂停

于是广搜资料,获得了一些更详细的信息:

WIFSIGNALED: 如果进程是被信号结束的,返回True
  WTERMSIG: 返回在上述情况下结束进程的信号

WIFSTOPPED: 如果进程在被ptrace调用监控的时候被信号暂停/停止,返回True
  WSTOPSIG: 返回在上述情况下暂停/停止进程的信号

另 psignal(int sig, char *s),进行类似perror(char *s)的操作,打印 s, 并输出信号 sig 对应的提示,其中 
sig = 5 对应的是 Trace/breakpoint trap
sig = 11 对应的是 Segmentation fault
sig = 25 对应的是 File size limit exceeded

于是问题就解决了。

最后我的判断条件是:
if(WIFSIGNALED(status) || 
    (WIFSTOPPED(status) && WSTOPSIG(status) != 5))

另外用 strsignal(int sig) 函数获得 信号sig 对应的描述文字并用fprintf(stderr, "%s", 这样的语句输出。

--


转载请注明出自  http://www.felix021.com/blog/read.php?1662  ,如是转载文则注明原出处,谢谢:)
RSS订阅地址:  http://www.felix021.com/blog/feed.php  。

这篇关于wait4/ptrace/WIFSTOPPED/WIFSIGNALED的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175300

相关文章

Android利用ptrace实现Hook API

以下内容选自《深入解析Android5.0系统》,京东,当当,亚马逊上有售。 Hook API的技术由来已久,在操作系统未能提供所需功能的情况下,利用HookAPI的手段来实现某种必需的功能也算是一种不得已的办法。 笔者了解Hook API技术最早是在十几年前,当时是在Windows平台下开发电子词典的光标取词功能。这项功能就是利用HookAPI的技术把系统的字符串输出函数替换成了电子词典中

Bionic中的ptrace函数

ptrace函数的原型是: long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); q  参数request是请求ptrace执行的操作。 q  参数pid是目标进程的ID。 q  参数addr是目标进程的地址值。 q  参数data的作用则根据request的不同而变化,如果需要向目

《iOS防护02》破解ptrace防护

本文接上一篇《iOS防护01》ptrace防护 ,实现破解ptrace防护。 创建动态库 因动态库的加载在main函数之前,所以通过动态库中编写代码实现hook。 按照下图步骤创建动态库 截屏2020-10-30上午10.48.33.png 截屏2020-10-30上午10.52.25.pn

《iOS防护01》ptrace防护

获取ptrace.h头文件 prace.h是系统的C语言文件。 首先用Xcode创建一个命令行程序 截屏2020-10-29下午5.33.45.png 命令行程序的 mian.m 中导入 ptrace 头文件 import <sys/ptrace.h> 截屏2020-10-29下午5.38.06.png 查看 ptrace.h 的定义,复制ptrace.h中

socket/ptrace

1. socket (1). 介绍     使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。 (2). 服务器端建立 (socket -> bind -> listen -> accept -> read/write)     程序通过调用socket函数(AF_LOCAL, SOCK_STREAM),建立了主动连接的套接字.

iOS逆向:【反反调试】针对ptrace、sysctl、syscall,采用hook->判断函数->返回结果(针对越狱环境的hook、非越狱环境的hook、反反调试py脚本)

文章目录 前言I、越狱hookII、非越狱hookIII、 反反调试py脚本IV see also4.1 两个lldb py脚本开源库: 前言 反反调试:针对ptrace、sysctl、syscall,采用hook函数->判断函数-〉返回结果的流程;hook的方式有越狱环境的hook、非越狱环境的hook在lldb的时候采用python脚本自动在目标函数设置条件断点,在断点的回

反调试 - ptrace占坑

ptrace占坑 这是ptrace占坑的标志。 ptrace可以让一个进程监视和控制另一个进程的执行,并且修改被监视进程的内存、寄存器等,主要应用于调试器的断点调试、系统调用跟踪等。 在Android app保护中,ptrace被广泛用于反调试。一个进程只能被ptrace一次,如果先调用了ptrace方法,那就可以防止别人调试我们的程序。这就是传说中的先占坑。 一个进程只能被一个进程附

Linux系统调用--ptrace函数详解

http://hi.baidu.com/ordeder/item/77cf1cdc8ca93fe3795daab0 【ptrace系统调用】 功能描述: 提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心影像与寄存器的能力。主要用于执行断点调试和系统调用跟踪。父进程可通过调用fork,接着指定所产生的子进程的PTRACE_TRACEME行为,最后使用exe

一种Linux下ptrace隐藏注入shellcode技术和防御方法

一、前言 Unix和类Unix操作系统提供的ptrace系统调用支持一个进程控制另一个进程,常被用于程序调试、分析和监测工具,例如gdb、strace等。通过ptrace可以查看和修改被控制进程的内部状态,因此渗透攻击在注入shellcode时也会使用ptrace。本文介绍一种Linux下使用ptrace隐藏注入shellcode的技术和防御方法。 二、背景 不同版本操作系统有各自实现ptr

无需Ptrace就能实现Linux进程间代码注入

本文讲的是 无需Ptrace就能实现Linux进程间代码注入, ptrace系统调用 ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就