Perguntas e respostas com Assembly e NASM
Publicado por Perfil removido (última atualização em 14/04/2014)
[ Hits: 5.949 ]
Simples aplicação de perguntas e respostas feito em Assembly usando assemblador NASM.
Este script foi testado em uma máquina com processador Intel Pentium 4, arquitetura x64.
Para executar o exemplo, deve-se ter o NASM instalado em sua máquina. Daí, execute os seguintes comandos para compilar o arquivo, e transformá-lo em um programa executável:
Para compilar:
$ nasm -f elf64 pergunta.asm
Para gerar o executável:
$ ld pergunta.o -o pergunta
Para executar:
$ ./pergunta
; Variáveis setadas section .data p DB "PRIMEIRA PERGUNTA", 0xa ln_p equ $ - p p_d DB "SEGUNDA PERGUNTA", 0xa ln_p_d equ $ - p_d r1 DB "OI" R2 DB "DOIS" ac DB "voce acertou" l_ac equ $ - ac ec DB "voce errou" l_ec equ $ - ec l_r1 equ $ - r1 fim DB "ACABOU" l_f equ $ - fim ; Variáveis declaradas section .bss resp1 RESB 2 resp2 RESB 2 ; Corpo do documento section .text global _start _start: mov eax, 4 ; Indica pro KERNEL que é operação de saída mov ebx, 1 ; 0 = NADA; 1 = STDOUT(Saída); 2 = STDIN (Entrada) mov ecx, p ; Conteúdo mov edx, ln_p ; quantidade de caracteres que serão exibidos int 0x80 ; Sinal para o KERNEL mov eax, 3 ; Indica pro KERNEL que é para receber um campo mov ebx, 2 ; STDIN (Entrada) mov ecx, resp1 ; Campo digitado pelo usuário vai para a variável resp1 mov edx, 2 ; Espaço para digitação de dois caracteres int 0x80 mov esi, resp1 ; Joga em esi o valor de resp1 mov edi, r1 ; Joga em edi o valor da resposta (r1) mov ecx, 2 cld ; Incrementa registradores de strings (Pula de um caracter para outro) repe cmpsb ; REPE repete o comando cmpsb até ecx igualar á 0. O comando CMPSB compara valores de string que estao em ESI e EDI. jecxz acertou ; Pula para o trecho acertou quando jmp _start ; Quando o usuário erra, volta para este fluxo ;jmp errou jmp sair ; Exibo na tela mensagem de que acertou acertou: mov eax, 4 mov ebx, 1 mov ecx, ac mov edx, l_ac int 0x80 ; Fluxo da segunda pergunta, semelhante á primeira segunda: mov eax, 4 mov ebx, 1 mov ecx, p_d mov edx, ln_p_d int 0x80 mov eax, 3 mov ebx, 2 mov ecx, resp2 mov edx, 4 int 0x80 mov esi, resp2 mov edi, R2 mov ecx, 2 cld repe cmpsb jecxz finish jmp segunda errou: mov eax, 4 mov ebx, 1 mov ecx, ec mov edx, l_ec int 0x80 jmp sair finish: mov eax, 4 mov ebx, 1 mov ecx, fim mov edx, l_f int 0x80 jmp sair ; eax recebe valor de 1, indicando ao KERNEL que é o fim do programa sair: mov eax, 1 mov ebx, 0 int 0x80
SearchSploit-GTK: Interface gráfica simples para o searchsploit (Kali Linux)
gitignore para gerenciar dotfiles
Tranposta da matriz em Haskell
Método de Gauss-Seidel em SCILAB
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)