Jump to content
Sign in to follow this  
Naelson Goncalves Saraiva

Duvida sobre endereço extender

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

Edited by Naelson Goncalves Saraiva

Share this post


Link to post
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.

  • Curtir 2

Share this post


Link to post
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!!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...