2012-02-29 14 views

回答

7

您正在寻找的功能是sigaction。它有三个参数,第一个是信号,第二个是指向新的sigaction结构的指针,第三个是指向旧的sigaction结构(由函数填充)的指针。要获取当前的信号处理程序,请将第二个参数设置为NULL的sigaction进行调用。例如,

struct sigaction oldact; 
sigaction(SIGINT, NULL, &oldact); 

printf("SIGINT handler address: 0x%lx\n", oldact.sa_sigaction); 

此方法将要求您修改源代码。

你也可以通过gdb来做到这一点,它不需要修改源代码。例如,如果您在注册信号处理程序之后附加到进程,这将起作用。

(gdb) call malloc(sizeof(struct sigaction)) 
(gdb) sigaction(SIGINT, NULL, $1) 
(gdb) print ((struct sigaction *)$1)->sa_sigaction 
(gdb) info sym <address from previous step> 
+0

如果gdb认为sigaction是一个类型而不是函数,应该使用'call __sigaction(...)'来代替。 – 2012-06-08 11:33:37

相关问题