terça-feira, 24 de março de 2015

Engenharia de Software - Debugging - Interpretando um editor hexadecimal

Interpretando informações básicas exibidas por um editor hexadecimal

Coluna 1 (esquerda) – Valor da posição representada em hexadecimal do primeiro byte da segunda coluna desta linha.
Coluna 2 (meio) - Contém bytes do arquivo aberto, em ordem, representados em hexadecimal por 2 numerais hexadecimais cada byte.
Coluna 3 (direita) - Contém caracteres ASCII, cada caractere está associado a um byte da coluna 2, muito útil para alterar textos, como pode ser observado na figura 1.a abaixo

Com o auxílio da figura 1.a abaixo e do texto abaixo, podemos ver exemplos que ajudam a entender:

- Linha 00000030 (marcada com retângulo verde), o valor 00000030 está em hexadecimal e é referente à posição do primeiro byte desta linha na segunda coluna (retângulo à direita, com valor “EE”) o valor EE está em hexadecimal, ele é um byte, porque 4 bits dao 16 possibilidades de valor, o que caracteriza um numeral hexadecimal, logo 2 numerais hexadecimais formam 8 bits, que é um byte.
- Linha 00000010, veja o primeiro byte (primeiro retângulo vermelho desta linha), mais adiante na mesma linha veja o caractere ASCII marcado com o segundo retângulo vermelho, ele é a representação do byte marcado pelo primeiro retângulo. Observe o mesmo na linha 00000020.
- Linha 00000120, veja os retângulos vermelhos dessa linha, e agora observe que o caractere “r” é formado pelos bits representados pelo valor hexadecimal “72” (lembrando mais uma vez 2 numeros hexadecimais são 8 bits, ou 1 byte e um caractere ASCII é um byte)





Figura 1.a 
Fonte: http://www.codeproject.com/KB/miscctrl/488296/partition_explain1.jpg

Sistemas de representação de dados computacionais


Numéricas

Decimal:

É o primeiro sistema numérico que aprendemos nas nossas vidas.
Aprendemos uma casa numérica pode possuir valores compreendidos entre 0 e 9 (10 valores possíveis)

Aprendemos que cada unidade da casa numérica adjacente à esquerda é 10 vezes maior pelo fato do sistema decimal possuir 10 possibilidades de números .
Então, por exemplo:
A primeira casa da direita para a esquerda contém seus valores.
A segunda casa da direita para a esquerda contém valores que são dez vezes maiores que a casa da direita (dois na segunda casa representa vinte, por exemplo).
A terceira casa da direita para a esquerda contém valores que são dez vezes maiores que a casa da direita, então se a segunda é 10 vezes maior que a primeira, e a terceira é 10 da segunda, a terceira é 10 vezes 10, é 100 vezes maior que a primeira.

O sistema em computação costuma ser representado com o número seguido da letra “d” (135d por exemplo), ou de letra nenhuma.

Binário:

A mesma lógica se aplica ao sistema binário.
Suas casas numéricas comportam no máximo até dois valores diferentes, zero e um (0 e 1).
Logo a segunda casa da direita para a esquerda é duas vezes superior à primeira.
Já percebemos então, que se a primeira casa da direita para a esquerda pode possuir no máximo uma unidade, logo a segunda da direita para a esquerda pode comportar no máximo uma unidade, duas vezes maior, intuitivamente fica fácil perceber que essa segunda casa com valor 1 contém o número dois do sistema decimal.

Concluindo, a terceira casa com valor 1 conteria o número quatro do sistema decimal.
As regras do “vai um” também valem para esse sistema, sim, a lógica é toda igual, só muda a quantidade de valores possíveis que cada casa pode assumir , ou seja, 01 + 01 = 10 por exemplo.
O número em  binário costuma ser representado pelo valor binário seguido da letra “b” (101011b) por exemplo.

Hexadecimal:

Também funciona como os outros dois sistemas supracitados,  mas possui numerais novos e cada casa pode ter até 16 valores diferentes, são esses em ordem crescente com incrementos de uma unidade:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

Ou seja, por exemplo, 3+3=6, 9+1=A, 9+2=B, A+2=C, e a regra do “vai um”? 0F+02=11 (a casa do F estourou porque ele é o maior valor possível, a compensação foi feita elevando uma unidade na segunda casa da direita para a esquerda).

O sistema é representado pela letra "h" á direita, exemplo: 4FE2h

Escrita - ASCII

Cada caractere ASCII é formado por um conjunto de bits, assim, como os caracteres não são numerais, devemos observar a tabela ASCII para descobrir qual sequência de bits corresponde à cada caractere, abaixo temos uma tabela com representação decimal dos caracteres: