SIGTRAP 反调试

当程序触发SIGTRAP信号,通常用于操作系统与调试器之间的交互。然而,在自动生成SIGTRAP信号并处理时,若调试器介入,原本在信号处理函数中还原断点的逻辑将无法执行,可能导致程序陷入调试死循环,从而实现反调试的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SIGTRAP : 调试器设置断点时发出的信号
// arm 断点指令
Thumb	0x01 0xde
Thumb2	0xf0  0xf7  0x00  0xa0
Arm	0x01 0x00 0x9f   0xef
</pre><pre code_snippet_id="1722808" snippet_file_name="blog_20160621_5_730062" name="code" class="html">//intel
CC           int3
CD 03         int 0x3


当促发指令断点时候,这是操作系统会收到 SIGTRAP 信号,并传给调试器,调试器收到信号会还原被设置断点指令,退回pc到值断点处。


那么问题来了,当我们自几signal 出 SIGTRAP 信号处理函数 sigfun 

 signal(SIGTRAP,sigfun);

党有调试的情况下,调试器接管了 SIGTRAP  信号,那我们原本可以在 程序中 sigfun  还原断点指令的工作就得不到运行,而这个断点又不是我们在调试器中主动设置的,调试器也没给我们记录,那么就会陷入一个死循环,达到调试目的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值