This repository contains coursework and programming assignments from CS354 at the University of Wisconsin–Madison. The course focuses on understanding how computers execute programs at the hardware level, including concepts such as memory management, x86 assembly, C programming, and operating system fundamentals.
- Low-level programming in C and x86 assembly
- Memory hierarchy and management (stack, heap, pointers)
- System calls and process control
- Debugging with
gdbandvalgrind - Implementing core operating system behaviors
- Binary Bomb Lab: Reverse-engineered an executable using
gdband disassembled x86 to defuse logical "bombs". - x86 Assembly Exercises: Learned calling conventions, control flow, and register manipulation by writing assembly code from scratch.
- Memory Allocation: Reimplemented simplified versions of
malloc()andfree()to manage dynamic memory with manual bookkeeping. - Shell Implementation: Created a basic Unix shell in C, supporting command parsing, background processes, and signal handling.
- Pointer and Stack Exercises: Practiced pointer arithmetic, function call frames, and stack organization.
- Used tools like
gdb,valgrind, andobjdumpto analyze memory leaks, stack frames, and low-level program flow.
- Gained a deep understanding of how software interacts with hardware.
- Built confidence in debugging and system-level programming.
- Learned to reason about runtime behavior, memory safety, and performance at a low level.
- C (GCC)
- x86 Assembly
gdb,valgrind,make- Linux/Unix terminal environment
x86/: Assembly exercises and disassembly analysis.pointers/,memory/,stack/: Projects focused on memory and stack operations in C.malloc/: Manual memory allocator project.shell/: Custom shell implementation.bomb/: Reverse engineering and debugging exercises.
This repository is a reflection of hands-on learning in systems programming. Each directory contains source code and reports relevant to the specific topic.