Eduardo Bittencourt Posted September 6, 2017 at 07:42 PM Share Posted September 6, 2017 at 07:42 PM 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 to comment Share on other sites More sharing options...
Fernando Mercês Posted September 7, 2017 at 06:26 AM Share Posted September 7, 2017 at 06:26 AM 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! Link to comment Share on other sites More sharing options...
Eduardo Bittencourt Posted September 7, 2017 at 03:20 PM Author Share Posted September 7, 2017 at 03:20 PM Vlw pela dica, vou fazer isso , abraços Link to comment Share on other sites More sharing options...
thiago Posted October 28, 2017 at 06:46 AM Share Posted October 28, 2017 at 06:46 AM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.