Ir para conteúdo

Programa em Assembly


Eduardo Bittencourt

Posts Recomendados

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

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...

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/

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...