11 - Revisão
Na aula de hoje iremos revisar nossas atividades com Assembly e representação de inteiros.
Quando tiver dúvidas, chame o professor ou os ninjas!
Importante
Esta aula tem duas partes:
- Exercícios de revisão (
ex1.c
,ex2.c
,ex3.c
eex4.c
)- Siga o roteiro para desenvolvê-los
- Simulado de prova
- Veja mais detalhes no final do roteiro!
Ex1.c
Abra o código-fonte ex1.c
e confira a função main
. Compile e execute o exercício 1. Em seguida, responda:
Exercise 1
Answer
O valor -1 em complemento de 2 é representado como uma sequência de 1's. Ao ser atribuído em uma unsigned short, teremos dezesseis 1's, mas que serão interpretados como unsigned. Somando $2^0 + 2^1 + \dots + 2^{15} = 65535$
Exercise 2
Answer
A variável será de 2 bytes sem sinal, assim o maior valor é $2^{16}-1 = 65535$
Exercise 3
Answer
Apenas os 16 bits menos significativos serão considerados.
Ex2.c
Neste exercício iremos fazer engenharia reversa de Assembly para C. Os códigos-fonte estão disponíveis no repositório, mas evite abri-los antes de ter feito pelo menos uma primeira versão da engenharia reversa.
Compile o ex2.c
com
Abra o arquivo ex2.o
com o gdb sem abrir o código-fonte e responda:
Exercise 4
Answer
Funções func1
e func2
. Sem variáveis globais.
Analise a função func1
com o gdb e responda:
Exercise 5
Exercise 6
Answer
A operação é vec[0] = 0
ou *vec = 0
. Como a operação é um MOV
, então (%rdi)
representa uma dereferenciação de ponteiro.
Tip 1
Veja a seção Acesso a elementos constantes da aula 09 - Arrays
Exercise 7
Answer
A operação é vec[2] = 20
. Em 0x4(%rdi)
, indicamos que queremos acessar o endereço %rdi + 4 bytes.
Tip 2
Acese na aula 05-Condicionais a explicação sobre as variântes da instrução mov
Analise a função func2
com o gdb e responda:
Exercise 10
Answer
É uma operação aritmética onde o valor armazenado em %rax
é multiplicado por 5 e armazenado em %edx
.
Exercise 11
Answer
É uma operação aritmética onde o valor armazenado em %edx
é somado consigmo mesmo e armazenado em %edx
. Isto é equivalente a fazer var = var * 2
.
Exercise 12
Answer
Supondo que %eax
representa a variável i
, então a junção das duas operações é equivalente a fazer i * 10
, cujo resultado é armazenado em %edx
.
Exercise 13
Ex3.c
Neste exercício iremos fazer engenharia reversa de Assembly para C. Os códigos-fonte estão disponíveis no repositório, mas evite abri-los antes de ter feito pelo menos uma primeira versão da engenharia reversa.
Compile o ex3.c
com:
Abra o arquivo ex3
com o gdb sem abrir o código-fonte e responda:
Exercise 14
Answer
Variável global v_global
. Funções func1
, func2
, func3
, func4
e main
.
Exercise 15
Answer
Ambas fazem operações com registradores. Porém func2
faz a leitura de algum valor de memória e armazenando no retorno da função, uma variável global. Já func1
apenas faz uma operação aritmética com o parâmetro recebido.
Tip 3
Fique atento a chamadas de variáveis globais. Utilize o comando x
para imprimir o conteúdo de um endereço. Veja mais em https://sourceware.org/gdb/current/onlinedocs/gdb#Memory
Exemplo:
Exercise 17
Ex4.c
Neste exercício iremos fazer engenharia reversa de Assembly para C. Os códigos-fonte estão disponíveis no repositório, mas evite abri-los antes de ter feito pelo menos uma primeira versão da engenharia reversa.
Compile o ex4.c
com:
Abra o arquivo ex4
com o gdb sem abrir o código-fonte e responda:
Exercise 18
Tip 4
Observe sempre as chamadas de variáveis globais e strings (relativos a %rip
) e acessos à stack (relativos a %rsp
).
Simulado de prova
Além dos exercícios de revisão feitos na aula, no Blackboard da disciplina está disponível o arquivo simulado_ai.zip
.
Para baixar o arquivo acesse no Blackboard:
Conteudo / Simulado AI / Donwload e entrega do simulado da AI
Siga as orientações no Blackboard para fazer o downloado do simulado, na AI, vocês receberão um arquivo semelhante a este. No dia da prova, você terá que baixar o zip, descompactar, resolver os exercícios, compactar novamente e anexar no Blackboard.
Importante
Leia o README.md
ou README.html
para saber o que é esperado em cada questão e como você será avaliado