Tools
This page collects documentation of software tools used in CS 240. General tools are introduced in the first lab. The rest are introduced in later lab and class meetings.
- wx appliance
- GNU/Linux operating system and Bash shell
- Emacs text editor
- Mercurial (hg) version control system
- C programming language, GNU C Compiler (GCC), and Make
- GNU Debugger (GDB), Valgrind, etc.
- x86 instruction set architecture
We provide and support two computing environments for CS 240. Unlike your earlier CS courses, CS 240 is a low-level systems course where the low-level system details matter. It is typically difficult, error-prone, or impossible to complete CS 240 assignments elsewhere1 (e.g., on Mac or Windows). We do not offer support or guarantees for environments other than ours. Do not waste time trying to use a different environment.
CS 240 Computing Environments
We provide all CS 240 software tools on two fully-supported computing environments using the GNU/Linux operating system:
- CS Linux machines are available in the SCI microfocus lab and SCI 173.
- A CS account is required. If you do not already have one (you might know it as “tempest” or access it with Fetch or WinSCP, etc.), please request an account while on campus.
- The wx appliance is a self-contained GNU/Linux environment for your computer.
GNU/Linux and the Command Line
Reference for the GNU/Linux command-line environment on CS Linux machines and the wx appliance.
- Unix Skills (Start here! Includes remote login with
ssh
. Ignoredrop
.), Scott Anderson, Wellesley College - linuxsurvival.com: non-flashy interactive tutorial for the command line
- Introduction to Unix and the X Window System, Scott Anderson, Wellesley College
- linuxcommand.org
- Bash commands, Ruth Anderson, University of Washington
- Some useful Unix commands, Tia Newhall, Swarthmore College
- Duane’s Incredibly Brief Intro to Unix, Duane Bailey, Williams College
- Linux tutorial and gdb notes, University of Washington CSE
- Unix Programming Tools
Emacs
Reference for the Emacs text editor.
- Emacs Basics (Start here!)
- “Real Programmers…”
- Reference Card (pdf)
- Tour
- Manual
- Emacs Wiki
- vim and evil
Mercurial
- Mercurial (hg) and Bitbucket: CS 240-specific version control guide with links to more.
C Tools
Reference for the C programming language, the GNU C Compiler (GCC), and the Make system for automating compilation.
- The C Programming Language (a.k.a. K&R), Kernighan and Ritchie, classic book
- Stanford CS Library C resources
- C resources, Tia Newhall, Swarthmore College
- Duane’s Incredibly Brief Introduction to the C Programming Language, Duane Bailey, Williams College
- GCC manual (Run
gcc --version
to determine what version you have.)- Note that
gcc
installed on Macs via Xcode is not actually GCC.
- Note that
- Make manual (not easy reading)
Debugging and Disassembly
Reference for the GNU Debugger (GDB), the Valgrind memory error detector, and other tools for debugging and disassembly.
- GDB manual
- GDB reference sheet (pdf, txt)
- Debugging and disassembly tools, Tia Newhall, Swarthmore College
- Valgrind manual
man objdump
man strings
x86
Detailed reference on the x86 assembly language and instruction set architecture. CSAPP contains good basic reference.
- x86asm.net
- x86 manuals from Intel
- x86 manuals from AMD (see manuals section)
- WikiBook
CSAPP textbook resources
Similar courses with good resources
-
If you already use Linux on your personal computer, I am happy to share the list of tools we need or point you to our RPM package repository, but I will not have time to help you figure out how those map to packages on Linux distributions other than Fedora. ↩