"Clear Screen" para Linux x86 em Assembly Puro (Nasm - Netwide Assembler)
Publicado por Perfil removido (última atualização em 09/05/2012)
[ Hits: 6.607 ]
Obs[1]: Testado apenas para o nasm (Netwide Assembler.). Não funciona com "as" (GNU Assembler). Nem o outro para o GNU Assembler funciona com Nasm.
Obs[2]: Sempre é bom lembrar: não funciona em nada que rode "INT 21h". TASM está fora... Aqui é int 0x80 (int 80h).
Obs[3]: O comando "strip" retira informações usadas para depurar com o gdb. Como está tudo ok, estas serão retiradas para ficar menor ainda. Ou então usa-se a opção "-s" no comando "ld", que já faz isso direto.
Obs[4]: (Já ocorreu antes) Sequẽncias de escape não estão sendo visttas corretaente. Qualquer coisa que use BACKSLASH "\" + "0", por exemplo. Estão saindo assim
"\" + "0" = "{" + FONTE + "}"
Sem as aspas e os espaços em branco. Em todo o caso, recomendo baixar o código para visualizar melhor.
=======================================
Este código simplesmente retira os caracteres do console após executado muito parecido com o comando "clear" do Unix/Linux.
Para gerar o executável, usar:
"$ nasm -f elf clrscr001.asm"
Em seguida usar:
"ld -s clrscr001.o -o clrscr001"
A opção "-s" é opcional e aplica um "strip -s" automaticamente. Se alguém quiser usar o gdb, não deverá aplicar "-s", nem usar "strip -s" após a linkedição.
Depois para executar:
"$ ./clrscr001"
Após a montagem, por aqui ficou com apenas 665 bytes.
E aaṕos o processo de "strip", retirando informações de montagem, linkedição etc. seja junto com a linkedição ou após "strip -s" ficou com apenas 348 bytes.
Quer dizer, também ficou menor que os 512 bytes da MBR de um HD convencional, mas uns poucos bytes maior que um equivalente feito em GNU Assembler.
; nasm -f elf clrscr001.asm ; ld -s clrscr001.o -o clrscr001 ; a opção -s no linkeditor faz "strip -s" automaticamente ; section .text global _start _start: mov eax, 0x04 mov ebx, 0x01 mov ecx, strcls mov edx, sizecls int 0x80 mov eax, 0x01 int 0x80 section .data strcls db `{FONTE}33c` sizecls equ $ - strcls
Soma dois números lidos da memória
Simples JIT (just in time) em C
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta