Engenharia reversa/Antes de começar
É importante que este livro seja compreendido, portanto, não pule esta parte. ;-)
Terminologia
[editar | editar código-fonte]Utilizo do itálico para neologismos, palavras em Inglês ou em outro idioma, como crypter (encriptador).
Em geral me recuso a utilizar termos "aportuguesados" como baite (para byte) ou linkeditor (para linker). Acho que isso confunde o leitor e por isso mantenho tais termos como seus originais em Inglês, mas destaco-os em itálico.
Já negrito utilizo para dar destaque ou para me referir à um comando.
As palavras software, hardware, malware e quaisquer outros "ware" são consideradas "substantivos incontáveis" no idioma Inglês e, assim como music, love, money, water, etc, não possuem uma grafia específica para plural.
Algumas vezes utilizo o termo GNU/Linux ao invés de somente Linux. O projeto GNU é o principal projeto da FSF (Free Software Foundation), que criou o conceito de software livre. Suas ferramentas são parte essencial de qualquer sistema operacional baseado no kernel Linux e por isso faz bem lembrá-la de vez em quando.
No Brasil, chamamos laptop de notebook e isso pode causar uma grande confusão se você estiver conversando com um gringo. Em Inglês, notebook é, como o nome sugere, caderno de anotações - e nada mais. Utilizo a palavra laptop neste livro.
Após a introdução, engenharia reversa (ou simplesmente ER) passa a ser utilizado como forma curta de engenharia reversa de software.
Nas operações bit-a-bit (bitwise), utilizo os símbolos da programação para representar as operações E, OU, OU EXCLUSIVO, etc. Mais a frente no livro, abandono seus nomes em Português em prol da praticidade e universalidade de seus mnemônicos em Inglês, como AND, OR e XOR.
Arquitetura de software
[editar | editar código-fonte]Cada frase deste livro, a não ser que expressado diferente, considera a arquitetura Intel x86 (IA-32).
Exercícios
[editar | editar código-fonte]Este livro é recheado de trechos de código. É esperado que o leitor pratique escrevendo os códigos no ambiente específico cada vez que encontrar blocos como os abaixo:
Exemplos de código em Python como a seguir devem ser comandados no ambiente do Python 2.7 da sua máquina virtual (ou real) GNU/Linux:
>>> print 'Execute isto no console do Python!'
Vários exemplos são no shell do Linux, que é o Bash por padrão:
$ echo 'Este vai no Bash'
O leitor também encontrará códigos em C como este:
#include <stdio.h>
int main(void) {
printf("Compilar com o gcc e executar!\n");
return 0;
}
Neste caso, é preciso salvar o código em C num arquivo de texto e assim compilar e executar no ambiente GNU/Linux, a menos que especificado outro:
$ gcc -o exemplo1.c exemplo1
$ ./exemplo1
Há ainda outros tipos de blocos, mas tenha em mente que é necessário para o aprendizado que você os escreva, execute e analise seus resultados. ;-)