This repository contains a series of projects and exercises designed to provide hands-on experience with various aspects of low-level programming in C. The projects cover a wide range of topics, including basic syntax, control structures, data structures, memory management, and more. Each directory within this repository focuses on a specific topic and contains relevant scripts, tasks, and resources to help you understand and practice the concepts.
- 0x00-hello_world
- 0x01-variables_if_else_while
- 0x02-functions_nested_loops
- 0x03-debugging
- 0x04-more_functions_nested_loops
- 0x05-pointers_arrays_strings
- 0x06-pointers_arrays_strings
- 0x07-pointers_arrays_strings
- 0x08-recursion
- 0x09-static_libraries
- 0x0A-argc_argv
- 0x0B-malloc_free
- 0x0C-more_malloc_free
- 0x0D-preprocessor
- 0x0E-structures_typedef
- 0x0F-function_pointers
- 0x10-variadic_functions
- 0x12-singly_linked_lists
- 0x13-more_singly_linked_lists
- 0x14-bit_manipulation
- 0x15-file_io
- 0x17-doubly_linked_lists
- 0x18-dynamic_libraries
- 0x1A-hash_tables
- 0x1C-makefiles
- 0x1E-search_algorithms
This directory is an introduction to the C programming language. It covers the basics of C, including compiling, assembling, and linking programs, as well as writing simple programs that print text and determine the size of data types.
This directory focuses on variables, conditional statements, and loops in C. It covers how to declare and use variables, how to write conditional statements using if
, else
, and else if
, and how to use loops such as while
and for
.
This directory covers functions and nested loops in C. It includes how to define and call functions, how to pass arguments to functions, and how to use nested loops to perform complex iterations.
This directory focuses on debugging techniques in C. It covers how to use debugging tools such as gdb
, how to read and interpret error messages, and how to fix common programming errors.
This directory continues the exploration of functions and nested loops in C. It includes more advanced topics such as recursion, function pointers, and nested loop optimizations.
This directory introduces pointers, arrays, and strings in C. It covers how to use pointers to access and manipulate data, how to work with arrays, and how to handle strings effectively.
This directory continues the exploration of pointers, arrays, and strings in C. It includes more advanced topics such as pointer arithmetic, multi-dimensional arrays, and string manipulation functions.
This directory further explores pointers, arrays, and strings in C. It covers more complex topics such as dynamic memory allocation, memory management, and advanced string operations.
This directory focuses on recursion in C. It covers how to write recursive functions, how to solve problems using recursion, and how to optimize recursive algorithms.
This directory covers static libraries in C. It includes how to create and use static libraries, how to compile and link them with programs, and the advantages and disadvantages of using static libraries.
This directory focuses on command-line arguments in C. It covers how to use argc
and argv
to handle command-line input, how to parse and validate arguments, and how to use arguments in programs.
This directory covers dynamic memory allocation in C. It includes how to use malloc
, calloc
, realloc
, and free
to manage memory, how to handle memory allocation errors, and how to avoid memory leaks.
This directory continues the exploration of dynamic memory allocation in C. It includes more advanced topics such as memory pools, custom memory allocators, and memory debugging techniques.
This directory focuses on the C preprocessor. It covers how to use preprocessor directives such as #include
, #define
, and #ifdef
, how to write macros, and how to use conditional compilation.
This directory covers structures and typedef in C. It includes how to define and use structures, how to use typedef to create custom data types, and how to work with complex data structures.
This directory focuses on function pointers in C. It covers how to declare and use function pointers, how to pass function pointers as arguments, and how to use function pointers for callback functions and dynamic dispatch.
This directory covers variadic functions in C. It includes how to define and use variadic functions, how to use the stdarg
library to handle variable arguments, and how to write flexible and reusable functions.
This directory focuses on singly linked lists in C. It covers how to define and use singly linked lists, how to traverse and manipulate them, and how to apply these concepts to solve problems effectively.
This directory continues the exploration of singly linked lists in C. It includes more advanced topics such as circular linked lists, linked list sorting, and linked list optimization techniques.
This directory covers bit manipulation in C. It includes how to use bitwise operators, how to perform bit-level operations, and how to solve problems using bit manipulation techniques.
This directory focuses on file input/output (I/O) in C. It covers how to open, read, write, and close files, how to use file descriptors, and how to handle errors during file operations.
This directory covers doubly linked lists in C. It includes how to define and use doubly linked lists, how to traverse and manipulate them, and how to apply these concepts to solve problems effectively.
This directory focuses on dynamic libraries in C. It covers how to create and use dynamic libraries, how to compile and link them with programs, and the advantages and disadvantages of using dynamic libraries.
This directory covers hash tables in C. It includes how to implement hash tables, how to handle collisions, and how to use hash tables for efficient data storage and retrieval.
This directory focuses on Makefiles, a tool used to manage the build process of a project. It covers how to write Makefiles, how to define rules and dependencies, and how to use variables and functions in Makefiles.
This directory covers search algorithms in C. It includes how to implement and use various search algorithms such as linear search, binary search, and hash-based search, and how to analyze their performance.
- Ensure you have the necessary permissions to execute the scripts and commands.
- Test the scripts and commands in a safe environment to avoid any unintended changes to your system.
- Refer to the resources provided in each directory for a deeper understanding of each concept and its practical applications.
- Regularly review and update your skills to maintain proficiency in low-level programming practices.