Resources

Contents

Textbooks

There is no one textbook that covers all the unit topics, but the unit schedule lists recommended readings on various topics.

What you do need is access to a good C textbook – see here. C is a fairly small language, but some of the details relating to security are subtle.

An operating systems textbook will also be helpful – see here.

As noted on the welcome page, it’s assumed you are already familiar with a procedural or OO programming language. It’s also advisable to have completed CITS2002 Systems Programming, which covers operating systems and C programming, as well as the basics of using the Linux command-line. (For further information, see the unit FAQ, under “Do I need to have completed CITS2002 before enrolling in CITS3007?”.)

If you are after textbooks which cover the recommended prior knowledge, the following sections give some suggestions.

The Linux command line

The content of this unit assumes you understand how to navigate a Unix-like operating system using the command-line, perform basic file operations, and build C projects using gcc and GNU Make.

(If you’ve not used the command-line interface of a Unix-like operating system much, you should get familiar with it. Besides being useful for this unit, often in industry when working with cloud VMs, the command-line is the only way you have of accessing them.)

One good tutorial on the Linux command-line is

and there’s also a free PDF guide to using the Linux command line: The Linux Command Line, by William Shotts.

The recommended editor for this unit is vim, though if you are already familiar with Emacs you are welcome to use that instead. You will not always be able to use a GUI editor such as Visual Studio Code – the configuration details we give for some debuggers and static analysers work only with vim.

C programming

The content of this unit assumes you already have a basic working knowledge of the C programming language. You will need to have access to a good C textbook in order to do well in this unit. YouTube videos or online tutorials will not be sufficient.

The following is an acceptable C textbook which covers the C11 standard. (It actually uses the C17 standard, but the differences for our purposes are minimal.)

The textbooks recommended for CITS2002 Systems Programming are also suitable. There is no need to use the Seacord text just because I have suggested it – you should pick a textbook that you feel comfortable with.

If you are already familiar with the C99 standard, the Wikipedia page on the C11 standard provides a good summary of the changes. Two of the most useful features introduced in C11 (for our purposes) are

static assertions:
These are an improvement on preprocessor-based assertions using #if and #error, because they can make use of information known only by the compiler (as opposed to the preprocessor) – for instance, the result of sizeof and alignof expressions.
 
the atomic operations library:
This allows some race conditions to be avoided.
 

Operating systems

The content of this unit assumes you already have a basic working knowledge of operating system fundamentals. It is recommended you have access to a good operating systems textbook in order to do well in this unit.

The following are acceptable operating systems textbooks:


Lectures

Lecture slides

Lecture slides will be published here as the semester progresses.


Labs

Labs begin in week 2. Worksheets for the labs will be published on this page as the semester progresses. The lab worksheets contain practical exercises to reinforce concepts covered in lectures, as well as occasional links to Moodle self-paced quizzes, or problems for you to attempt in-class. Some worksheets may include optional “challenge” exercises or problems for students seeking additional challenges – these are not compulsory, but are provided for your interest.

Any solutions to problems in a lab worksheet will normally be published the following week, to allow students time to work through lab problems independently. Solutions to any “challenge” problems are typically not published, but you are welcome to discuss your solutions with the lab facilitators or the unit coordinator if you have attempted them.

Worksheets