02 - Representação de dados em RAM
Experimentos
Vamos trabalhar com os arquivos experimento0-4.c
. Compile e execute cada um deles, execute e analise suas saídas. Comente os resultados comparando os valores das constantes no código em C e a saída dos programas. Tente entender o que está acontecendo.
Para compilar cada .c
, utilize:
Exercise 1
Exercise 2
Exercise 3
Exercise 4
Exercise 5
Representação de struct
em RAM
A utilização de struct
junta tudo que já vimos sobre representação de todos os tipos de dados na memória. Não se esqueça de levar em conta as questões de alinhamento mostradas na parte expositiva da aula.
Atenção!
Você não deverá abrir o código de parte1.c
. Ele está no repositório para você poder conferir suas respostas.
Vamos compilar?!
Compile e execute parte1.c.
Exercise 6
Exercise 7
Exercise 8
Hora de conferir!
Agora confira suas respostas no arquivo parte1.c.
Examinando a execução de programas usando gdb
Podemos examinar um programa durante sua execução usando o gdb. Podemos parar em qualquer instrução do programa, examinar conteúdo de registradores e da memória e listar todos os símbolos disponíveis (que podem ser funções ou variáveis globais).
Dica! 1
Para compilar um programa com suporte a debugging usamos a flag -g
do gcc
Siga os passos para para carregar um programa usando o gdb:
-
Lance o
gdb
e passe para ele seu programa: -
Para sair, utilize:
Tip 2
O gdb é uma ferramenta poderosa que possui muitas opções. Sua documentação está online e pode ser acessada em: https://sourceware.org/gdb/onlinedocs/gdb/index.html#Top.
Uma explicação detalhadas dos comandos do gdb pode ser encontrada nesse link: https://diveintosystems.org/book/C3-C_debug/gdb_commands.html.
Nesta primeira parte iremos abrir o arquivo parte2.c e olhar seu conteúdo. Também executaremos o programa compilado parte2.
Exercise 9
Atenção, tarefa dupla!
Para os próximos exercícios, compile o arquivo parte2.c
com e sem debugging e repita cada exercício com ambas as versões do executável. Exemplo de compilação:
Exercise 10
Exercise 11
Muita informação!
Muitos nomes são estranhos. Eles fazem parte do padrão de arquivos executáveis ELF, que contém informações específicas do sistema operacional usado. Você não precisa se preocupar com estes nomes.
Exercise 12
Exercise 13
Exercise 14
Exercise 15
Exercise 16