Um software Assembly é aquele que permite gerar um código-fonte em linguagem de montagem. O Nasm é um desses softwares, utilizado para arquiteturas x86. Podemos encontrá-lo para diversos sistemas operacionais tais como Linux ou Windows. Nesse tutorial, veremos como criar um arquivo executável no Linux e Windows a partir de um código-fonte destinado ao Nasm.
Não é necessário um editor específico para criar um arquivo-fonte destinado ao Nasm. Podemos escolher, por exemplo, Gedit, Kwrite, Xemacs, entre muitas outras opções. Não se esqueça, no entanto, que ao salvar o arquivo você deverá adicionar a extensão .asm.
Para essa etapa, precisaremos que o Nasm esteja instalado no computador. Se você tiver Debian ou Ubuntu, basta inserir o comando
sudo apt-get install nasm
.
Caso utilize outra distribuição Linux, acesse o gerenciador de pacotes de dados da sua distribuição (por exemplo, urpmi, yum, emerge) ou compile o Nasm baixando o arquivo no site oficial do software.
Passamos agora à montagem do arquivo-fonte. Em linha de comando, vá para a pasta em que está o arquivo-fonte, que chamaremos, por exemplo, de teste.asm. Nesse caso, vamos aplicar o comando
nasm -f elf teste.asm
.
Isso criará um arquivo chamado teste.o na pasta atual. Esse arquivo ainda não é executável, sendo tão somente um arquivo objeto. É necessário lê-lo com as bibliotecas das quais ele depende, caso da biblioteca Standard LIBC.
Agora que já possuímos nosso arquivo denominado teste.o, vamos criar nosso executável. Há dois caminhos possíveis nesse momento:
ld teste.o -o teste
.
gcc teste.o -o teste
.
De uma forma ou outra, o executável estará criado, seu nome é teste e está armazenado na mesma pasta do arquivo objeto.
Para executar nosso programa chamado “teste”, basta agora inserir o comando
./teste
.
Você também pode utilizar um depurador para observar a execução. Uma opção é o GDB, utilizado em linha de comando. Se você deseja um depurador visual, existem interfaces gráficas que utilizam GDB em segundo plano, como o Insight.
No Windows, o que vai mudar é a forma como os parâmetros são acionados. Além disso, a função main não existe e deve ser substituída por WinMain.
Se o seu ponto de entrada é _start ou main, você deverá alterá-lo para "_WinMain@16" e substituir “ret” por "ret 16".
A seguir, um exemplo de arquivo-fonte correto utilizado no Windows:
section .text
global _WinMain@16
_WinMain@16:
mov eax, 0
ret 16
Primeiro, vamos instalar o Nasm. Podemos baixá-lo no site oficial do software, lembrando de selecionar a versão Win32 binária.
A etapa mais delicada será instalar o MingW, ambiente de desenvolvimento livre para Windows. Clique aqui e selecione a última versão do MinGW. Execute o instalador e, caso seja oferecida uma atualização, rejeite. Deixe todas as demais opções como estão, sem alterar nada.
Na sequência, insira o Nasm no ambiente de desenvolvimento MingW. Faça a descompressão do arquivo Nasm e você deverá encontrar uma pasta contendo um arquivo chamado nasm.exe. Copie o arquivo para a pasta C:\MinGW\bin.
Assim como no Linux, não é necessário usar um editor específico para criar um arquivo-fonte destinado ao Nasm. Podemos utilizar, por exemplo, o bloco de notas do Windows, mas será preciso tomar cuidado com a extensão TXT padrão do software.
Evite o uso de processadores de texto como Word ou WordPad, que podem salvar o arquivo em um formato não desejado. Se utilizá-los, dê preferência para um editor que use a coloração sintática do Nasm, caso do NasmEdit IDE (gratuito). Em todo caso, o mais recomendado é sempre inserir a extensão .asm aos arquivos.
Abra o prompt de comando do Windows (digite cmd na barra de pesquisa do menu Iniciar). No prompt, acesse a pasta que contém o arquivo-fonte utilizando o comando “cd”. Uma vez na pasta correta, faça a montagem do arquivo-fonte (daremos o nome de teste.asm) com o comando
nasm -f win32 teste.asm -o teste.o
. Agora você tem um arquivo objeto que ainda não é executável.
Na janela DOS do prompt, escreva o seguinte comando para criar o arquivo executável:
ld teste.o -o teste.exe
. Para testar se o arquivo está funcionando, digite simplesmente “teste” no prompt de comando. Se quiser um depurador para visualizar melhor o que ocorre, use o OllyDbg.
Foto: © Everypixel