Brincadeira com o temido segmentation fault

Aloha! [1]

Começando a dar uma olhada em signals, pensei, ué, podemos mascarar a assustadora mensagem "Falha de segmentação (core dumped)" para algo mais divertido, ou até uma mensagem de debug mais agradável.

Então, para começar os estudos, deixo um exemplo para você que ficou curioso, e para você que achou isso noob demais também :D

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
void policia(int sig, siginfo_t *info, void *x) {
	printf("Atenção, atenção!\n"
		"Suspeito qualificado no código %d foi "
		"encontrado no endereço %p\n",
		info->si_code, info->si_addr);
 
	exit(sig);
}
 
 
int main(int argc, char **argv) {
	struct sigaction act;
	char **teste;
 
	act.sa_sigaction = policia;
	act.sa_flags = SA_SIGINFO;
 
	sigaction(SIGSEGV, &act, NULL);
 
	teste[1] = "foo"; /* Isto é um crime! */
 
	return 0;
}

Resultado:

Atenção, atenção!
Suspeito qualificado no código 2 foi encontrado no endereço 0xb7fc07b4

Como podem ver, a polícia é acionada pois ela foi definida como o handler do sinal SIGSEGV:

act.sa_sigaction = policia;

Mais detalhes (o que faltou no post), materiais relacionados ao assunto, e descrições dos tipos de dados e funções envolvidos com signals podem ser encontrados em:
- http://linux.die.net/man/2/sigaction
- http://www.manpagez.com/man/2/sigaction/

[1] - http://en.wikipedia.org/wiki/Aloha

Legal, dá pra dar uma

Legal, dá pra dar uma brincada com as tão temidas segfaults :)
Interessante seria mostrar a mensagem e o programa não interromper. Tem como?
Abraço ae ecl!

Tem sim, alterei um pouco o

Tem sim, alterei um pouco o código e coloquei em um post separado, demonstrando que isso pode ser feito com o uso de jump.

http://felipe.ath.cx/signal-handling-e-non-local-jumps-terminando-normal...

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options