diff --git a/20211108/bit-operationen.xcf.gz b/20211108/bit-operationen.xcf.gz
new file mode 100644
index 0000000000000000000000000000000000000000..fdfcaa8a11558ca1f16949f9b2de509717148953
Binary files /dev/null and b/20211108/bit-operationen.xcf.gz differ
diff --git a/20211108/blink-0.c b/20211108/blink-0.c
new file mode 100644
index 0000000000000000000000000000000000000000..b0022c681fd1482ed0a6d9fded7bb0a54699de32
--- /dev/null
+++ b/20211108/blink-0.c
@@ -0,0 +1,9 @@
+#include <avr/io.h>
+
+int main (void)
+{
+  DDRD = 0x40;   /* binär: 0100 0000 */
+  PORTD = 0x40;  /* binär: 0100 0000 */
+  while (1);
+  return 0;
+}
diff --git a/20211108/blink-1.c b/20211108/blink-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..6d28dce84f94375094c98479c30a54ace1b2a9d9
--- /dev/null
+++ b/20211108/blink-1.c
@@ -0,0 +1,18 @@
+#include <avr/io.h>
+
+#define F_CPU 16000000l
+#include <util/delay.h>
+
+int main (void)
+{
+  DDRD = 0x01;
+  PORTD |= 0x01;
+  while (1)
+    {
+      _delay_ms (500);
+      PORTD &= ~0x01;
+      _delay_ms (500);
+      PORTD |= 0x01;
+    }
+  return 0;
+}
diff --git a/20211108/blink-3.c b/20211108/blink-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..5268e7977f0f2a99b2005a81a2fa7560dfea481f
--- /dev/null
+++ b/20211108/blink-3.c
@@ -0,0 +1,17 @@
+#include <avr/io.h>
+
+#define F_CPU 16000000
+#include <util/delay.h>
+
+int main (void)
+{
+  DDRD = 0x01;
+  PORTD = 0x01;
+  while (1)
+    {
+      while ((PIND & 0x02) == 0)
+        ; /* just wait */
+      PORTD ^= 0x01;
+    }
+  return 0;
+}
diff --git a/20211108/exploit-1.c b/20211108/exploit-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..226faca541c9d3472cb8038ff3218c56a810bed9
--- /dev/null
+++ b/20211108/exploit-1.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  char name[42];
+  printf ("Ihr Name: ");
+  fflush (stdout);
+  fgets (name, 42, stdin);
+  char buffer[100];
+  snprintf (buffer, 100, "echo \"Hallo, %s!\"", name);
+  system (buffer);
+  return 0;
+}
diff --git a/20211108/exploit-1.txt b/20211108/exploit-1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7716d1c725e85115b1f608b22aa908bfd2063828
--- /dev/null
+++ b/20211108/exploit-1.txt
@@ -0,0 +1,8 @@
+cassini/home/peter/bo/2021ws/hp/20211108> ./exploit-1
+Ihr Name: Peter $(ls -lrt | tail -4)
+Hallo, Peter -rw-r--r-- 1 peter peter     82 Nov  8 13:28 hello.c
+-rwxr-xr-x 1 peter peter  16608 Nov  8 13:28 hello
+-rw-r--r-- 1 peter peter    254 Nov  8 13:32 exploit-1.c
+-rwxr-xr-x 1 peter peter  16888 Nov  8 13:32 exploit-1
+!
+cassini/home/peter/bo/2021ws/hp/20211108>
diff --git a/20211108/main-params-1.c b/20211108/main-params-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..e6e64ba029e1042aff60960fc8b7c3d4d5d8e2e2
--- /dev/null
+++ b/20211108/main-params-1.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+  printf ("argc = %d\n", argc);
+  for (int i = 0; i < argc; i++)
+    printf ("argv[%d] = \"%s\"\n", i, argv[i]);
+  return 0;
+}
diff --git a/20211108/main-params-2.c b/20211108/main-params-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..242aa8abb5f3af0ea60aeba94edb978388ea4c4d
--- /dev/null
+++ b/20211108/main-params-2.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+  printf ("argc = %d\n", argc);
+  for (int i = 0; argv[i]; i++)
+    printf ("argv[%d] = \"%s\"\n", i, argv[i]);
+  return 0;
+}
diff --git a/20211108/main-params-3.c b/20211108/main-params-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..8fa64e701d9257dae4040a694ec651a054657cf4
--- /dev/null
+++ b/20211108/main-params-3.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+  printf ("argc = %d\n", argc);
+  int i = 0;
+  while (*argv)
+    printf ("argv[%d] = \"%s\"\n", i++, *argv++);
+  return 0;
+}
diff --git a/20211108/main-params-4.c b/20211108/main-params-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..cdf917f06bccfe1e74f19d9d078ee915f5b3e557
--- /dev/null
+++ b/20211108/main-params-4.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+void remove_first_parameter (int argc, char **argv)
+{
+  argc--;
+  argv++;
+}
+
+int main (int argc, char **argv)
+{
+  remove_first_parameter (argc, argv);
+  printf ("argc = %d\n", argc);
+  int i = 0;
+  while (*argv)
+    printf ("argv[%d] = \"%s\"\n", i++, *argv++);
+  return 0;
+}
diff --git a/20211108/main-params-5.c b/20211108/main-params-5.c
new file mode 100644
index 0000000000000000000000000000000000000000..2b24c0956068f7d93815bf95234804b3d9467c26
--- /dev/null
+++ b/20211108/main-params-5.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+void remove_first_parameter (int *argc, char ***argv)
+{
+  *argc--;
+  *argv++;
+}
+
+int main (int argc, char **argv)
+{
+  remove_first_parameter (&argc, &argv);
+  printf ("argc = %d\n", argc);
+  int i = 0;
+  while (*argv)
+    printf ("argv[%d] = \"%s\"\n", i++, *argv++);
+  return 0;
+}
diff --git a/20211108/main-params-6.c b/20211108/main-params-6.c
new file mode 100644
index 0000000000000000000000000000000000000000..b2fa13993df64786fe901f77b64e6a9d01ed308b
--- /dev/null
+++ b/20211108/main-params-6.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+void remove_first_parameter (int *argc, char ***argv)
+{
+  (*argc)--;
+  (*argv)++;
+}
+
+int main (int argc, char **argv)
+{
+  remove_first_parameter (&argc, &argv);
+  printf ("argc = %d\n", argc);
+  int i = 0;
+  while (*argv)
+    printf ("argv[%d] = \"%s\"\n", i++, *argv++);
+  return 0;
+}
diff --git a/20211108/string-ops-1.c b/20211108/string-ops-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..dd05111f79e0573d616522593362f6f93beb89e7
--- /dev/null
+++ b/20211108/string-ops-1.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char hello[] = "Hello, world!\n";
+
+  printf ("%s\n", hello);
+  printf ("%zd\n", strlen (hello));
+
+  printf ("%s\n", hello + 7);
+  printf ("%zd\n", strlen (hello + 7));
+
+  hello[5] = 0;
+  printf ("%s\n", hello);
+  printf ("%zd\n", strlen (hello));
+
+  return 0;
+}
diff --git a/20211108/string-ops-10.c b/20211108/string-ops-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..e1c1e84fba7eade92c2a0c818104de31b24c5f61
--- /dev/null
+++ b/20211108/string-ops-10.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char buffer[100] = "";
+  snprintf (buffer, 100, "Die Antwort lautet: %d", 42);
+  printf ("%s\n", buffer);
+
+  char *answer = strstr (buffer, "Antwort");
+  printf ("%s\n", answer);
+  printf ("found at: %zd\n", answer - buffer);
+
+  return 0;
+}
diff --git a/20211108/string-ops-2.c b/20211108/string-ops-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..e139787faa20e518d8d2c2ec02f2a765d3181455
--- /dev/null
+++ b/20211108/string-ops-2.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *anton = "Anton";
+  char *klein_anton = "anton";
+  char *zacharias = "Zacharias";
+
+  printf ("%d\n", strcmp (klein_anton, zacharias));
+  printf ("%d\n", strcmp (zacharias, klein_anton));
+  printf ("%d\n", strcmp (klein_anton, klein_anton));
+
+  char buffer[100] = "Huber ";
+  strncat (buffer, anton, 99);
+  printf ("%s\n", buffer);
+
+  return 0;
+}
diff --git a/20211108/string-ops-3.c b/20211108/string-ops-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..89e4cedd8edff17016ecb65bd257214c221085d2
--- /dev/null
+++ b/20211108/string-ops-3.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *anton = "Anton";
+  char *zacharias = "Zacharias";
+
+  if (anton < zacharias)
+    printf ("%s vor %s\n", anton, zacharias);
+  else if (anton > zacharias)
+    printf ("%s nach %s\n", anton, zacharias);
+  else
+    printf ("%s = %s\n", anton, zacharias);
+
+  return 0;
+}
diff --git a/20211108/string-ops-4.c b/20211108/string-ops-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..147437d5bcdf9468cb891dcc4b908538caf9c4cf
--- /dev/null
+++ b/20211108/string-ops-4.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *zacharias = "Zacharias";
+  char *anton = "Anton";
+
+  if (anton < zacharias)
+    printf ("%s vor %s\n", anton, zacharias);
+  else if (anton > zacharias)
+    printf ("%s nach %s\n", anton, zacharias);
+  else
+    printf ("%s = %s\n", anton, zacharias);
+
+  return 0;
+}
diff --git a/20211108/string-ops-5.c b/20211108/string-ops-5.c
new file mode 100644
index 0000000000000000000000000000000000000000..2f1d80df60c8a8d1a5b7777eb6829bcaeae7f591
--- /dev/null
+++ b/20211108/string-ops-5.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <string.h>
+
+char *zacharias = "Zacharias";
+char *anton = "Anton";
+
+int main (void)
+{
+  if (anton < zacharias)
+    printf ("%s vor %s\n", anton, zacharias);
+  else if (anton > zacharias)
+    printf ("%s nach %s\n", anton, zacharias);
+  else
+    printf ("%s = %s\n", anton, zacharias);
+  return 0;
+}
diff --git a/20211108/string-ops-6.c b/20211108/string-ops-6.c
new file mode 100644
index 0000000000000000000000000000000000000000..75a187146beef3be07c005400af98b80d56c2887
--- /dev/null
+++ b/20211108/string-ops-6.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <string.h>
+
+char *anton = "Anton";
+char *zacharias = "Zacharias";
+
+int main (void)
+{
+  if (anton < zacharias)
+    printf ("%s vor %s\n", anton, zacharias);
+  else if (anton > zacharias)
+    printf ("%s nach %s\n", anton, zacharias);
+  else
+    printf ("%s = %s\n", anton, zacharias);
+  return 0;
+}
diff --git a/20211108/string-ops-7.c b/20211108/string-ops-7.c
new file mode 100644
index 0000000000000000000000000000000000000000..46689eafb14487d42164ccf89e6743586423ee18
--- /dev/null
+++ b/20211108/string-ops-7.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *huber_anton = "Huber" " " "Anton";
+  printf ("%s\n", huber_anton);
+  return 0;
+}
diff --git a/20211108/string-ops-8.c b/20211108/string-ops-8.c
new file mode 100644
index 0000000000000000000000000000000000000000..4e81814b8cd569ebdce703a9d2d80057ab69db80
--- /dev/null
+++ b/20211108/string-ops-8.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *huber_anton = "Huber" + " " + "Anton";
+  printf ("%s\n", huber_anton);
+  return 0;
+}
diff --git a/20211108/string-ops-9.c b/20211108/string-ops-9.c
new file mode 100644
index 0000000000000000000000000000000000000000..953459b5608f9d82cc142879bf218d75b7d1c858
--- /dev/null
+++ b/20211108/string-ops-9.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <string.h>
+
+int main (void)
+{
+  char *huber_anton = "Huber" + ("Anton" - " ");
+  printf ("%s\n", huber_anton);
+  return 0;
+}
diff --git a/20211108/write-program-1.c b/20211108/write-program-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..157cdd77270626b002d45f7c1c0f26db742bfff0
--- /dev/null
+++ b/20211108/write-program-1.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <errno.h>
+#include <error.h>
+
+int main (void)
+{
+  FILE *f = fopen ("hello.c", "w");
+  if (!f)
+    error (errno, errno, "cannot open file");
+  fprintf (f, "#include <stdio.h>\n"
+              "\n"
+              "int main (void)\n"
+              "{\n"
+              "  printf ("Hello, world!\n");\n"
+              "  return 0;\n"
+              "}\n");
+  if (errno)
+    error (errno, errno, "cannot write to file");
+  fclose (f);
+  if (errno)
+    error (errno, errno, "cannot close file");
+  return 0;
+}
diff --git a/20211108/write-program-2.c b/20211108/write-program-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..70a60330007f6f82dd1dca747ef44023e0d35c17
--- /dev/null
+++ b/20211108/write-program-2.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <errno.h>
+#include <error.h>
+
+int main (void)
+{
+  FILE *f = fopen ("hello.c", "w");
+  if (!f)
+    error (errno, errno, "cannot open file");
+  fprintf (f, "#include <stdio.h>\n"
+              "\n"
+              "int main (void)\n"
+              "{\n"
+              "  printf (\"Hello, world!\n\");\n"
+              "  return 0;\n"
+              "}\n");
+  if (errno)
+    error (errno, errno, "cannot write to file");
+  fclose (f);
+  if (errno)
+    error (errno, errno, "cannot close file");
+  return 0;
+}
diff --git a/20211108/write-program-3.c b/20211108/write-program-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..37fef21f45b13f89e164d3d2022c1332275b9bed
--- /dev/null
+++ b/20211108/write-program-3.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <errno.h>
+#include <error.h>
+
+int main (void)
+{
+  FILE *f = fopen ("hello.c", "w");
+  if (!f)
+    error (errno, errno, "cannot open file");
+  fprintf (f, "#include <stdio.h>\n"
+              "\n"
+              "int main (void)\n"
+              "{\n"
+              "  printf (\"Hello, world!\\n\");\n"
+              "  return 0;\n"
+              "}\n");
+  if (errno)
+    error (errno, errno, "cannot write to file");
+  fclose (f);
+  if (errno)
+    error (errno, errno, "cannot close file");
+  return 0;
+}
diff --git a/20211108/write-program-4.c b/20211108/write-program-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..9b37afdc16a8b6920809a67b6391f89e59755759
--- /dev/null
+++ b/20211108/write-program-4.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <errno.h>
+#include <error.h>
+#include <stdlib.h>
+
+int main (void)
+{
+  FILE *f = fopen ("hello.c", "w");
+  if (!f)
+    error (errno, errno, "cannot open file");
+  fprintf (f, "#include <stdio.h>\n"
+              "\n"
+              "int main (void)\n"
+              "{\n"
+              "  printf (\"Hello, world!\\n\");\n"
+              "  return 0;\n"
+              "}\n");
+  if (errno)
+    error (errno, errno, "cannot write to file");
+  fclose (f);
+  if (errno)
+    error (errno, errno, "cannot close file");
+  system ("gcc -Wall -O hello.c -o hello");
+  system ("./hello");
+  return 0;
+}