Jump to content
Sign in to follow this  
Eduardo Bittencourt

Programa em Assembly

Recommended Posts

Programa simples que fiz em assembly, só faz ler o stdin mesmo, kkkk. Obs: Na label write,  era pra eu ter feito uma rotina que usasse como argumento uma string, assim não precisava repetir todo o código da label write na label writex, mas fiz desse jeito mesmo pra não usar a stack

 

;Author: WallasC0der
;
;montagem
;nasm -f elf32 stdin.asm
;ld -m elf_i386 stdin.o -o stdin


section .bss

buffer RESB 256 ; reserva 256 bytes
size equ $ - buffer ; tamanho do buffer

section .data

msg db "Digite no stdin", 0ah
len equ $ - msg	

section .text

global _start:

;protótipo do write
;ssize_t write(int fd, const void *buf, size_t count);

_start:

write:

mov eax, 4 ; syscall do write
mov ebx, 2 ; stdout
mov ecx, msg; void *buf
mov edx, len; size_t
int 0x80 ; executa a syscall


;protótipo do read
;ssize_t read(int fd, void *buf, size_t count);

read:

mov eax, 3 ; syscall do read
mov ebx, 1 ; stdin
mov ecx, buffer ; void *buffer
mov edx, size ; size_t
int 0x80; executa a syscall

mov esi, ecx

writex:

mov eax, 4
mov ebx, 2
mov ecx, esi
mov edx, size
int 0x80

exit:

mov eax, 1 ; syscall do exit
int 0x80   ; executa a syscall

 

Edited by Eduardo Bittencourt
  • Curtir 1

Share this post


Link to post
Share on other sites

Que legal. Um TODO que tenho é reescrever meus códigos usando a instrução syscall, que é mais atual que a int 0x80. Já pensou nisso? Seria legal estudar isso aqui. :-)

Abraço!

Share this post


Link to post
Share on other sites

Lembrando pra galera que a syscall é uma instrução que foi introduzida no x86_64. Se forem mudar, não esqueçam de ver as mudanças dos registradores de acordo com a ABI do x86_64:

  • RAX (número da syscall);
  • RDI (primeiro parâmetro da syscall);
  • RSI (segundo parâmetro da syscall);
  • RDX (terceiro parâmetro da syscall);
  • R10 (quarto parâmetro da syscall);
  • R8 (quinto parâmetro da syscall);
  • R9 (sexto parâmetro da syscall).

O número das syscalls também mudou. Vocês podem ver a lista aqui:

http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...