Falha de segmentação

Origem: Wikipédia, a enciclopédia livre.

Falha de segmentação (segmentation fault, também referido por segfault) é um erro que ocorre em programa quando este tenta acessar (para leitura ou escrita) 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 usuário 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.

Exemplo[editar | editar código-fonte]

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

# 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
# 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.