O que está esmagando a pilha? Pode ser corrigido?

Cada minuto de inatividade da produção geral cuesta dinero a la empresa. Si su aplicacin tiene un problema serio que causa la rottura de la pila, est listo para dar una vuelta. Descubra de antemão qu es romper pilas y qu puede hacer al respecto!

índice de conteúdo

  1. Qu es Destruye la pila?
  2. Rotas Depurar Bateras
  3. Qu hacer al abordar Stack Smashing?

Qu es Destruye la pila ?

Trabalhando como engenheiro de segurança da qualidade, tarde o temprano te encontrar com el trmino aplastar la pila . Como desarrollador, provavelmente descubrir este trmino incluso antes, especialmente se introduziu um erro no cdigo, que causa uma pila rota. É relativamente fcil (como em 'muy fcil' ) para que um desarrollador cometa um erro ao introduzir o aplastamiento de pilas. Como usuário, cuando aprenda a triturar la pila, é provável que el dao ya est hecho.

La rotura de la pila pode ocorrer involuntariamente, como cuando el desarrollador introduziu um erro que provoca la rotura de la pila, ou maliciosamente, um atacante que intenta de alguna manera desbordar ou corromper la pila de un programa.

Stack smashing es un trmino con una definicin un tanto vaga que puede significar varios problemas y puede provenir de una variad de fuentes. Los dos problemas ms importantes que puede causar la rotura de pilas son; 1) escrever / sobreasignar demasiados dados em uma parte determinada de la pila, sobrescribiendo as otra parte de la pila, y 2) donde una fuente externa (maliciosa o no) ha sobrescrito la pila de otro programa, aunque esto es mucho menos comn.

Entonces, qu es una pila? Este também é um trímino vagamente definido. De modo geral, uma pilha de refiere uma pilha de processamento de programas, uma pilha de funções como se define em um certo cdigo de programa / software.

Comience imaginando uma pila de azulejos de bao apilados, listos para ser utilizados por um alicador. sta é uma boa representação de uma pilha de computadores, com algumas modificações. Se cada mosaico estuviera ligeramente desplazado do anterior, sera una imagen mejor eles parecem por qu pronto.

Shutterstock / Piotr Debowski

Imagine que cada mosaico apilado é uma função do programa de computador. A função ms bsica está na parte inferior e pode ser, por exemplo, a função main() em um programa C o C++. C y C++ é uma linguagem de programação que utiliza a pilha de formato extenso.

Cada uma dessas funções no programa C / C++ tende a um nome e provavelmente a um conjunto de variáveis ​​entrantes e salientes. Em trminos simplificados, imagine se uma destas variaveis tem 10 caracteres e alguna outra funcina escreva acidentalmente 100 caracteres nesta variavel. Esto podra daar toda la pila.

Em cuanto al ejemplo de la ficha anterior, imagine alguien com un martillo golpeando la primera ficha com demasiada força e luego destruindo todas as fichas dems. E voilá; desconectador de bateria

La analoga funciona porque, como todos los mosaicos ahora estn rotos en nuestra imagen de memoria ficticia, resultará em uma pila rota. "funciones rotas" Si tu quieres. Cada desplazamiento de cuadro é uma função anidada ms profunda, ms sobre funções de rotas na seção siguiente.

Rotas Depurar Bateras

Considerando que tecnicamente uma referência a "funções rotas" não pode ser completamente correta, por exemplo, é provável que o solo tenha uma função daada e tampoco pode ter uma função daada quando um ataque externo ou um programa que funciona mal, é uma excelente maneira de pensar em uma pila destruida.

De repente, os nomes das variáveis ​​e funções podem ser alterados e um backtrace (flujo de funções que o computador tom para llegar a uma função dada que se bloque y (en nuestro ejemplo) destruy la pila) no tiene ms sentido.

Em geral, cuando miramos un backtrace, tendr un flujo claro de funções que han sido llamadas. Aunque un programa bloqueado no se puede llamar imediatamente "sano", en trminos de backtracing / depuracin, as como se ve un backtrace "sano":

Sin embargo, cuando una pila est daada, la depuracin se vuelve mucho ms difcil. La pila podra verso como:

Este é um exemplo de um problema de rottura de pilha que ocorre no MySQL, o servidor de base de dados (ver log.txt adjunto ao erro 37815 de MySQL para obter uma saída completa) em 2008, o que provoca o demônio do servidor de base de dados ( mysqld ) final.

Mientras que la biblioteca do sistema operacional libc.so.6 , neste caso, parece ter sido manuseado bastante bien la destruccin de pilas (usando algunas caractersticas de fortificacin en el __fortify_fail function), o problema existe em algn lugar del cdigo e desde entonces se ha solucionado.

