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">//intelCC int3
CD 03 int 0x3
当促发指令断点时候,这是操作系统会收到 SIGTRAP 信号,并传给调试器,调试器收到信号会还原被设置断点指令,退回pc到值断点处。
那么问题来了,当我们自几signal 出 SIGTRAP 信号处理函数 sigfun
signal(SIGTRAP,sigfun);党有调试的情况下,调试器接管了 SIGTRAP 信号,那我们原本可以在 程序中 sigfun 还原断点指令的工作就得不到运行,而这个断点又不是我们在调试器中主动设置的,调试器也没给我们记录,那么就会陷入一个死循环,达到调试目的。
当程序触发SIGTRAP信号,通常用于操作系统与调试器之间的交互。然而,在自动生成SIGTRAP信号并处理时,若调试器介入,原本在信号处理函数中还原断点的逻辑将无法执行,可能导致程序陷入调试死循环,从而实现反调试的效果。
4719

被折叠的 条评论
为什么被折叠?



