Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

sexta-feira, 29 de abril de 2011

A quem interessa o IPv6?

Tava aqui filosofando com meus botões...

Os provedores de Internet receberam "de graça" um bem que são endereços IPv4. Era só justificar que levava e era assim no mundo inteiro. Enquanto tinha endereços "a vontade", tal bem não tinha preço. Segundo a lei da oferta e procura, se a oferta é ilimitada, o preço é zero. Bem, hoje, a oferta já não é mais ilimitada.

Os endereços IPv4 são necessários para acessar a Internet. Como o mundo não migrou para IPv6, ele ainda é fundamental. Bem, se a oferta reduz (ou melhor, a "produção parou") e a procura só aumenta, temos uma inflação no preço do endereço.

Agora voltamos ao provedor de Internet. Se vc tinha um bem que vale zero, ele não era tão importante assim. Bastava que ele suprisse suas necessidades de negócio e pronto. Agora, quando este bem, ou melhor, ativo, começa a valer alguns milhões, a história muda. O pior de tudo é que, até agora, ninguém disse que o ativo endereço IPv4 é ou não é negociável. Recebeu de graça e agora pode vender. Entendeu a jogada? Quase a galinha dos ovos de ouro. Só não é melhor porque a galinha só vai botar ovos até, no máximo, 2012.

A implementação de IPv6 envolve custos e não possui um retorno visível para o cliente, exceto pelos problemas no serviço durante a migração. Se um provedor implementa a sua rede IPv6, e todos o fizerem, a procura por endereços irá cair, e inclusive, a oferta pode aumentar com os endereços vagos. Com isto o preço do ativo que eles atualmente possuem irá cair abruptamente. Alguém que visa o lucro é louco de fazer isto?

Moral da história: os provedores comerciais não irão implementar IPv6 enquanto a curva de crescimento do valor do endereço ainda estiver subindo e começarão a fazer gambiarras nos seus serviços para poder vender para outros novos provedores o que puder de seus endereços enquanto o preço estive em alta.

Os provedores não irão implementar a rede IPv6 até que:

  1. Os clientes exijam o serviço (IPv6 ou vou para outro que tenha), coisa que não vai acontecer se o cliente não souber do que se trata;
  2. O governo force sua implementação por força de lei ou norma;
  3. Ou, no caso de mau planejamento, eles tenham vendido mais endereços do que podiam e agora precisam comprar.
É, esperem uma inversão no serviço de Internet daqui a um, dois anos. Preços mais altos e qualidade pior devido as gambiarras para usar menos endereços.

domingo, 24 de abril de 2011

Luiz 1 x 0 SW de gerenciamento de celular

Como responsável da área da computação em casa, eu estava realizando a migração do celular da mulher. Bem, vamos dizer que é um celular exótico: gradiente fabricado pela francesa Sagem. Para a época, o celular era muito bom e ainda funciona bem. Agora voltando ao assunto...

A ferramenta de exportação foi terceirizada para uma empresa que, claro, não suporta mais este celular e nem vende o produto que o fazia. Com muita luta, achei uma versão demo que faz o que eu queria, exceto pelo fato de ser limitada a 6 contatos (o celular tem algumas centenas deles). Procura aqui, ali e nada de solução. Conclui que eu teria que fazer isto sozinho!

Tem um debugger para windows muito bom: w32dsm. Faz milagres. Pena que eu não tive assembly x86 na universidade. Com ele, busquei qualquer referencia a string "contacts" na memoria e coloquei um breakpoint depois de cada uma. Rodei o programa e foi contando o breakpoint que batia 6 vezes. E não é que eu achei?!

String Resource ID=17035: "Reading contacts: Mobile memory"

Desta forma, existe algum loop do tipo:

while ??? {
    ???
    chamada1()
    ???
}
chamada1 ( ) { chamada2 () }
(...)
chamadaX () { char[] str = "Reading contacts: Mobile memory" }

Com esta informação, fuirastreando (stepover) as chamadas "ret" do assembly que representam o retorno da chamada de função até o ponto onde o stepover bateu novamente no breakpoint da string. Isto me indicou que eu havia chegado no loop de leitura dos contatos. Voltei para as intruções do loop e analisei uma passada completa. O resultado não foi nada inovador. Algumas comparações no começo do loop, muita coisa no meio e um incremental no final: o bom e velho "for":


for (i-0;???;i++) {
    ???
    chamada1()
    ???
}
Bastou observar com cuidado para ver qual comparação gerava o jump para fora do loop. Na sexta iteração, achei uma comparação interessante entre o EAX (neste caso, i) e uma região da memória EBP+018. Mais sugestivo é que a comparação é >=. Quando ambos eram 6, o processo saia do loop. Olhando este EAX+018, ele possui o valor 6 desde o início do loop.


a=6;
for (i-0;???;i++) {
    if (i >= a) break;
    chamada1()
    ???
}
Agora é a parte fácil :-) Durante um loop qualquer, ainda pelo debugger, troquei o valor da memória para algo como 0x1000, retirei o breakpoint e fui para o abraço. Se fosse fazer algo permanente, teria que trocar a intrução do jump para uma nop ou modificar a comparação para que esta sempre desse negativa.

Já tinha feito algo parecido no passado mas com if e não for. O loop é muito mais fácil de identificar.

O pior de tudo: vou ganhar só um "ah tah... obrigada" por todo este trabalho :-(