O C++ é uma linguagem considerada complexa.
Por misturar muito bem recursos de alto e baixo nível, acaba trazendo problemas de segurança e/ou estabilidade por conta de programadores de todos os níveis.
Quando nossa aplicação tem uma vulnerabilidade, falha por alguma razão específica ou até mesmo nos difíceis momentos de race conditions; o depurador está lá para nos ajudar!
Depurar hoje em dia, é uma capacidade investigativa e exige que você formule teses e prove-as no decorrer do tempo.
Muitos associam a depuração até mesmo à investigação criminal na qual você procura um suspeito se palpando em provas e baseando nelas, as suas teses.
Sim, existe uma semelhança que eu diria ser até absurdamente grande, mas é claro, os bufferoverflow's não podem matar ninguém. hehe
Então, é com muito orgulho que eu começo, o que eu acredito ser, o primeiro tutorial de depuração avançada voltada inteiramente ao C++ e à parte user-mode do windows.
Nessa primeira parte, não haverá conteúdo específico mas sim uma série de perguntas e respostas sobre a depuração.
--------------------------------------------------------------------------------------------------------
Depuração é o um mecanismo através do qual um software exerce total controle sobre outro.O que é a depuração?
Quando um software perde o controle de si mesmo, em casos de erro por exemplo, outro software pode analisar as causas e ajudar um analista à formular a solução.
A esse software que controla o outro, nós damos o nome de depurador.
Além do caso óbvio que é quando nós não temos acesso ao source code, a depuração é capaz de apontar o erro com rapidez independentemente do número de linhas que o source tenha.Porque depurar ao invés de procurar o erro no próprio source?
Quando se é um pesquisador de vulnerabilidades no windows, então você não tem muita escolha.
É depurar ou depurar!
Sim, e muito.Depuração exige algum conhecimento além da linguagem C++?
Você precisa conhecer bem sobre a arquitetura do sistema operacional; o que não só lhe fará um bom analista mas também, um programador bem melhor.
Mesmo que você não use, seu softwara usa, quer você queira ou não.E se eu não usar nenhum recurso específico do sistema operacional?
Além do que, os recursos específicos de uma linguagem, não suportam tudo o que os recursos específicos de um sistema operacional suportam.
Por exemplo, você pode usar fstream's para manipular arquivos, mas não pode manipulá-los como objetos que é o que eles realmente são para o windows, o que implica por exemplo, na sua falta de capacidade de "setar" permissões para os mesmos.
Esse é só um pequeno exemplo.
Não estou nem de longe discutindo sobre portabilidade X funcionalidade.
Essa discussão não existe e cabe ao desenvolvedor decidir o peso de cada uma para cada software.
Vai sonhando...Se eu usar somente a STL e recursos específicos do C++ em um programa, eu nunca vou ter problemas com access violation ou qualquer outro tipo de erro...
-----------------------------------------------------------------------------------
Agora que a maioria das dúvidas e mitos que eu considero comuns foram respondidas(os), eu vou começar a segunda parte que será completamente técnica dessa vez.
Abrs


Responder com Citação


----- 