LINUX 3.5.4 PTRACE(系列三)

本文深入探讨ptrace系统调用如何改变程序对'CTRL+C'(SIGINT信号)的响应。在包含ptrace的程序中,进程在接收到SIGINT时不会终止,而是暂停。通过分析代码和进程状态,揭示了ptrace如何影响信号处理机制。
摘要由CSDN通过智能技术生成

 

本系列文章将对ptrace系统调用的强大功能进行详细分析和验证,通过本系列文章,可以深入理解ptrace的实现原理和使用方法,之后编写自己的编译器就不在话下了。

我们首先以一个简单的例子作为入门。‘CTRL+C’这个快捷键我们再熟悉不过了。在正常情况下,我们向一个正常的进行发送‘CTRL+C’ 即SIGINT信号,程序就会停止运行。但是,如果我们在程序中加入ptrace系统调用之后,‘CTRL+C’这个信号就不能让进程终止(terminated),而是让进程暂停(stopped)。

程序一:

child1:

#include "ptrace.h"
void main()
{
    ptrace(PTRACE_TRACEME,NULL,0,0);
    while (1);
}

本系列所有的头文件我们都在“ptrace.h”中定义

#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/user.h>     /* For struct user_regs_sturct */
#include <sys/syscall.h>    /* For SYS_write etc */
#include <sys/reg.h> /* For constants ORI_EAX etc */
编译程序并运行

#gcc list1.c -o list1.o

#./list1.o

从上面的程序中我们可以看到,这个程序其实啥也没做,就是一个死循环,此时我们输入'CTRL+C'。然后查看进程的状态

#ps -ax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值