Jump to content
Lincoln Arantes

Debugando programas em Código Assembly VS Código C (veja o assembly dos 2)

Recommended Posts

Ola, a todos que gostam de pentear bytes! Fico alegre de ver que estão visualizando meus posts.

Hoje trago a vocês o debug de dois programas feitos em duas linguagens diferentes, acompanhe:

 

Um exemplo simples de engenharia reversa. Veja o código no compilador Assembly On line:

 

image.thumb.png.55eb7b59ca740e4d31a099146102ca43.png

 

Para entender melhor, foi criado um executável no Nasm exatamente na syntax Intel:

 

image.thumb.png.67f4ea4ddbf063ccb42ea499df1ef0e0.png

 

Depois debugamos  o arquivo hello no edb debuger. Note que o código é o mesmo, porém nos registradores que possuem textos são colocadas outras informações. como no caso do registrador edx que é observado o hexadecimal  0xe, que significa o número decimal 14. No registrador ecx é colocado um endereço de memória que  está associado à mensagem mente binaria que é mostrada na tela do programa.

 

image.thumb.png.1d1a8154f447f2bb6f587a5c53db4df5.png

 

Agora vamos criar um executável na linguagem de programação c e comparar os dois resultados do final do post.

Veja o código:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include <stdio.h>

 

int main (void){

printf("mente binaria");

return 0;

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

Note que o código é bastante simples, para que fique mais fácil de entender.

Abaixo, observe o programa rodando normalmente.

 

image.thumb.png.369bf59d57c8e9d0660d8a2e76a85760.png

image.thumb.png.35a680e22e0c48399447cc584707f5a6.png

 

Agora vamos debugá - lo:

image.thumb.png.51e64973fd8931e404e8d527a08219bf.png

 

Agora observe que o programa nos mostrou os códigos Assembly, note que são diferentes.

Podemos concluir que ambos os programas fazem a mesma coisa, porém quando são debugados  trazem códigos diferentes, isso ocorre porque eles foram compilados em compiladores diferentes. Portando é possível observar também que quando o programa é feito na linguagem Assembly, o debugue nos mostra códigos mais limpos e fáceis de ser entendidos.

 

Se você gosta de programar, aprenda a programar em Assembly e seja um grande escovador de bytes!

 

Autor: Lincoln César dos Reis Arantes (ADS - Graduado)

E-mail: lincolnsetelagoas@yahoo.com.br

 

 

Edited by Lincoln Arantes
  • Curtir 1

Share this post


Link to post
Share on other sites

Não, eles não fazem a mesma coisa.
O código em Assembly é para 32-bit e faz uma chamada para a syscall write do kernel Linux.
Já o código em C é compilado para 64-bit e faz uma chamada para a função printf() da libc.
Os código são diferentes porque são diferentes. Além disso C é uma linguagem de alto nível, então é de se esperar que haja mais código no executável do que o programador consegue enxergar. C ainda é minimalista, mas experimenta ler o código de outras linguagens de alto nível para ver a diferença absurda.

Ah, e só porque o resultado é o mesmo não quer dizer que esteja fazendo a mesma coisa. Vou ilustrar com números:

4 + 5 = 9
18 / 2 = 9

Só porque as duas operações resultam em 9, não quer dizer que façam a mesma coisa. Linguagem de programação é muito mais do que você digita, e mais ainda do que você pode ver no terminal.

  • Curtir 1

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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...