Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider 48c108bb rédigé par Olivier Bonaventure's avatar Olivier Bonaventure Validation de GitHub
Parcourir les fichiers

Merge pull request #146 from qdeconinck/qbf-s4

add qbf for fourth week
parents 9b32efe5 ff725ad0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -149,3 +149,25 @@ Exercices
#. Vous trouverez également sur INGInious plusieurs exemples de questions typiques sur l'assembleur à l'examen. Ces questions portent sur la traduction d'un code assembleur dans son équivalent en C. `Première question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm1>`_, `deuxième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm2>`_, `troisième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm3>`_ et `quatrième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm4>`_ .
Question de bilan final
=======================
Considérez le programme suivant.
.. literalinclude:: src/s4_qbf.c
:encoding: utf-8
:language: c
* Dessinez le schéma de l'organisation mémoire du programme. Identifiez dessus où se trouvent toutes les variables présentes dans le programme.
* Pour chaque ligne du programme, indiquez quelles zones mémoires sont accédées et leur contenu après exécution.
.. only:: staff
Cette question est importante à réaliser, n'hésitez pas à y passer une bonne demi-heure. Insistez pour commencer à dessiner le schema au tableau et que les étudiants interagissent directement dessus.
Dans la section code: f, main.
Dans la section initialisée: cours et 97850 (insistez sur ce dernier!).
Dans la section heap: la zone mémoire pointée par tab.
Dans la stack (à des niveaux différents): d, tab, res, c, x. Notez que les arguments des fonctions sont aussi mis sur la stack (y compris a, b, argc et argv), mais insistez là-dessus lors de l'exécution du programme.
Dans la zone param/env: le contenu de argv.
\ No newline at end of file
#include <stdlib.h>
int cours = 1252;
int f(int *a, int b) {
int c = 97850**a + b;
int x = 2052;
*a = x * c;
return c;
}
int main(int argc, char *argv[]) {
int d = 42;
char *tab = malloc(20 * sizeof(char));
int *res = (int *) tab;
*tab = f(&cours, d);
return 0;
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter