Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Ataque Stack Overflow

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Dica Ataque Stack Overflow

    Em software, um estouro de pilha ocorre quando a memória é muito usado na pilha de chamadas. A pilha de chamadas contém uma quantidade limitada de memória, muitas vezes, determinado no início do programa. O tamanho da pilha de chamadas depende de muitos fatores, incluindo a linguagem de programação, arquitetura da máquina, multi-threading, e quantidade de memória disponível. Quando a memória é muito usado na pilha de chamada da pilha é dito overflow, tipicamente resultando em um acidente de programa. Esta classe de bugs de software é normalmente causada por um dos dois tipos de erros de programação.

    A causa mais comum de estouros de pilha é demasiado profundo ou infinita recursão. Linguagens como Scheme, que implementar a otimização de chamada de cauda, permitem recursão infinita de um tipo específico - recursão de cauda - para ocorrer sem estouro de pilha. Isso funciona porque as chamadas de recursão de cauda não pegar mais espaço de pilha.

    Um exemplo de recursão infinita em C.
    Citação:
    main() {
    main();}

    A principal função, que é sempre executada em primeiro lugar, chama a si mesmo até que a pilha estoura.

    A outra principal causa de uma pilha resultados estouro de uma tentativa de alocar mais memória para a pilha que vai caber. Este é geralmente o resultado da criação de variáveis de matriz local, que são muito grandes. Por este motivo as matrizes maiores do que alguns kilobytes devem ser alocados dinamicamente em vez de como uma variável local.

    Um exemplo de recursão infinita em C.
    Citação:
    main() {
    double x[1000000];}
    A matriz declarada consome 8 megabytes de dados (assumindo que cada casal é de 8 bytes), que é mais memória que está disponível na pilha.

    Stack overflows são agravadas por qualquer coisa que reduz o tamanho efetivo da pilha de um determinado programa. Por exemplo, o mesmo programa a ser executado sem a vários segmentos podem funcionar muito bem, mas logo multi-threading é ativado o programa irá falhar. Isso ocorre porque a maioria dos programas com threads têm menos espaço de pilha por thread que um programa sem o apoio de segmentação. Da mesma forma, novas pessoas para o desenvolvimento do kernel são geralmente desencorajados de usar algoritmos recursivos ou grande pilha de buffers.


    Creditos : inocente
X
Working...
X