Ir para conteúdo
Entre para seguir isso  
Fernando Mercês

“Hello world” em nasm no Linux x86

Posts Recomendados

Esta é uma maneira antiga de usar as chamas de sistemas do Linux, mas ainda funciona e tem fins didáticos :-)

; # apt-get install nasm
; $ nasm -f elf32 hello.asm
; $ ld -o hello hello.o
; $ ./hello
 
section .data ; seção .data do ELF, onde ficam os dados
msg: db "Mente Binária", 10
len: equ $-msg ; "$" significa "aqui" -> posição atual menos posição do texto. len terá o tamanho da string.
 
section .text ; seção .text do ELF, onde fica o código
global _start ; faz o label "_start" visível ao linker (ld)
 
mov edx,len ; arg3 da syscall write(), quantidade de bytes para imprimir (tamanho)
mov ecx,msg ; arg2, pointeiro para o endereço da string
mov ebx,1 ; arg1, em qual file descriptor (fd) escrever. 1 é stdout
mov eax,4 ; 4 é o código da syscall write()
int 0x80 ; interrupção 0x80 do kernel (executa a syscall apontada em eax)
 
mov ebx,0 ; arg1 da syscall exit(). 0 significa execução com sucesso
mov eax,1 ; 1 é o código da syscall exit()
int 0x80 ; executa a syscall apontada em eax, que vai sair do programa

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei aqui e precisei colocar mais alguns parâmetros pro linker funcionar.

Como estou numa máquina 64bits precisei settar a arquitetura também. Segue o comando:

 

ld -m elf_i386 -s -o hello hello.o

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×