Index
FreeBSD[7 artigos]
-
[620]
Compiling and installing Eclipse on FreeBSD
How to install Eclipse.
-
[637]
FreeBSD pth.h or pthread.h error?
-
[628]
Incompatible libpng version in application and library
Fixing Fatal error in PNG image file: Incompatible libpng version in application and library
-
[639]
Intel 82801G High Definition Audio Controller without audio?
-
[633]
Pulseaudio does not work?
-
[635]
Updating FreeBSD Ports
-
[642]
[Solved] Totem ‘Failed to create output image buffer of…’ on FreeBSD
-
[620]
Compiling and installing Eclipse on FreeBSD
Métodos Computacionais[25 artigos]
-
[570]
0.1 Miscelânea — Enésima Raiz
Este artigo demonstra uma aplicação direta do Método de Newton, que é a expressão para obtenção da enésima raiz de "fi" através de uma implementação computacional.
-
[375]
1.1.1 Raízes de Equações — Métodos Intervalares — Método da Bissecção
Neste artigo é apresentada uma introdução aos métodos intervalares de busca de raízes. Para tais métodos, a primeira exposição é feita sobre as buscas incrementais, que consistem basicamente em testar a nulidade da imagem da função após cada incremento feito dentro do intervalo.
basicamente todos os métodos intervalares fazem uma busca incremental, modificando apenas os seus critérios de teste. Desta forma, surge naturalmente o Método da Bissecção como consequência da busca de raízes dentro de um intervalo. -
[403]
1.1.2 Raízes de Equações — Métodos Intervalares — Regula Falsi
O método conhecido como Regula Falsi, ou "da Falsa Posição" é uma técnica que busca de raízes de funções dentro de um intervalo pré-definido, diferindo-se do Método da Bisecção por avaliar a intersecção entre o eixo abicisso e um segmento de reta produzido através de dois intervalos consecutivos, nos pontos [xi, f(xi)] e [xi+1, f(x_i+1)].
Para algumas funções, este método possui convergência mais veloz que o Método da Bisecção, servindo no refinamento de algumas outras técnicas compostas.
Este artigo faz uma apresentação do método e segue com uma discussão sobre a implementação e as possíveis melhorias computacionais que podem ser aplicadas à ele. -
[563]
1.1.3 Raízes de Equações — Métodos Intervalares — Método de Rider
O Método de Ridder consiste em avaliar a aproximação parcial -- obtida em cada iteração pelo Método da Falsa Posição -- em uma função de ajuste exponencial, a fim de otimizar a busca pela raiz.
-
[435]
1.2.1 Raízes de Equações — Métodos Abertos — Ponto Fixo
O Método do Ponto Fixo é o primeiro e mais básico dos métodos abertos para busca de zeros em funções.
Diferente dos métodos intervalares, onde exige-se um conhecimento prévio da localização da raiz para delimitação do intervalo de busca, os métodos abertos, em geral, necessitam apenas de uma estimativa inicial para convergir à raiz.
Este artigo apresenta uma breve explanação sobre os métodos abertos -- cuja maioria dos métodos numéricos derivam -- e uma implementação do Método do Ponto Fixo. -
[439]
1.2.2 Raízes de Equações — Métodos Abertos — Newton Raphson
O método de Newton-Raphson é um método aberto, pois a convergência que ele provê à raiz não depende da delimitação de um intervalo, possuindo as propriedades descritas para Método do Ponto Fixo.
Provavelmente é o método numérico mais aplicado computacionalmente para a aproximação de raízes, graças à sua capacidade de rápida convergência, associada à simplicidade de sua formulação. -
[450]
1.2.3 Raízes de Equações — Métodos Abertos — Método da Secante
Este artigo demonstra matematicamente a função de iteração do Método da Secante e disponibiliza um algoritmo implementado na linguagem Python.
-
[485]
1.2.4 Raízes de Equações — Métodos Abertos — Método de Halley
O método inventado pelo físico Edmond Halley, é um algoritmo que consiste em aplicar o Método de Newton-Raphson duas vezes, gerando uma fórmula de aproximação com dependência da função, da primeira e da segunda derivada, possuindo a vantagem de convergir cubicamente à raiz.
-
[497]
1.2.5 Raízes de Equações — Métodos Abertos — Método de Steffensen
O Método de Steffensen é uma técnica de busca de raízes de funções muito semelhante ao Método de Newton-Raphson, mas que substitui a derivada da função por uma aproximação.
Este método se difere do Método da Secante por permitir que o delta-quadrado de Aitken seja usado para permitir a aceleração da convergência em alguns casos.
Neste artigo, é apresentado a demonstração do Método de Steffensen, seguido de um comentário sobre o processo de Aitken e como isto é implementado em um programa. -
[549]
1.2.6 Raízes de Equações – Métodos Abertos – Método de Householder
Assim como o Método de Newton exige a derivada de primeira ordem e apresenta uma taxa de convergência quadrática; o Método de Halley leva a primeira e segunda derivada e possui convergência cúbica; o Método de Householder é um algoritmo de busca de raízes que permite que as iterações convirjam a uma taxa d+1 , uma vez que sejam utilizadas d derivadas, onde d é a ordem do método.
-
[528]
1.2.7 Raízes de Equações – Métodos Abertos – Interpolação Quadrática Inversa
Interpolação Quadrática Inversa é uma técnica usada para obtermos zeros de equações não-lineares na forma f(x) = 0. Ele é raramente implementado em aplicações como único método de busca de raízes, sendo usado como fator acelerador da convergência.
-
[544]
1.2.8 Raízes de Equações — Métodos Abertos — Método de Newton Interpolado
Neste artigo, apresentaremos a implementação de uma função de iteração modificada do Método de Newton que permite aproximar uma raiz a uma taxa de convergência de quinta ordem.
-
[457]
1.3.1 Raízes de Equações — Raízes de Polinômios — Newton-Raphson para polinômios
Os polinômios formam uma classe de função toda especial, contendo propriedades e relações particulares e bem conhecidas. Devido a isso, alguns métodos computacionais foram desenvolvidos de forma a permitir encontrar suas raízes.
Como funções polinomiais formam soluções de diversos problemas físicos, matemáticos e de outras áreas, aplicar o método correto que melhor resolva, certo problema pode ser a chave para uma solução computacionalmente elegante e eficiente.
Este artigo apresenta uma breve introdução aos métodos de busca de zeros de polinômios e dispõe uma adaptação do Método de Newton para suportar raízes complexas -- tipo de solução quase sempre presente para este tipo de função. -
[463]
1.3.2 Raízes de Equações — Raízes de Polinômios — O Método de Muller
O Método de Muller é uma técnica modificada do Método da Secante, mas que ao contrário dessa, não estima a raiz de uma função prolongando uma reta através de dois pontos -- fazendo com que esta reta seja secante à curva da função --, e sim utiliza-se de uma parábola através de três pontos para aproximação da derivada.
-
[473]
1.3.3 Raízes de Equações — Raízes de Polinômios — O Método de Bairstow
O Método de Bairstow permite encontrar todas as raízes de um polinômio de grau $n$ exigindo-se apenas seus coeficientes.
Este artigo faz uma breve exposição matemática do método, seguida de duas implementações reais nas linguagens Python e Fortran 90. -
[518]
1.3.4 Raízes de Equações – Raízes de Polinômios – O Método de Aberth
O Método de Aberth é uma algoritmo usado para encontrar todas as raízes de um polinômio de grau qualquer.
-
[524]
1.3.5 Raízes de Equações – Raízes de Polinômios – O Método de Durand-Kerner
O Método de Durand-Kerner, também chamado de Método de Weierstrass, é uma técnica numérica usada para obter todas as raízes de um polinômio, que atua de forma semelhante ao Método do Ponto Fixo, mas é generalizado para buscar todos os zeros da função polinomial.
-
[507]
1.3.6 Raízes de Equações — Raízes de Polinômios — O Método de Laguerre
O Método de Laguerre é um algoritmo numérico modificado a partir do Método de Newton para encontrar raízes complexas de polinômios. Sendo um método muito eficiente na busca de um zero de função, pois sempre converge à alguma raiz, independente da aproximação inicial dada (propriedade nem sempre presente em outros métodos computacionais). A principal desvantagem do Método de Laguerre é que ele não encontra todas raízes do polinômio, aproximando satisfatoriamente bem apenas à uma delas. Neste artigo, apresento uma pequena demonstração das relações matemáticas usadas na implementação, também presente.
-
[573]
1.3.7 Raízes de Equações — Raízes de Polinômios — O Método de Jenkins-Traub
O Método de Jenkins-Traub é um algoritmo para busca dos zeros de uma função polinomial que utiliza três estágios de estimativas para aproximar as raízes.
-
[558]
1.4.1 Raízes de Equações — Métodos Mistos — Método de Brent
O Método de Brent é uma combinação simples de diversos métodos computacionais para busca de raízes de função. Os métodos usados no algoritmo de Brent são: Método da Bisseção, da Secante e Interpolação Quadrática Inversa.
-
[577]
2.1.1 Sistemas Lineares — Métodos Diretos — Eliminação de Gauss
O método conhecido como "Eliminação de Gauss" consiste em combinar as equações de forma ir eliminando as variáveis até convergir à uma solução. Embora este seja um dos métodos mais antigos, e também um dos menos eficientes, serve como fundamento para compreendermos as demais técnicas relativas à resolução de sistemas lineares.
-
[586]
2.1.2 Sistemas Lineares — Métodos Diretos — Decomposição LU
Este artigo trata de uma classe de algoritmos de eliminação -- tais como da Eliminação de Gauss -- que utilizam decomposição de uma matriz para obtenção das incógnitas do sistema. A principal vantagem da decomposição LU é que ela otimiza o tempo gasto na eliminação, sendo adaptativo às situações nas quais o vetor dos termos independentes são calculados para um único conjunto de coeficientes do sistema. Além disso, este artigo desenvolve o método da decomposição LU como uma implementação da eliminação de Gauss.
-
[604]
2.1.3 Sistemas Lineares — Métodos Diretos — Decomposição de Cholesky
Este artigo apresenta o algoritmo conhecido como "Fatoração de Cholesky", onde decompõe uma matriz A tal que A = LL*, onde L será uma matriz triangular-inferior com diagonal composta apenas por elementos não negativos, enquanto L* será a matriz adjunta de L.
Caso A seja uma matriz positiva, então L será única, o que permite servir como fator identificador dos dados de A, chamado de "Fator de Cholesky de A". Essa propriedade pode permitir aplicações em diversas áreas da ciência e computação.
Decomposições baseadas na de Cholesky estão presentes em criptografia, geração de hashes, verificação de dados e em uma diversidade de aplicações práticas. -
[657]
2.1.4. Sistemas Lineares — Métodos Diretos — Decomposição SVD
Uma das mais importantes fatorações de matrizes é a Singular Value Decomposition (SVD). Ela é utilizada em diversos problemas práticos, tais como processamento de sinais, ajuste de funções multivariadas, soluções de problemas de otimização, etc. Sua principal aplicação nestes problemas está em permitir a aproximação da pseudo-inversa da matriz decomposta. Neste artigo vamos apresentar a decomposição SVD e mostrar como ela pode ser utilizada para solução de sistemas lineares.
-
[689]
2.1.5. Sistemas Lineares — Métodos Diretos — Decomposição QR
Neste post apresentaremos um método para decomposição de matrizes conhecido como Fatoração QR. Esta técnica consiste em decompor uma matriz A como sendo um produto de uma matriz ortogonal com outra matriz triangular. Em problemas práticos, este método é consideravelmente mais útil que outras técnicas (tais como LU ou Cholesky).
-
[570]
0.1 Miscelânea — Enésima Raiz
Otimização Não-Numérica[2 artigos]
-
[264]
A Incrível Raiz Quadrada Inversa
O inverso da raiz quadrada é uma função presente em diversos problemas matemáticos, físicos e estatísticos. Vários métodos numéricos são aplicados para busca da melhor forma de se expressar 1/sqrt(x).
Este artigo discute e analisa um código encontrado nas fontes de vários bibliotecas de C: O InvSqrt é uma função que chama a atenção por sua beleza que vai além da aplicação de um método numérico e utiliza uma manipulação de recursos computacionais para gerar uma função mais veloz. -
[305]
Others InvSqrt implementations
Veja aqui algumas alternativas à implementação da Fast InvSqrt.
-
[264]
A Incrível Raiz Quadrada Inversa
Programming Internals[8 artigos]
-
[105]
A Fórmula de um Crack
Crackear qualquer sistema é impossível sem as ferramentas certas. Abaixo iremos discutir as diferenças entre as existentes. E de posse do conhecimento destas, iremos desenvolver um exemplo suficientemente completo para se entender como crackear um executável.
-
[131]
Técnicas AntiCracking – Parte I
Quando disassemblamos um binário para crackearmos, muitas vezes nos deparamos com um código que parece não fazer sentido. Isso ocorre por que o programa possivelmente foi implantado com alguma proteção contra engenharia reversa.
-
[148]
Técnicas AntiCracking – Parte II – Eliminação de Informação Simbólica
Os compiladores costumam gerar informações simbólicas – para representar as lincagens – quando convertem as relações de importação e exportação de tabelas e extensões. Um programa com grande uso de DLLs, onde cada uma exporta uma grande quantidade de funções, necessitará de uma lista relacionando onde estão as funções exportadas, normalmente indicando o que elas fazem, o que é de grande serventia para os crackers. Neste artigo, apresento algumas das informações que podem ser usadas como pontos de referência para engenharia reversa.
-
[201]
Técnicas AntiCracking – Parte III – Ofuscação e Encriptação de Código
Também conhecidas como Code Obfuscation and Encryption (COE), são técnicas utilizadas para prevenir a Análise Estática de Código. Diferente da Eliminação Simbólica (Eliminating Symbolic Information – ESI), a COE é aplicada após a compilação do programa, modificando o binário original antes de ser entregue ao cliente.
-
[207]
Técnicas AntiCracking – Parte IV – Técnicas Ativas de AntiDebuggin
No post “A Fórmula do Crack” discutimos alguma coisa sobre debuggers. Como é o processo de debuggin em user-mode e kernel-mode, como cada um deles trabalha quando um usuário anexa um processo à eles, quando fixa um breakpoints em uma instrução etc.
O que não foi discutido é a forma como o debugger atua: quando o usuário escolhe pontos de parada para conferir o andamento da execução do programa é comum o debugger substituir a(s) instrução(ões) por uma instrução própria, que só ele entenda. -
[214]
Técnicas AntiCracking – Parte V – Burlando Disassemblers
Uma técnica sofisticada de enganar disassemblers consiste em usar um trecho do programa para alterar os bits das outras partes do programa, que desejamos proteger. A estratégia usada é deslocar os bits de um trecho do programa para que este pedaço pareça possuir outras instruções. Desta forma, o decompilador irá interpretar essas instruções e fornecer informações erradas ao atacante.
-
[219]
Técnicas AntiCracking – Parte VI – Transformações no Controle de Fluxo
Control Flow Transformation (CFT) consiste em alterar a estrutura de um programa para tornar seu código difícil para a leitura humana sem prejudicar a sua funcionalidade original. Como veremos aqui, está intimamente relaciona com a ofuscação de código.
As técnicas que se aplicam à categoria das CFTs são: Inlining, Intervalar Código, Estruturas Opacas, GoTo Hell’s Code e Exceção Proposital. -
[225]
Técnicas AntiCracking – Parte VII – Conclusão
O programa ficará mais lento quão maior for o descuido na implantação dessas técnicas devido aos efeitos adversos, tais como o uso excessivo da CPU com instruções que não tem funcionalidade nenhuma para o usuário, o aumento significativo do código e a perda de desempenho no sistema. Todavia, ao implementar este tipo de proteção devemos usar as técnicas de forma que as reações colaterais sejam minimizadas. Neste artigo, discutimos quais são os custos ao se implementar uma técnica que desfavoreça a engenharia reversa, o nível de proteção máximo que se pode ser obtido e qual preço desta segurança.
-
[105]
A Fórmula de um Crack
Virtualização[2 artigos]
-
[101]
Detectando Máquinas Virtuais
As vezes precisamos que nosso programa se comporte de forma diferente quando rodar em uma máquina virtual. Principalmente quando queremos dificultar o processo de engenharia reversa do nosso programa, antecipando o ambiente em que o cracker trabalhará, ou ainda, queremos restringir algumas funcionalidades que teriam a segurança reduzida, se rodasse numa MV.
-
[128]
NestedVM – ASM MIPS para JAVA
Veremos aqui sobre a NestedVM, conversor de Assembly MIPS para bytecode JAVA, “cross-compilation” para compilarmos de C++ para ASM MIPS, permitindo assim, em conjunto com o NestedVM, converter todo um sistema para JAVA. E comentaremos sobre alguns métodos alternativos e mais populares para integração de sistemas já prontos com o JAVA, como o JNI, Jazillian, c2j etc. E porquê esses sistemas ficam aquém ao NestedVm.
-
[101]
Detectando Máquinas Virtuais