Compilar um programa de linguagem de montagem com o NASM

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.

No Linux

Etapa 1. Criar um arquivo-fonte

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.

Etapa 2. Fazer a montagem do arquivo-fonte

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.

Etapa 3. Criar o executável

Agora que já possuímos nosso arquivo denominado teste.o, vamos criar nosso executável. Há dois caminhos possíveis nesse momento:

  • O programa inicia com um procedimento chamado “_start”. Isso significa que o programa possui seu próprio ponto de entrada sem necessidade de utilizar a função main. Tal cenário não altera muito as coisas, porém você precisará usar o comando "ld" para criar o executável:
    ld teste.o -o teste

    .

  • O programa inicia com um procedimento chamado “main”. Nesse caso, você precisará utilizar o comando GCC para criar o executável:
    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.

Etapa 4. Executar o programa

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

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

Etapa 1. Instalar os programas necessários

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.

Etapa 2. Criar um arquivo-fonte

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.

Etapa 3. Fazer a montagem do arquivo-fonte

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.

Etapa 4. Criar e executar o programa

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

Nosso conteúdo é produzido em colaboração com especialistas em tecnologia da informação sob o comando de Jean-François Pillou, fundador do CCM.net. CCM é um site sobre tecnologia líder em nível internacional e está disponível em 11 idiomas.
Este documento, intitulado 'Compilar um programa de linguagem de montagem com o NASM', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.

Assine nossa newsletter!

Assine nossa newsletter!
Junte-se à comunidade