missaka
(usa Linux Mint)
Enviado em 17/07/2013 - 19:45h
Galera, preciso de ajuda para entender a logica de uma simples conta que apareceu num livro que tenho aqui.
Antes de explicar melhor a duvida, ja deixo informado que sou extremamente leigo no assunto. Estou tendo os primeiros passos aqui com um livro (nao muito didatico) e minha duvida pode ate nao ter a ver com assembly, entao se eu cometer algum erro grotesco: me desculpem!
A duvida é a seguinte: a parte do livro em que estou está explicando como usar o GDB para estudar endereços de memoria de um programa qualquer. Ele explica que o tamanho padrão de um endereço de memoria é um 4-byte chamado word e que posso alterar o tamanho padrao especificando o tipo de tamanho que desejo no comando "examine" no GDB:
b = um byte
h = halfword (2 bytes)
w = word (4 bytes)
g = giant (8 bytes)
Depois ele demonstra que um mesmo endereço de memoria (no caso 0x00fc45c7) quando exibido com tamanho de 1 byte, tem a ordem invertida, igual no exemplo que estou dando abaixo (de forma resumida):
x/4xb $eip --> 0xc7 0x45 0xfc 0x00
x/1xw $eip --> 0x00fc45c7
Em hexadecimal a interpretação foi facil, o problema está quando o endereço é mostrado em decimais:
x/4ub --> 199 69 252 0
x/1uw --> 16532935
Para realizar a transformação de 4ub para 1uw ele usou a seguinte conta:
0*(256^3) + 252(256^2) + 69(256^1) + 199*(256^0) = 16532935
Foi a logica dessa conta q nao entendi! Alguem pode me explicar o que ele fez nessa conta? Só entendi que inverteu os valores de x/4ub mas o porque do conteudo entre parenteses eu nao consegui compreender.
Desculpa ai se enrolei um pouco para fazer a pergunta, mas é que queria explicar o maximo possivel o problema. Se esqueci de falar algo ou algo ficou confuso, so avisar, VLW