Anotações aula 03 - OPCODE #3
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Anotações da aula 03
Utilizamos as seguintes ferramentas:
Temos que ter estes programas como ferramentas apropriadas e estudar bastante o manual delas.
Infelizmente algumas dessas documentações não tão boas.
O principal uso que faremos delas é para analisar os códigos.
Em nosso curso, utilizaremos mais os registradores de propósito geral.
O que é segmentação?
Vamos pensar num processo na memória para ser executado. Os segmentos são divisões lógicas na memória.
Este mesmo espaço de endereçamento é fisicamente dividido em blocos minímos gerenciáveis pelo kernel. Eles são chamados de páginas. No Linux, nós vemos páginas de 4k. Em programas pequenos, a seção de texto vai parar em um segmento - divisão lógica - apenas para aquela área de texto. Já a seção de dados, vai pular mais 4k, para chegar no início de onde os próximos dados vai executar.
São faixas/espaços minímos de memória e os segmentos são divisões lógicas.
As divisões lógicas podem receber atributos.
E quando você excede o espaço de uma seção, você tem uma falha de segmentação. Você foi além daquele limite.
Registradores
Temos 16 registradores de propósito geral, mas historicamente eles tinham usos específicos.
Exemplos: ax para acumulador, bx para base, cx para contador, dx destino, e por aí vai.
Na arquitetura 64 bits temos ainda mais oito registradores de r8 a r15. Suas partes são acessadas de forma diferente.
Registradores de flags
Vão receber operações. E alguns saltos condicionais vão ser feitos. Eu posso fazer a subtração, por exemplo, e condicionar um salto ao fato de a flag de sinal ter sido alterada para positivo ou negativo. Isto é usado como referência para saltos condicionais.
Esta subtração é feita com alguns comandos que fazemo o teste para alterar este registrador de flag. É o caso das comparações e teste.
Análise do código em binário/hexadecimal
Os códigos de operação são o ponto mais importante de hoje. E não como vismos nas aulas anteriores e sim com a dificuldade que teremos para consultar os manuais que temos para utilizar instruções minemônicas.
01 /4 Add r32 to r/m32
Como podemos ler uma instrução dessas?
Ele apresenta várias combinação e variantes e ele apresenta mostra por exemplo que ele soma em r/m(registrador ou memória) e o segundo registrador apenas(r), com origem e destino. O resultado vai para o primeiro operando.