Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <signal.h>
- #include <unistd.h>
- #define SIGNAL_HANDLER_REGISTERED_WITH_SIGNAL_FUNCTION (0)
- #define egy_vegtelen_hosszu_hurok while(1){;}
- #define bele_eses(mibe) mibe
- int b_try_again;
- void signal_handler(int signal_num)
- {
- printf("szegmentacios hiba\n");
- if(b_try_again)
- {
- #if SIGNAL_HANDLER_REGISTERED_WITH_SIGNAL_FUNCTION
- sigset_t sigs;
- sigprocmask(0, 0, &sigs);
- sigdelset(&sigs, signal_num);
- sigprocmask(SIG_SETMASK, &sigs, 0);
- #endif
- execv("./segmentation_fault", (char *[]){ ".", "-s_revive", NULL });
- }
- printf("exit\n");
- exit(EXIT_SUCCESS);
- }
- void krezia(void)
- {
- pid_t pid;
- pid = fork();
- if(pid >= 0)
- {
- execv("./segmentation_fault", (char *[]){ ".", "-s", NULL });
- }
- printf("zamao\n");
- }
- void krezib(void)
- {
- execv("./segmentation_fault", (char *[]){ ".", "-s", NULL });
- printf("zambo\n");
- }
- void funkcio(char *vla)
- {
- *vla = 10;
- }
- void random_funkcio(void *k)
- {
- execv("./segmentation_fault", (char **)k);
- }
- int main(int argc, char* argv[])
- {
- char kenyer;
- #if SIGNAL_HANDLER_REGISTERED_WITH_SIGNAL_FUNCTION
- signal(SIGSEGV, signal_handler);
- #else
- struct sigaction act;
- memset(&act.sa_mask, 0, sizeof(act.sa_mask));
- act.sa_handler = signal_handler;
- act.sa_flags = SA_NODEFER;
- sigaction(SIGSEGV, &act, 0);
- #endif
- printf("ferfi oldal (man page)\n");
- if(argc > 1)
- {
- if(strcmp(argv[1], "-s") == 0)
- {
- funkcio(0);
- }
- else if(strcmp(argv[1], "-ra") == 0)
- {
- krezia();
- }
- else if(strcmp(argv[1], "-rb") == 0)
- {
- krezib();
- }
- else if(strcmp(argv[1], "-s_revive") == 0)
- {
- b_try_again = 1;
- funkcio(0);
- }
- else
- {
- funkcio(&kenyer);
- bele_eses(egy_vegtelen_hosszu_hurok);
- }
- }
- printf("exit main\n");
- exit(EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement