之前碰到很多逆向题目是和signal相关的,这里总结一下使用gdb调试时需要的一些命令。
signal是一种软中断。举个例子来说,我们都知道在Linux下使用Ctrl+c
可以停止程序,Ctrl+C
就会产生一个程序结束的中断信号,当终端接收到,就会终止当前进程。
我们都知道,在调试过程中,如果程序产生中断,默认情况下是会交给调试器来进行处理,对于开发过程中这是我们想看到的,这样可以准确的定位到问题处。而在我们逆向过程中,这是我们不愿意看到的。首先有可能由于流程交给调试器可能会影响我们之后调试的结果。还有一种可能就是开发者可以通过这种方式来进行反调试。所以灵活的控制signal发生时流程具体是在程序手中还是调试器是比较重要的。
info signals info handler
可以看到这里有五个表头,分别是Signal、Stop、Print、Pass、De-script-ion
,分别代表了,信号、信号发生程序是否停止、信号发生是否输出提示、信号发生是否被gdb忽略、信号的具体描述。
就用段错误来举例,段错误产生的信号是SIGSEGV
,这时候会停止程序让调试器处理,并且会打印段错误相关的输出,且不会让调试器进行忽略。
handle SIGSEGV nostop noprint pass
这时候就可以在handler下断点进行跟进调试。
算了,懒得总结了,贴一个链接https://www.cnblogs.com/frisk/p/11602973.html,除非这个师傅删了,不过不重要在siganl.h
里边也有定义,就是懒得翻源码。