Jump to content

Duvida sobre endereço extender


Naelson Goncalves Saraiva

Recommended Posts

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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...