Nous expliquerons les concepts fondamentaux qui sont à la base de tous les systèmes informatiques et nous montrerons comment ces idées affectent la correction, la performance et l'utilité de n'importe quel programme d'application.

Ce cours sert d'introduction aux étudiants qui vont ensuite développer des matériels et des logiciels systèmes. Mais il pousse aussi les étudiants à devenir les rares programmeurs qui savent comment les choses fonctionnent et comment les réparer lorsqu'elles tombent en panne. Ce n'est pas un cours réservé aux geeks, c'est un cours pour tous les programmeurs !

 

TD : Les TD sont le coeur de ce cours et ils illustrerons comment dans la pratique quotidienne de la programmation. Entre autre choses, nous ferons de la rétro-ingénierie sur un programme binaire, mettrons en oeuvre un dépassement de tampon, optimiserons une architecture de processeur et réaliserons notre propre allocateur de mémoire.

Prérequis : Les étudiants doivent être familiarisé avec la programmation. Toute expérience avec les langages C ou C++ est un plus, mais si vous n'avez qu'une expérience avec Java, nous vous aiderons. Nous n'attendons aucune expérience antérieure du hardaware, du langage machine ou de la programmation en langage d'assemblage.

Langue : Les cours son en français ou anglais, selon la préférence des étudiants

Evaluation : Les labos sont notés + un examen final écrit




We will explain the enduring concepts underlying all computer systems, and show the concrete ways that these ideas affect the correctness, performance, and utility of any application program.

This course serves as an introduction to the students who go on to implement systems hardware and software.  But this course also pushes students towards becoming the rare programmers who know how things work and how to fix them when they break.  It is not a course reserved to geeks, it is a course for all programmers!

 


TDs: The TDs are the heart of the course and will illustrate how to put the above at work in everyday programming practice.  Among other things we will reverse-engineer a binary program, implement a buffer overflow attack, optimise a processor design, and implement our own memory allocator.

Student's background: We assume that the student has familiarity with programming.  Experience with C or C++ languages is a plus, but If your only prior experience is with Java we will help.  We do not assume any prior experience with hardware, machine language, or assembly-language programming.

Language: Lectures will be in French or English, as requested by the students.
Exam and grading: Labs are graded + a final written exam.
ECTS credits: 4