quarta-feira, 21 de novembro de 2007

Como funciona o endereçamento Little Endian

No artigo anterior ( C & Assembly - Procedure Call - Procedimento de Chamada), deixei uma dúvida em uma área um tanto complicada, para quem está começando.
Aqui teremos $esp apontando novamente para 0xc0000000 e teremos no registrador $eax o valor 0x00000001.
Note que o processador trata de forma diferente os números: Ao inves de ser "0x00000001", como nós, seres humanos tratamos, o processador calcula de forma inversa. Isto é o que chamamos de Little Endian e Big Endian, a arquitetura x86 (PC) sempre usa Little Endian (a forma invertida). Outros processadores, como os da SUN utilizam Big Endian.
Para nao nos confundirmos, trataremos todos os endereços pela forma HUMANA, ox00000001. O Gdb, quando pedimos para mostrar a memoria, já trata de inverter de 4 em 4, para ficar mais "humana" a leitura.
Somente aviso que na verdade o número está invertido, pois, se olhares um binário por um hexedit, notarás que aonde existem números, eles estão "invertidos".
Para explicar melhor, criei um artigo em específico.
Boa leitura :)

http://docs.google.com/Doc?id=dgwgq5zv_78f359gp

Vida Longa e prospera!
Dúvidas, por favor, perguntem :]

sábado, 17 de novembro de 2007

Organização do "blog"

Pessoalmente, não me agradou muito a engine de escrita do blogger.
Creio que estão no caminho, porém, ainda parece-me muito pouco "profissional".
Começando pela resolução, que ou você é um designer de WEB e mexe no HTML, ou está fardado aos 800x600 - que não conheço mais nenhum ser que use essa resolução.
Assim, a partir de agora, meus artigos ficarão no Google Docs, sempre apontados através do blog.
Menos poluição aqui, mais facilidade de leitura lá.
Caso alguém tenha alguma dificuldade para acessar algum material, por favor, avise :)

sexta-feira, 9 de novembro de 2007

C & Assembly - Procedure Call (Procedimento de Chamada)

Acredito que todo programador de C/C++ que pretende ter grande conhecimento em debugging necessita chegar ao assembly. Assim, aqui vai a base do entendimento de assembly, pré-supondo que o leitor saiba programar em C.
Neste primeiro artigo explicarei basicamente como funciona o Assembly e o procedimento de chamada de funções, pois sinto que é o ponto de união mais simples entre a lógica de um programador de C/C++ e a lógica em assembly. Logo farei um post explicando as instruções mais utilizadas no assembly, para facilitar também aqueles que desejarem tomar a Pílula Vermelha (ou seja, programar e/ou debugar um pouco mais afundo em assembly).
Utilizarei o GDB (Gnu Debugger) para exemplificar as funcionalidades, creio que isto trará a teoria quase a prática, já que qualquer um pode usar e testar em casa. Os exemplos serão em Linux, pois é o S.O. (Sistema Operacional) que utilizo, mas, funcionam perfeitamente em qualquer outro sistema.
Para os iniciantes em Assembly, deixo claro que não existem grandes diferenças entre trabalhar com Assembly em Linux, Windows, FreeBSD ou seja lá o que for. Ao menos não para o que colocamos neste tutorial. O que pode mudar é referente ao processador, que consideramos aqui somente x86 (Intel, Athlon, core2duo, etc..)
Leia o artigo completo em:
http://docs.google.com/Doc?id=dgwgq5zv_716sxkzj

Vida Longa e Prospera!