[SPCA] Update code imports

This commit is contained in:
2026-01-22 07:35:37 +01:00
parent f92b002524
commit 5dffd7391c
18 changed files with 28 additions and 30 deletions

View File

@@ -1,7 +1,7 @@
\subsection{Basics}
\texttt{C} uses a very similar syntax as many other programming languages, like \texttt{Java}, \texttt{JavaScript} and many more\dots
to be precise, it is \textit{them} that use the \texttt{C} syntax, not the other way around. So:
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{00_intro.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/00_intro.c}
In \texttt{C} we are referring to the implementation of a function as a \bi{(function) definition} (correspondingly, \textit{variable definition}, if the variable is initialized)
and to the definition of the function signature (or variables, without initializing them) as the \bi{(function) declaration} (or, correspondingly, \textit{variable declaration}).
@@ -9,4 +9,4 @@ and to the definition of the function signature (or variables, without initializ
\texttt{C} code is usuallt split into the source files, ending in \texttt{.c} (where the local functions and variables are declared, as well as all function definitions)
and the header files, ending in \texttt{.h}, usually sharing the filename of the source file, where the external declarations are defined.
By convention, no definition of functions are in the \texttt{.h} files, and neither variables, but there is nothing preventing you from putting them there.
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{01_func.h}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/01_func.h}

View File

@@ -9,6 +9,6 @@ And because the labels are (as in Assembly) simply skipped over during execution
We can also use \texttt{continue} and \texttt{break} statements similarly to \texttt{Java}, they do not however accept labels.
(Reminder: \texttt{continue} skips the loop body and goes to the next iteration)
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{01_func.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/01_func.c}

View File

@@ -3,7 +3,7 @@
We have already seen a few examples for how \texttt{C} handles declarations.
In concept they are similar (and scoping works the same) to most other \texttt{C}-like programming languages, including \texttt{Java}.
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{02_declarations.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/02_declarations.c}
\newpage
A peculiarity of \texttt{C} is that the bit-count is not defined by the language, but rather the hardware it is compiled for.

View File

@@ -5,4 +5,4 @@
Unlike some other programming languages, arrays are \bi{not} dynamic length.
The below snippet includes already some pointer arithmetic tricks. The variable \texttt{data} is a pointer to the first element of the array.
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{03_arrays.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/03_arrays.c}

View File

@@ -3,4 +3,4 @@
with length of the array $n + 1$ (where $n$ is the number of characters of the string).
The extra element is the termination character, called the \texttt{null character}, denoted \verb|\0|.
To determine the actual length of the string (as it may be padded), we can use \verb|strnlen(str, maxlen)| from \texttt{string.h}
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{04_strings.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/04_strings.c}

View File

@@ -11,7 +11,7 @@ When a procedure returns, the stack frame is deallocated and any necessary clean
Of note is that if you simply declare a pointer using \texttt{type * p;} you will get different memory addresses every time.
The (Linux)-Kernel randomizes the address space to prevent some common exploits.
\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{05_pointers.c}
\inputcodewithfilename{c}{}{code-examples/00_c/00_basics/05_pointers.c}
\newpage
\begin{scriptsize}

View File

@@ -10,7 +10,7 @@ Be wary of including files twice, as the preprocessor will recursively include a
The \lC\ preprocessor gives us what are called \texttt{preprocessor macros}, which have the format \verb|#define NAME SUBSTITUTION|.
\rmvspace
\inputcodewithfilename{c}{code-examples/00_c/01_preprocessor/}{00_macros.c}
\inputcodewithfilename{c}{}{code-examples/00_c/01_preprocessor/00_macros.c}
To avoid issues with semicolons at the end of preprocessor macros that wrap statements that cannot end in semicolons, we can use a concept called semicolon swallowing.
For that, we wrap the statements in a \texttt{do \dots\ while(0)} loop, which is removed by the compiler on compile, also taking with it the semicolon.

View File

@@ -3,7 +3,7 @@ In comparison to most other languages, \lC\ does not feature automatic memory ma
This of course has both advantages and disadvantages.
\rmvspace
\inputcodewithfilename{c}{code-examples/00_c/02_memory/}{00_memory.c}
\inputcodewithfilename{c}{}{code-examples/00_c/02_memory/00_memory.c}
\drmvspace
Notably, the argument \texttt{size\_t sz} for \texttt{malloc}, \texttt{calloc} and \texttt{realloc} is an \texttt{unsigned} integer of some size
@@ -15,7 +15,7 @@ you get undefined behaviour.
\warn{Memory corruption} There are many ways to corrupt memory in \lC. The below code shows off a few of them:
\rmvspace
\inputcodewithfilename{c}{code-examples/00_c/02_memory/}{01_mem-corruption.c}
\inputcodewithfilename{c}{}{code-examples/00_c/02_memory/01_mem-corruption.c}
\drmvspace
\warn{Memory leaks} If we allocate memory, but never free it, we use more and more memory (old memory is inaccessible)

View File

@@ -3,4 +3,4 @@
Variadic functions take a variable number of arguments and use the \texttt{...} syntax in \lC.
A notable example of such a function is \texttt{printf}
\inputcodewithfilename{c}{code-examples/00_c/03_others/}{00_variadic.c}
\inputcodewithfilename{c}{}{code-examples/00_c/03_others/00_variadic.c}

View File

@@ -23,7 +23,7 @@ There are 2 ways to do this:
For example, consider this code:
\inputcodewithfilename{c}{code-examples/00_c/05_vulnerabilities/}{01_buffer_overflow_echo.c}
\inputcodewithfilename{c}{}{code-examples/00_c/05_vulnerabilities/01_buffer_overflow_echo.c}
This is a problem, since \texttt{echo} may be compiled to something similar to this:
@@ -44,4 +44,4 @@ Return-oriented Programming is a more sophisticated exploit, which does not rely
The key idea is: Overwrite return addresses and jump to \textit{specific} machine instruction sequences \textit{already present} in process memory.
% This is only covered in the attack-lab exercise, not the slides.
% This is only covered in the attack-lab exercise, not the slides.