Ir para conteúdo

Duvida sobre endereço extender


Naelson Goncalves Saraiva

Posts Recomendados

Boa noite, hoje atarde testando o pouco de conhecimento que adquirir sobre assembly e analisando, olhando engenharia reversa de gringos, topei com essa duvida? Como ele conseguiu extender variáveis com nome.  Percorri código pra verificar se tinha alguma macro ou instrução setando endereço e atribuindo apelido a mesma porem não, ela ta usando nome  mesmo. Tem mais outras, sera que ele descobrir nome real da variável? Eu falei com um gringo e ele disse que eles procura por nome em outras parte do game como parte de scripts. Funciona mesmo? 

/* 0444 */ int nLevel;
/* 0448 */ int _n448;
/* 044C */ int _n44C;

  Exemplo Imagem

Link para o comentário
Compartilhar em outros sites

Então, antes deixa eu te explicar como funciona o endereçamento de memória em Assembly.

Como você já sabe (ou não) na sintaxe da Intel usamos os colchetes("[" e "]") para se referir a um valor na memória em um determinado endereço. É tipo como usar o operador de indireção (*) com um ponteiro na linguagem C.

Dentro dos colchetes nós podemos especificar quatro valores diferentes:
- Base
- Índice
- Escala
- Deslocamento

Exemplo:
 

mov rax, [rbp + rbx*2 + 0x70]


Onde no exemplo acima RBP é registrador usado como base, RBX índice, 2 a escala e 0x70 o deslocamento imediato.
Abstraindo isso em um código em C, seria tipo isso:

ptr[i*2 + 0x70]



No print que você mando nós temos o endereço [rax + 548h].
Repare que 548h é um número em hexadecimal assim como 0x70. Só muda a forma de escrita.

Ou seja, nesse endereço temos definido a base(RAX) e o deslocamento imediato. Abstraindo em C seria:

ptr[0x548]


O nome da variável que você passou nada mais é que um underline, seguido de um f de float e o endereço relativo.
E esse nome é gerado pelo descompilador.

Em um programa compilado, símbolos de nomes de variáveis não são preservados. Além disso, variáveis locais e não estáticas nunca tiveram um símbolo.
Logo o nome da variável é simplesmente irrecuperável.

Link para o comentário
Compartilhar em outros sites

Fiz isto, porem isto só roda compilado no visual studio 2005, fiz algumas variáveis no dev c++ e depois abrindo com ida pro parece que compilador mais moderno facilita muito, ate nome as funções tem com exe da atualidade. 
 

Ainda to tendo algumas duvidas sobre registradores. Entendi melhor os gerais. 

De toda forma vou continuar estudando para aperfeiçoar. Valeu felipe!!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...