Функция, которую вы ищете: sigaction . Он принимает три аргумента, первый - это сигнал, второй - указатель на новую структуру sigaction, а третий - указатель на старую структуру sigaction (заполняется функцией). Чтобы получить текущий обработчик сигнала, вызовите sigaction со вторым аргументом, установленным в NULL. Например,
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>