Tambin tenga en cuenta que neste caso, não vemos os nomes das funções finais, solo se nos mostra o nome binário (curiosamente, o problema parece ter estado no cliente ( mysql ) provocando que el servidor ( mysqld ) para) que é mysql , junto com uma direção de memória da função: mysql[0x8051565] , mysql[0x80525c7] es mysql(main+0x4f8)[0x8053198] .

Normalmente, usando símbolos de purificação (ver ms abajo un artculo sobre GDB que explica quais são os símbolos de depuracin em detalle), vemos nomes de funções com variáveis, e incluídos com alguns níveis de otimização / mincin binaria implements, al ver la nomes de funções, iguais aos que vemos no primer backtrace "saludable" anterior.

Sem embargo, no caso de uma pilha destruida, a salida de nomes de funções, nomes de variáveis ​​ou valores nunca estão garantidos e, um menu, palabra completa Incluso podemos ver diferentes nomes de funções ou uma pilha destruída (outra jrga utilizada a menudo por la gente de TI) de diferentes nomes de funções que no tienen mucho sentido (y provavelmente sean ficticios / falsos ya que la pila se ha sobrescrito de alguna manera).

É muito difícil para o usuário do mar que o mecanismo de filtragem de erros (que pode terminar com muitos resultados diferentes para um único erro, complicando o gerenciamento do mecanismo de detecção de erros de filtragem) como para o desarrollador (que provavelmente tende a usar um -paso) rastreo ou depurador. Ejecucin inversa como RR para averiguar el error en cuestin).

Qu hacer al abordar Stack Smashing?

Si te encuentras com la rotura de pilas, lo primero que debes hacer es comprender un poco mejor el problema y el entorno para conocer su origen. Se você tiver um servidor web popular expuesto na Internet com muitos usuários de jogos que pretendem obter um torneamento ao meio, o servidor também está extraindo Bitcoin, quer assumir a posibilidade de um jogo sucio e averiguar se alguém estiver trabalhando com o servidor. .

Sin embargo, en la mayora de los casos, el problem be solo un error de aplicacin. Como ele dicho 'tan como' , o problema pode ser muito importante, pode resultar em tempo de inatividade dos serviços, pode custar muito dinheiro e, em última instância, não pode ser solucionado. Por exemplo, um servidor de base de dados pode cair debido permanentemente cuando se inicia a que os dados estão em um estado em um estado em combinação com uma falha ou limitação em el cdigo

Se a situação for agravada por la falla en la rotura de pilas o, en outras palabras, por la incapacidade de gerar um seguimiento limpio del problema, la depuracin ser ms complicada y, a veces, casi imposible. Sem embargo, sem temas, la misma depuracin bsica de cualquier error de aplicacin o error / falla / problema sigue siendo la misma.

Lea de archivos de que ocurra parte de los de registro antes, durante y despus el problem. Realize algumas cópias de segurança e de retorno ao tentar a operação. Vuelve a fallar ou não? Busque errores, partes de la pila e inclusive marcos (por exemplo, funções de pila individuais que se muestran, como el do_the_maths funcin en nuestro seguimiento de pila "saludable" original) pode ser colocado nos sus motores de bsqueda favoritos.

Concatenando (com un espacio) los crash frames ms selectivos (arriba) y buscndolos en lnea, um menu se encuentra um informe de erro existente para o problema al que se enfrenta. Sem embargo, no caso da rotulagem da pilha, é provável que estes marcos (nomes de funções) sejam alterados e, por isso, não podem ser usados ​​da mesma maneira. Si ve un mensaje de asercin (uma asercin projetada por um desarrollador en el cdigo) de cualquier tipo, bsquelo tambin.

Siempre apresentar un nuevo informe de error si el problema an no se ha registrado en lnea (podra ayudar a otros que vean lo mismo!) Y proporcione tanta informação sobre o problema como pueda encontrar. Todos los das se registran en lnea miles de informes de erros em muitas aplicações. Com suerte, o equipamento de suporte de sua aplicação de trituração de pilha está disponível para ayudarlo rapidamente.

Também pode ler o nosso artigo Depuracin com GDB: Introduzindo a continuação, você pode começar a depurar os programas C e C++ (e outros) com o purificador de GDB. Tambin explica con ms detalle los conceptos de pila.

  • Su reloj inteligente provavelmente apesta en el seguimiento de pasos, y eso est bien – Revisin de Geek
  • O provedor de serviços de alimentos Edward Don afetado por um ataque de ransomware

Descobre ms contenido

Que é um amplificador integrado?

Google Pixel Watch também tem detecção de cadas, pero no hasta el prximo ao

Las melhores tazas de caf calentadas de 2022

Cmo automatize seu iPhone segn el tiempo, la actividad ou la ubicacin

"Eso debe haber sido antes de mi tiempo"

Por qu la NASA enva a Snoopy a la Luna? – Revisando geek

Deja una respuesta Cancelar la respuesta

Ir arriba