0
Obrigado

Algumas palavras de agradecimento nunca são demais.

Compilar um programa de linguagem de montagem com o NASM

NASM é um software Assembly (linguagem de montagem) para arquitetura x86. Esse programa permite montar o código Assembly. Infelizmente, Assembly significa duas coisas tanto a linguagem de programação quanto o software de conversão da linguagem. Nessa dica, ensinaremos apenas como criar um executável para o Linux e o Windows a partir de um código-fonte para o NASM.




Para o Linux

Criar um arquivo fonte

Você não precisa de um editor específico para criar um arquivo fonte para o NASM. Você poderia usar um editor que suporte a sintaxe do montador, mas não há quem suporte a sintaxe do NASM. Assim, você pode escolher entre diferentes extensões, mas a mais recomendada é a extensão ASM.

Montar o arquivo fonte

Para essa etapa, você precisará de um software NASM instalado em sua máquina. Se você roda no Debian ou Ubuntu, basta digitar o comando:

sudo apt-get install nasm


Se você tiver outra distribuição Linux, deverá usar o gerenciador de pacotes da sua distribuição ou compilar o NASM baixando o arquivo a partir do site oficial.

Passemos à montagem do seu arquivo fonte. Vá para a linha de comando no diretório onde fica o arquivo fonte que chamaremos "test.asm", por exemplo. Veja a linha a ser digitada:

nasm -f elf test.asm


Isso criará um arquivo chamado "test.o" no diretório atual. Esse arquivo ainda não é executável, é apenas um arquivo de objeto, ou seja, arquivo que deve ser conectado com as bibliotecas das quais depende, por exemplo, a biblioteca padrão "libc".

Criação do executável

Agora que já temos o nosso arquivo de objeto, vamos criar o nosso executável. Dois casos se apresentam aqui:
  • Seu programa começa com um procedimento chamado "_start". Isso significa que seu programa tem seu próprio ponto de entrada, sem usar a função "main" (principal). Isso não muda muita coisa, mas você precisará usar o comando "ld" para criar o executável:


ld test.o -o test
  • Seu programa começa com um procedimento chamado "main". Você precisará utilizar o gcc para criar o seu executável:


gcc test.o -o test


Pronto, nosso executável foi criado, ele se chama "test" e se situa no diretório atual.

Execução do programa

Para executar nosso programa chamado "test", basta digitar este comando:

./test


Você também pode usar um depurador para assistir à execução. Para fazê-lo, você pode utilizar o gdb, que é usado em linha de comando. Se, no entanto, você quiser um depurador mais visual, existem interfaces gráficas que utilizam o gdb em plano de fundo, como o "Insight".

Para o Windows

No Windows, a convenção de chamada de configuração não é a mesma. A função chamada deve limpar ela mesma a pilha. Da mesma forma, o "mains" não existe no Windows e deve ser substituído pelo WinMain.


Se o seu ponto de entrada for "_start" ou "main", é preciso trocar para "_WinMain@16" e mudar o "ret" no final, deste procedimento de entrada, para "ret 16".

Exemplo de um arquivo fonte correto no Windows:

section .text 
global _WinMain@16

_WinMain@16:
mov eax, 0
ret 16

Instalar os softwares necessários

Vamos primeiro instalar o NASM (clique aqui. Instale o programa e deixe ele aberto. Será usado daqui a pouco.

A etapa mais delicada vai ser a de instalar "MingW", que é um ambiente de desenvolvimento grátis para o Windows. Nesse endereço, escolha a última versão do MinGW.

Se ele oferecer atualizar a sua instalação, diga não. Deixe todas as opções padrão selecionadas e, em seguida, espere o fim da instalação. Agora, vamos inserir o NASM no ambiente de desenvolvimento MingW. Descompacte o arquivo do NASM. Você vai obter uma pasta com, entre outras coisas, um arquivo chamado "nasm.exe". Por fim, copie este arquivo no diretório C:\MinGW\bin

Criar um arquivo fonte

Não é preciso usar um editor específico para criar um arquivo fonte para o NASM. Você pode usar o bloco de notas, mas tome cuidado, pois o bloco de notas do Windows tende a acrescentar a extensão TXT aos arquivos que cria.


Para evitar qualquer ambiguidade, exiba as extensões dos seus arquivos. Evite também, em todos os casos, editores de texto como Word ou WordPad, que podem salvar o seu arquivo com um formato inadequado.

Se quiser, utilize um editor que use a sintaxe NASM, como NasmEdit IDE (gratuito). Em todo caso, sugiro que você inclua a extensão ASM ao seu arquivo fonte.

Montar o arquivo fonte

Abra o interpretador de comandos do Windows (Windows + R) e digite cmd.exe. Com este interpretador de comandos, você deverá ir para a pasta contendo o seu arquivo fonte com o comando "cd". Assim que estiver nesse diretório, monte o seu arquivo fonte (vamos chamá-lo de "test.asm") com este comando:

nasm -f win32 test.asm -o test.o


Agora, você tem um arquivo de objeto que ainda não é executável. Passemos à última etapa.

Criação e execução do programa

Ainda em sua janela de comando, digite um último comando passado para criar o executável:

ld test.o -o test.exe


Se você tiver um problema com esse comando, talvez você tenha esquecido de ler o ponto importante que citei acima, no início da seção "Para o Windows".

Para testar o seu executável, basta digitar "test" na janela de comando. Se você quiser um depurador para ver mais de perto o que está acontecendo, use o OllyDbg. É um excelente depurador.

Veja também

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.

0 Comentário