Falha de segmentação

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Segmentation fault)
Ir para: navegação, pesquisa

Falha de segmentação (segmentation fault, também referido por segfault) é um erro ocorrido num programa. Uma falha de segmentação ocorre quando um programa tenta aceder (ler ou gravar) a um endereço na memória RAM que está reservado para outro programa (ou o próprio sistema operativo), ou que não existe.

Nos sistemas Unix ou Unix-like quando acontece este tipo de erro o sinal SIGSEGV é enviado ao programa, permitindo ao utilizador saber que houve segmentation fault, normalmente depois disto as informações úteis para um futuro debug são gravadas no ficheiro core (core dump).

Esse tipo de falha pode indicar vulnerabilidades como Buffer Overflow numa aplicação.

[editar] Exemplo

O seguinte programa, escrito em Linguagem C, gera uma falha de segmentação ao ser executado

  1. include <stdlib.h>
 int main(void)
 {
   char *p = NULL;   /* p é um ponteiro para caractere que inicializa apontando para "lugar nenhum" */

  • p = 'x'; /* Tenta gravar o caracter 'x' em endereço nenhum (o ponteiro p não aponta para qualquer endereço) */
   return 0;
 }

Compilado e executado no NetBSD ou no Linux, a seguinte saída (saída) é gerada:

 $ cc -g3 -o segfault segfault.c
 $ ./segfault
 Segmentation fault

Executando o GDB para fazer o debug:

 Program received signal SIGSEGV, Segmentation fault.
 0x080487b0 in main () at segfault.c:4
 4               *p = 'x';
 (gdb) bt

  1. 0 0x080487b0 in main () at segfault.c:4
Ícone de esboço Este artigo sobre Informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Colaboração
Imprimir/exportar
Ferramentas
Noutras línguas