Assignments

Assignment 0: Getting Started with Unix and C

Due: February 25, 2021 (23:59:59)

This assignment aims at making sure you familiarize yourself with basic C fundamentals and building simple C programs as well as basic Git commands and working through Github classroom.

For a detailed description of the practical, please read this document.

Assignment 1: Manipulating Bits

Due: March 11, 2021 (23:59:59)

The purpose of this assignment is to become more familiar with bit-level representations of integers and floating point numbers. You’ll do this by solving a series of programming “puzzles.” Many of these puzzles are quite artificial, but you’ll find yourself thinking much more about bits in working your way through them.

For a detailed description of the practical, please read this document.

Assignment 2: Strings in C

Due: March 25, 2021 (23:59:59)

The purpose of this assignment is to become more familiar with Strings in C language and analyzing some long text -- in particular Shakespeare plays.

For a detailed description of the practical, please read this document.

Assignment 3: Heap Management

Due: April 14, 2021 (23:59:59)

In this assignment, you will simulate and conclude why social distancing is critical and gain experience in using dynamic arrays and heap management.

For a detailed description of the practical, please read this document.

Assignment 4: Defusing a Binary Bomb

Due: April 29, 2021 (23:59:59)

The purpose of this assignment is to help you to become familiar with x86-64 instruction set and to understand assembly code representations of C programs.

For a detailed description of the practical, please read this document.

Assignment 5: Buffer Overflow Attacks

Due: May 13, 2021 (23:59:59)

The purpose of this assignment is to help you get familiar with how buffer overflow vulnerabilities are formed, found, exploited and protected.

For a detailed description of the practical, please read this document.

Assignment 6: Understanding Cache Memories

Due: May 28, 2021 (23:59:59)

The purpose of this assignment is to help you understand how cache memories work. Hence, you will implement a cache simulator to mimic the operations on a cache.

For a detailed description of the practical, please read this document.