Byte Por Byte

Hoje vou comentar sobre um problema que parece simples à primeira vista, mas acaba ficando chato para implementar e fazer funcionar como o esperado. Trata-se de uma simples tarefa: ler do usuário um valor de cada tipo primitivo (int, float, char, double, e long double), imprimir o endereço reservado na memória para a variável e se usar mais de um byte, imprimir cada endereço e cada valor contido no byte.

No geral, é uma tarefa simples, exceto por precisar imprimir o valor da célula de cada byte.

Escrevi o código em C++.

Após tentar de várias maneiras e pesquisar bastante, com casting pra tudo que é lado, consegui resolver. Basta usar um ponteiro para char para armazenar o endereço inicial da variável, e incrementá-lo conforme a necessidade.

Exemplo para inteiro:

int   valor = 1023;
char* endereco = ( char *) &valor;

// inversao da variavel
endereco += (sizeof(int)-1);

for(int i=sizeof(int)-1; i>=0; i--)
{
    std::cout << "Endereco em hexadecimal: "
              << std::hex << static_cast<void *>( endereco )
              << ", valor armazenado em hexadecimal: "
              << std::hex << std::uppercase
              << std::setw(2) << std::setfill('0')
              << (static_cast<unsigned int>( *endereco ) & 0xFF)
              << endl;

    endereco--;
}

Saída esperada:

Endereco em hexadecimal: 0x7fffc2baaebf, valor armazenado em hexadecimal: 00
Endereco em hexadecimal: 0x7fffc2baaebe, valor armazenado em hexadecimal: 00
Endereco em hexadecimal: 0x7fffc2baaebd, valor armazenado em hexadecimal: 03
Endereco em hexadecimal: 0x7fffc2baaebc, valor armazenado em hexadecimal: FF

Qualquer dúvida ou comentário que possa agregar, não exite em fazer.

Código fonte do trabalho todo: Download

Fontes:

http://stackoverflow.com/questions/8680220/how-to-get-the-value-of-individual-bytes-of-a-variable

http://stackoverflow.com/questions/7266762/accessing-direct-memory-addresses-and-obtaining-the-values-in-c

http://stackoverflow.com/questions/7211934/c-memory-addresses

Gentoo Art

Aproveitando o embalo do último post, conky para o Gentoo, vou registrar uma dica de personalização muito legal. Trata-se apenas da modificação do wallpaper do gerenciador do login, do splash screen do kde, e do desktop, dando um efeito interessante.

Wallpaper

Primeiramente, escolha um wallpaper para sua resolução. Particularmente, gosto de escolher do site http://www.wallbase.cc, pode ser que você encontre alguns interessante por lá também.

Continuar lendo...

Conky para o Gentoo

Como personalização é um assunto muito visado no meio open source, e em se tratando do Gentoo se vê pouco disso disponível na web, vou disponibilizar uma configuração para o conky muito atrativa, que inclui ícones.

Continuar lendo...

HackDay LibreOffice

http://www.linuxafundo.com.br/attachments/hackday_header.png

Olá pessoal. No próximo dia 30, acontecerá no sétimo SoLiSC o LibreOffice HackDay, primeiro HackDay do LibreOffice no Brasil.

Um HD é um evento voltado principalmente para a reunião dos colaboradores para o projeto em questão - neste caso o LibreOffice - para uma força-tarefa massiva e conjunta que envolve muito envio de código, revisões, correções, e também para a integração dos participantes. Veja esta imagem, que como disse Olivier Hallot, "diz muito sobre um HD".

Continuar lendo...