Lincoln Arantes Posted September 15, 2019 at 06:39 PM Share Posted September 15, 2019 at 06:39 PM 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: Para entender melhor, foi criado um executável no Nasm exatamente na syntax Intel: 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. 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. Agora vamos debugá - lo: 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 to comment Share on other sites More sharing options...
dudsdev Posted November 15, 2019 at 02:19 PM Share Posted November 15, 2019 at 02:19 PM Boa! Link to comment Share on other sites More sharing options...
Felipe.Silva Posted December 2, 2019 at 04:12 PM Share Posted December 2, 2019 at 04:12 PM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.