Uma das coisas que mais me ajudou/ajuda na hora de reverter alguma coisa, é saber identificar o que é um início de função, entender um if ou switch case, entender o que é uma variável e essas coisas. Pensando nisso separei algumas instruções muito usadas – apenas um comecinho – e um recurso MUITO legal para estudar que é um disassembler online e um compilador com disassembler – você pode consultar em qualquer lugar a qualquer hora, só puxar o celular! 😉

Esse mostra o código em C – ou qualquer outra linguagem disponível no site – e converte para mostrar o assembly referente.

  • https://godbolt.org/

 

Esse aqui é literalmente um disassembler! Com gráficos, opção de ver as seções e tudo mais. Você pode inclusive subir algum executável e ver online, sem precisar ter algum na sua máquina, bem maneiro, não?

  • https://onlinedisassembler.com/odaweb/

 

Vou mostrar algumas coisas interessantes usando o GodBolt então 🙂

 

Um simples Hello World transformado em assembly x64 usando o gcc 8.1 e o mais legal é você poder identificar cada parte do código pela cor 🙂

1 – Hello World

 

Variáveis e constantes ficam um pouco diferente em assembly, mas não é tão difícil entender com as cores nos ajudando. Existem outras formas de declarar constantes em C mas o objetivo é ser simples e mostrar como você pode estudar outras coisas em assembly.

2 – Variáveis e constantes

 

O MUITO utilizado IF, se transforma neste código bacaninha abaixo.

3 – Ifs

 

O loop for convertido 🙂 legal né? Não sei se vocês prestaram atenção, mas olha essas instruções aqui.

push rbp
mov rbp, rsp
sub rsp, 16

O compilador as utiliza para iniciar os afazeres dele, esse código basicamente salva o endereço do frame anterior, pega o endereço do frame atual e reserva 16 bytes para variáveis locais. Coisas do compilador hehe! 🙂

4 – Laço for

 

É um post simples mas ajuda a direcionar os estudos! Eu acho hehe 😛

Charles Lomboni
Charles Lomboni

Latest posts by Charles Lomboni (see all)