"Clear Screen" para Linux x86 em Assembly Puro (GNU Assembly)
Publicado por Perfil removido (última atualização em 08/05/2012)
[ Hits: 4.007 ]
Obs[1]: Testado apenas para o as (GNU Assembly.). Não tentei com o Nasm.
Obs[2]: Óbvio, mas bom ressaltar: não funciona em nada que rode "INT 21h". TASM está fora...
Obs[3]: (De última hora) Está aparecendo um sinal entre chaves escrito em maiúsculo "FONTE" no lugar do BACKSLASHZERO (barra invertida-zero), sinal de caractere zero e de fim de string em C, quando alguma coisa lê uma string e entende o símbolo como zero.
"\" + "0" = BACKSLASHZERO = Caractere nulo.
Ditando a grosso modo, caso não dê pra ver corretamente, fica sendo a seguinte linha deste modo:
.ascii "BACKSLASHZERO33cBACKSLASHZERO"
O "33" fica aonde está, junto com a letra "c" (minúscula). Apenas troca-se o nome da barra pela barra e o ZERO pelo algarismo "0".
=======================================
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:
"$ as clrscr001.s -o clrscr001.o"
Em seguida usar:
"ld clrscr001.o -o clrscr001"
Depois para executar:
"$ ./clrscr001"
Após a montagem, por aqui ficou com apenas 591 bytes.
E logo depois ao usar "$ strip -s clrscr001" para retirar informações de montagem, link edição etc ficou com apenas 308 bytes.
Quer dizer, menor que os 512 bytes da MBR de um HD convencional.
Obs: O comando "strip" retira informações usadas para depurar com o gdb. Como está tudo ok, estas serão retiradas para ficar menor ainda.
############################################## # Comentários: ############################################## # Para gerar o executável, usar: # "$ as clrscr001.s -o clrscr001.o" # # e em seguida usar: # "$ ld clrscr001.o -o clrscr001" # # depois para executar: # "$ ./clrscr001" ############################################## .section .rodata clear: .ascii "{FONTE}33c{FONTE}" size: .int . -clear .section .text .globl _start _start: movl $4, %eax movl $1, %ebx movl $clear, %ecx movl size, %edx int $0x80 movl %eax, %ebx movl $1, %eax int $0x80
"Clear Screen" para Linux x86 com Inline Assembly (embutido no código) em C
Crivo de Eratóstenes Simples para Linux x86 em Assembly Puro (GNU Assembler)
Árvore binária de busca em Assembly - com comentários
Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (GNU Assembler)
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? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[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