gpt4 book ai didi

c - 阻止 SIGINT 终止程序

转载 作者:行者123 更新时间:2023-11-30 14:42:41 26 4
gpt4 key购买 nike

我需要一些关于 C 程序的帮助 - 它是一个反向 shell ( https://github.com/arturgontijo/remoteShell/blob/master/reverseShell.c ) 我做了一些更改,比如将所有内容放入循环和一些 sleep 模式 + 添加一些参数直接传递 IP 和 PORT 现在那件事工作得非常好,它很稳定(无法使用 TAB 自动完成内容的问题,我并不关心),但我真正关心的是,如果在目标计算机上按 CTRL+C 程序,这个东西就会崩溃自行退出。现在我使用此示例来阻止 CTRL+C 调用:

/* Signal Handler for SIGINT */
void sigintHandler(int sig_num)
{
/* Reset handler to catch SIGINT next time.
Refer http://en.cppreference.com/w/c/program/signal */
signal(SIGINT, sigintHandler);
printf("\n Cannot be terminated using Ctrl+C \n");
fflush(stdout);
}

signal(SIGINT, sigintHandler);

我在网上找到了这个示例并将其也放在我的循环中,但仍然是客户端按 ctrl+C 中断了程序。我想知道 dup2() 是否负责这个或其他事情,因为在简单的 C 程序上,这实际上工作得很好。

最佳答案

您可以使用sigetops family of functions操纵发送到您的应用程序的信号。

因此,对于您的示例,您可以使用:

#include <signal.h>
#include <unistd.h>

int main(int argc, char **argv)
{
sigset_t block_set;

sigemptyset(&block_set);

sigaddset(&block_set, SIGINT);

sigprocmask(SIG_BLOCK, &block_set, NULL);

while(1) {
sleep(1);
}
}

运行示例:https://repl.it/repls/RelevantImaginarySearchservice

您可以稍后通过调用电话来解除信号屏蔽

sigprocmask(SIG_UNBLOCK, &block_set, NULL);

关于c - 阻止 SIGINT 终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com