Ir para conteúdo

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


Lincoln Arantes

Posts Recomendados

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

 

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...
  • 3 semanas depois...

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.

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...