segunda-feira, 8 de novembro de 2021

Alteração de um Programa em Tempo de Execução

Os vírus de computador contam com várias "artimanhas" para alcançar os seus objetivos. Dentre estas estratégias está a alteração de programas comumente executados por seus usuários. Esta estratégia permite que um programa do próprio usuário seja usado para executar os objetivos escusos do programa invasor.

No programa a seguir, encontra-se um pequeno e educacional exemplo, que apresenta a estratégia geral de ação de um vírus previamente inserido no sistema. Neste exemplo, parte-se do pré suposto que o suposto vírus está em execução em um computador e, por não ter "direitos" plenos de acesso ao sistema, ataca um programa do usuário, pelo desvio da execução de um de seus subprogramas, de modo a executar as ações de alteração do próprio vírus.


A final da execução do subprograma do vírus, ele executa o subprograma original e faz com que o usuário tenha a impressão de que nada foi modificado. No entanto, como destacado no programa em Assembly, estes códigos em linguagem de baixo nível, são tão poderosos que podem até alterar o objetivo de um programa. No exemplo apresentado, um programa que iria executar uma soma, acaba executando uma subtração.

quinta-feira, 21 de outubro de 2021

Subprogramas em C e Assembly

A seguir, dois programas serão disponibilizados para análise. O primeiro implementa em C++ um algoritmo que decompõe um número inteiro em seus dígitos formadores. Este programa ainda conta com um apêndice, que implementa o mesmo algoritmo na linguagem Assembly.

O segundo programa implementa o mesmo algoritmo do primeiro, mas organiza seus códigos fontes em dois subprogramas, um para decompor o número e outro para exibir as suas parcelas.

Observa-se no algoritmo implementado, que este usa do processo de múltiplas divisões por 10 para, em cada iteração: i) calcular o resto da divisão; ii) armazenar o resto em uma estrutura de dados (string em C++ e pilha em Assembly) e; ii) retirar esta parcela do número original. Após serem armazenadas, cada uma das parcelas serão exibidas na ordem inversa a que foram inseridas na estrutura de dados.

Como objeto de aprendizagem, cada um dos programas é composto por sua implementação em C++ e a respectiva adaptação para Assembly (8 Bit Assembler Simulator). De modo a melhorar a compreensão por parte dos iniciantes na programação em Assembly, o código relacionado ao processo de decomposição, está fortemente documentado.

terça-feira, 5 de outubro de 2021

Inversão de String em Assembly

O programa tem como objetivo apresentar, nas linguagem C e Assembly, um algoritmo para inverter o conteúdo de uma String.
Como objeto de aprendizagem o programa é compreendido por um programa em C++, que implementa inicialmente uma "varredura" na String, de modo a obter o seu tamanho. Obtido o tamanho, a  "varredura" é feita de forma inversa, exibindo cada um dos caracteres da String. Em comentário ao programa em C é apresentada uma adaptação deste programa, para Assembly (8-Bit Assembler Simulator).

quinta-feira, 23 de setembro de 2021

Convertendo Binário (em 8 bits) para Hexadecimal.

Os programas exibidos a seguir têm como objetivo permitir a análise comparativa de um programa escrito em linguagem de alto nível, como o C++, com um programa escrito em Assembly. Observa-se que o código em assembly é destinado a uma máquina com características organizacionais bem "discretas", onde destacam-se: i) o armazenamento e endereçamento de dados em 8 bits; ii) a pouca disponibilidade de registradores e; iii) o conjunto restrito de instruções.
No referido a análise do programa é sugerido ao aluno, que observe o modo como são implementadas, em assembly, as instruções da linguagem C. Outro elemento importante é o modo como os dados são gerenciados e tratados. O aluno deve observar como o programa em assembly trata as indicações e denominações aos locais de memória em que os dados são armazenados.

Para os iniciantes, ou com pouco prática nas linguagens de programação usadas acima, destaca-se que o algoritmo também foi implementado na plataforma Google Blocky e pode ser executado na janela a seguir. Observa-se na aplicação a possibilidade da visualização do código em mais 6 linguagens.

quinta-feira, 16 de setembro de 2021

Microprocessador de 8 Bits

Microprocessador de 8 Bits, que até pode ser considerado como um infográfico interativo, é uma aplicação computacional que implementa um microprocessador com estrutura e funcionalidades bem simples; podendo executar apenas 5 operações entre registradores e/ou constantes inteiras, a saber: i) movimentação de dados (MOV); ii) adição (ADD); iii) subtração (SUB); iv) multiplicação (MUL) e; v) divisão (DIV).

Para usar o aplicação, basta clicar no botão de "Comando" e selecionar a operação desejada. Após isso o usuário deve definir os dados necessários à operação, clicando nos botões abaixo do comando - os quais serão devidamente ajustados, dependendo da operação selecionada. Feito isso, basta clicar em "Exec" e observar o processo de execução do comando.

Observando a Organização e a Arquitetura de Sistemas

Esta oficina, através da execução de pequenos programas (em diferentes plataformas computacionais), tem como objetivo, conduzir o aluno à observação de elementos e características que possivelmente permitirão a estes, a observação dos elementos da organização e da arquitetura das plataformas de programação usadas.

São cinco pequenos programas (1 em linguagem de máquina, 3 em Assembly e 1 em C++). O programa em C++ é encontrado diretamente no link, para execução via Web. Os outros programa, assim como as instruções de uso, são disponibilizados como comentários ao programa em C++. Basta seguir as orientações encontradas logo após o cabeçalho do programa. A seguir você pode observar o programa.

terça-feira, 25 de abril de 2017

Curso de Programação - Dados e Variáveis

No mundo da computação, dados podem ser definidos como quaisquer elementos que serão "manipulados/usados" por um programa de computador. Para serem usados, os dados necessitam ser armazenados na memória do computador. O local onde cada elemento de dado (p.ex. o peso de uma pessoa) é armazenado chama-se variável.

A figura a seguir mostra um pequeno programa que manipula dados numéricos (valor1, valor2, valor3, soma e média) e de caracteres (mensagem). O programa calcula e exibe o resultado da média aritmética entre valores.


A janela a seguir permite a execução do programa apresentado na figura anterior - é só clicar na bandeira verde.


Observa-se que os dados são apenas apresentados, fazendo com que para outro conjunto de dados haja a necessidade de alterar o programa ou inserir comandos de entrada de dados - o que será mostrado no próximo exemplo.

Para Saber Mais