Bem vindo ao LifeGames Demo
Cadastre-se agora para ter acesso a todos os nossos recursos. Uma vez cadastrado e logado, você será capaz de criar tópicos, postar respostas a tópicos já existentes, a reputação de seus companheiros, começar seu próprio mensageiro privado, atualizações de status post, gerir o seu perfil e muito mais. Esta mensagem será removida assim que tiver logado.
Entrar Cadastre-se


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

1assembly em c - 4º parte Empty assembly em c - 4º parte Sáb Abr 20, 2013 7:02 pm

Moedas Moedas : 201
Mensagens Mensagens : 92
Humor Humor : *-*
Reputação Reputação : 5
Quebra de regras:
assembly em c - 4º parte Left_bar_bleue0 / 1000 / 100assembly em c - 4º parte Right_bar_bleue

hacker fts315

hacker fts315

Moderador Informática

Moderador Informática

e ae galera esse vai ser o 4º tutorial de asm em c, nesse eu vou falar da memoria como pegar mover um valor de uma variavel para um registrador, conseguir o endereço da memoria etc, antes vamos entender uma coisa a memoria e um segmento e cada segmento e uma posiçao dela onde agente armazena (aloca) os dados, as variaveis e um exemplo de uso da memoria, quando agente declara uma variavel o compilador atribui o nome da variavel a uma posiçao de memoria (e muito mais facil memorizar uma variavel chamado fts doq memorizar uma posiçao 0x22ff74, nao e? ), veja um exemplo simples de programa q exibe um numero de uma variavel

Código:
#include <stdio.h>

int main(void)
{
  int x = 315;
  printf("%d",x);
}

para agente saber qual a posiçao de memoria da variavel x do exemplo acima, basta coloca o & antes do nome da variavel

Código:
#include <stdio.h>

int main(void)
{
  int x = 315;
  printf("%d",&x);
}

aq deu o valor de 2293620, eu prefiro exibir em modo hex para isso ao inves de usar %d se usa %x

Código:
#include <stdio.h>

int main(void)
{
  int x = 315;
  printf("%x",&x);
}

agora deu 22ff74 que e igual a 2293620 em decimal, veja como mover uma variavel para um registrador atraves da posiçao (para q o compilador possa entender q e um codigo hexadecimal colocamos 0x antes do numero no caso 0x22ff74)

Código:
#include <stdio.h>

int main(void)
{
  int x = 315;
  int y;
 
  asm(
  "mov 0x22ff74,%%eax"
  :"=a"(y)
  );
 
  printf("%d",y);
}

no exemplo acima movemos o conteudo da posiçao 0x22ff74 (variavel x) para o registrador ax depois enviamos o conteudo do registrador ax para variavel y do geito dos tutoriais anteriores, uma maneira de pegar o conteudo de um registrador e coloca em uma variavel e usando o comando register seguindo da variavel e a funçao asm, na funçao asm passamos como argumento o registrador (so lembrando q no exemplo abaixo eu nao to passado o conteudo do registrador daquele geito entao nao e necessario dois %% no registrador apena um %)

Código:
#include <stdio.h>

int main(void)
{
  register int x asm("%eax");
 
  asm("mov $315,%eax");
 
  printf("%d",x);
}

voltando a falar de memoria tambem tem como armazenar na memoria usando aquele metodo, ao inves da gente usar a letra do registrador agente usa a letra m, e para ler agente usar % seguido da ordem q vc armazeno

Código:
#include <stdio.h>

int main(void)
{
  int x = 315;
  int y;
 
  asm(
  "mov %1,%%eax ;"
  :"=a"(y)
  :"m"(x)
  );
 
  printf("%d",y);
}

bom galera aq fica mais um tutorial de asm em c, assim q eu tiver tempo eu faço mais ^^

by hacker fts315

https://www.facebook.com/hacker.fts315

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos