如何让 SIGTRAP 被 GDB 中的 sighandler 捕获?

逆向工程 调试 数据库 断点
2021-06-29 14:13:02

我有一个我试图反转的程序,它包含一个int3 (0xCC),它发出一个SIGTRAP信号,然后由sigaction 中定义sighhandler处理
处理程序对某些值执行计算。

当我使用 GDB 进行调试时,会引发 SIGTRAP,并且处理程序没有收到信号,因为它是 GDB 拦截它。我需要捕获信号以查看处理程序动态返回的值。

我尝试使用以下命令禁用 SIGTRAP 拦截:

handle SIGTRAP nostop noprint noignore  

但我有以下错误:

Program terminated with signal SIGTRAP, Trace / breakpoint trap.
The program no longer exists.

我的目标是确保我可以让 SIGTRAP 被 sighandler 而不是 GDB 拦截,但仍然能够启动程序并放置断点。

1个回答

我设法找到了解决方案。
程序发出SIGTRAPgdb 中导致断点时,我使用以下命令:

signal SIGTRAP

将信号发送到程序(然后发送到处理程序),程序按预期继续。
不需要使用问题中显示的“handle”命令,因为它似乎会使gdb发生故障。