diff --git a/.gitignore b/.gitignore index 5006d0b8..5d1af41f 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ dkms.conf *.zip *_out + +# Python compiled files +__pycache__ diff --git a/laborator/content/linking/00-vars-obs/.gitignore b/laborator/content/etapele-compilarii/00-vars-obs/.gitignore similarity index 100% rename from laborator/content/linking/00-vars-obs/.gitignore rename to laborator/content/etapele-compilarii/00-vars-obs/.gitignore diff --git a/laborator/content/linking/00-vars-obs/Makefile b/laborator/content/etapele-compilarii/00-vars-obs/Makefile similarity index 100% rename from laborator/content/linking/00-vars-obs/Makefile rename to laborator/content/etapele-compilarii/00-vars-obs/Makefile diff --git a/laborator/content/linking/00-vars-obs/hidden.c b/laborator/content/etapele-compilarii/00-vars-obs/hidden.c similarity index 100% rename from laborator/content/linking/00-vars-obs/hidden.c rename to laborator/content/etapele-compilarii/00-vars-obs/hidden.c diff --git a/laborator/content/linking/00-vars-obs/main.c b/laborator/content/etapele-compilarii/00-vars-obs/main.c similarity index 100% rename from laborator/content/linking/00-vars-obs/main.c rename to laborator/content/etapele-compilarii/00-vars-obs/main.c diff --git a/laborator/content/linking/00-vars-obs/ops.h b/laborator/content/etapele-compilarii/00-vars-obs/ops.h similarity index 100% rename from laborator/content/linking/00-vars-obs/ops.h rename to laborator/content/etapele-compilarii/00-vars-obs/ops.h diff --git a/laborator/content/linking/00-vars-obs/plain.c b/laborator/content/etapele-compilarii/00-vars-obs/plain.c similarity index 100% rename from laborator/content/linking/00-vars-obs/plain.c rename to laborator/content/etapele-compilarii/00-vars-obs/plain.c diff --git a/laborator/content/linking/01-one-diy/a-dynamic/.gitignore b/laborator/content/etapele-compilarii/01-one-diy/a-dynamic/.gitignore similarity index 100% rename from laborator/content/linking/01-one-diy/a-dynamic/.gitignore rename to laborator/content/etapele-compilarii/01-one-diy/a-dynamic/.gitignore diff --git a/laborator/content/linking/01-one-diy/a-dynamic/name.c b/laborator/content/etapele-compilarii/01-one-diy/a-dynamic/name.c similarity index 100% rename from laborator/content/linking/01-one-diy/a-dynamic/name.c rename to laborator/content/etapele-compilarii/01-one-diy/a-dynamic/name.c diff --git a/laborator/content/linking/01-one-diy/b-static/.gitignore b/laborator/content/etapele-compilarii/01-one-diy/b-static/.gitignore similarity index 100% rename from laborator/content/linking/01-one-diy/b-static/.gitignore rename to laborator/content/etapele-compilarii/01-one-diy/b-static/.gitignore diff --git a/laborator/content/linking/01-one-diy/b-static/name.c b/laborator/content/etapele-compilarii/01-one-diy/b-static/name.c similarity index 100% rename from laborator/content/linking/01-one-diy/b-static/name.c rename to laborator/content/etapele-compilarii/01-one-diy/b-static/name.c diff --git a/laborator/content/linking/01-one-diy/c-standalone/.gitignore b/laborator/content/etapele-compilarii/01-one-diy/c-standalone/.gitignore similarity index 100% rename from laborator/content/linking/01-one-diy/c-standalone/.gitignore rename to laborator/content/etapele-compilarii/01-one-diy/c-standalone/.gitignore diff --git a/laborator/content/linking/01-one-diy/c-standalone/name.c b/laborator/content/etapele-compilarii/01-one-diy/c-standalone/name.c similarity index 100% rename from laborator/content/linking/01-one-diy/c-standalone/name.c rename to laborator/content/etapele-compilarii/01-one-diy/c-standalone/name.c diff --git a/laborator/content/linking/01-one-diy/c-standalone/puts.asm b/laborator/content/etapele-compilarii/01-one-diy/c-standalone/puts.asm similarity index 100% rename from laborator/content/linking/01-one-diy/c-standalone/puts.asm rename to laborator/content/etapele-compilarii/01-one-diy/c-standalone/puts.asm diff --git a/laborator/content/linking/01-one-diy/c-standalone/start.asm b/laborator/content/etapele-compilarii/01-one-diy/c-standalone/start.asm similarity index 100% rename from laborator/content/linking/01-one-diy/c-standalone/start.asm rename to laborator/content/etapele-compilarii/01-one-diy/c-standalone/start.asm diff --git a/laborator/content/linking/01-one-tut/a-dynamic/.gitignore b/laborator/content/etapele-compilarii/01-one-tut/a-dynamic/.gitignore similarity index 100% rename from laborator/content/linking/01-one-tut/a-dynamic/.gitignore rename to laborator/content/etapele-compilarii/01-one-tut/a-dynamic/.gitignore diff --git a/laborator/content/linking/01-one-tut/a-dynamic/Makefile b/laborator/content/etapele-compilarii/01-one-tut/a-dynamic/Makefile similarity index 100% rename from laborator/content/linking/01-one-tut/a-dynamic/Makefile rename to laborator/content/etapele-compilarii/01-one-tut/a-dynamic/Makefile diff --git a/laborator/content/linking/01-one-tut/a-dynamic/hello.c b/laborator/content/etapele-compilarii/01-one-tut/a-dynamic/hello.c similarity index 100% rename from laborator/content/linking/01-one-tut/a-dynamic/hello.c rename to laborator/content/etapele-compilarii/01-one-tut/a-dynamic/hello.c diff --git a/laborator/content/linking/01-one-tut/b-static/.gitignore b/laborator/content/etapele-compilarii/01-one-tut/b-static/.gitignore similarity index 100% rename from laborator/content/linking/01-one-tut/b-static/.gitignore rename to laborator/content/etapele-compilarii/01-one-tut/b-static/.gitignore diff --git a/laborator/content/linking/01-one-tut/b-static/Makefile b/laborator/content/etapele-compilarii/01-one-tut/b-static/Makefile similarity index 100% rename from laborator/content/linking/01-one-tut/b-static/Makefile rename to laborator/content/etapele-compilarii/01-one-tut/b-static/Makefile diff --git a/laborator/content/linking/01-one-tut/b-static/hello.c b/laborator/content/etapele-compilarii/01-one-tut/b-static/hello.c similarity index 100% rename from laborator/content/linking/01-one-tut/b-static/hello.c rename to laborator/content/etapele-compilarii/01-one-tut/b-static/hello.c diff --git a/laborator/content/linking/01-one-tut/c-standalone/.gitignore b/laborator/content/etapele-compilarii/01-one-tut/c-standalone/.gitignore similarity index 100% rename from laborator/content/linking/01-one-tut/c-standalone/.gitignore rename to laborator/content/etapele-compilarii/01-one-tut/c-standalone/.gitignore diff --git a/laborator/content/linking/01-one-tut/c-standalone/Makefile b/laborator/content/etapele-compilarii/01-one-tut/c-standalone/Makefile similarity index 100% rename from laborator/content/linking/01-one-tut/c-standalone/Makefile rename to laborator/content/etapele-compilarii/01-one-tut/c-standalone/Makefile diff --git a/laborator/content/linking/01-one-tut/c-standalone/hello.c b/laborator/content/etapele-compilarii/01-one-tut/c-standalone/hello.c similarity index 100% rename from laborator/content/linking/01-one-tut/c-standalone/hello.c rename to laborator/content/etapele-compilarii/01-one-tut/c-standalone/hello.c diff --git a/laborator/content/linking/01-one-tut/c-standalone/puts.asm b/laborator/content/etapele-compilarii/01-one-tut/c-standalone/puts.asm similarity index 100% rename from laborator/content/linking/01-one-tut/c-standalone/puts.asm rename to laborator/content/etapele-compilarii/01-one-tut/c-standalone/puts.asm diff --git a/laborator/content/linking/01-one-tut/c-standalone/start.asm b/laborator/content/etapele-compilarii/01-one-tut/c-standalone/start.asm similarity index 100% rename from laborator/content/linking/01-one-tut/c-standalone/start.asm rename to laborator/content/etapele-compilarii/01-one-tut/c-standalone/start.asm diff --git a/laborator/content/linking/02-multiple-diy/.gitignore b/laborator/content/etapele-compilarii/02-multiple-diy/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-diy/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-diy/.gitignore diff --git a/laborator/content/linking/02-multiple-diy/a-no-header/.gitignore b/laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-diy/a-no-header/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/.gitignore diff --git a/laborator/content/linking/02-multiple-diy/a-no-header/div.c b/laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/div.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/a-no-header/div.c rename to laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/div.c diff --git a/laborator/content/linking/02-multiple-diy/a-no-header/main.c b/laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/main.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/a-no-header/main.c rename to laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/main.c diff --git a/laborator/content/linking/02-multiple-diy/a-no-header/mul.c b/laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/mul.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/a-no-header/mul.c rename to laborator/content/etapele-compilarii/02-multiple-diy/a-no-header/mul.c diff --git a/laborator/content/linking/02-multiple-diy/b-header/.gitignore b/laborator/content/etapele-compilarii/02-multiple-diy/b-header/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-diy/b-header/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-diy/b-header/.gitignore diff --git a/laborator/content/linking/02-multiple-diy/b-header/div.c b/laborator/content/etapele-compilarii/02-multiple-diy/b-header/div.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/b-header/div.c rename to laborator/content/etapele-compilarii/02-multiple-diy/b-header/div.c diff --git a/laborator/content/linking/02-multiple-diy/b-header/main.c b/laborator/content/etapele-compilarii/02-multiple-diy/b-header/main.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/b-header/main.c rename to laborator/content/etapele-compilarii/02-multiple-diy/b-header/main.c diff --git a/laborator/content/linking/02-multiple-diy/b-header/mul.c b/laborator/content/etapele-compilarii/02-multiple-diy/b-header/mul.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/b-header/mul.c rename to laborator/content/etapele-compilarii/02-multiple-diy/b-header/mul.c diff --git a/laborator/content/linking/02-multiple-diy/b-header/ops.h b/laborator/content/etapele-compilarii/02-multiple-diy/b-header/ops.h similarity index 100% rename from laborator/content/linking/02-multiple-diy/b-header/ops.h rename to laborator/content/etapele-compilarii/02-multiple-diy/b-header/ops.h diff --git a/laborator/content/linking/02-multiple-diy/c-lib/.gitignore b/laborator/content/etapele-compilarii/02-multiple-diy/c-lib/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-diy/c-lib/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-diy/c-lib/.gitignore diff --git a/laborator/content/linking/02-multiple-diy/c-lib/div.c b/laborator/content/etapele-compilarii/02-multiple-diy/c-lib/div.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/c-lib/div.c rename to laborator/content/etapele-compilarii/02-multiple-diy/c-lib/div.c diff --git a/laborator/content/linking/02-multiple-diy/c-lib/main.c b/laborator/content/etapele-compilarii/02-multiple-diy/c-lib/main.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/c-lib/main.c rename to laborator/content/etapele-compilarii/02-multiple-diy/c-lib/main.c diff --git a/laborator/content/linking/02-multiple-diy/c-lib/mul.c b/laborator/content/etapele-compilarii/02-multiple-diy/c-lib/mul.c similarity index 100% rename from laborator/content/linking/02-multiple-diy/c-lib/mul.c rename to laborator/content/etapele-compilarii/02-multiple-diy/c-lib/mul.c diff --git a/laborator/content/linking/02-multiple-diy/c-lib/ops.h b/laborator/content/etapele-compilarii/02-multiple-diy/c-lib/ops.h similarity index 100% rename from laborator/content/linking/02-multiple-diy/c-lib/ops.h rename to laborator/content/etapele-compilarii/02-multiple-diy/c-lib/ops.h diff --git a/laborator/content/linking/02-multiple-tut/.gitignore b/laborator/content/etapele-compilarii/02-multiple-tut/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-tut/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-tut/.gitignore diff --git a/laborator/content/linking/02-multiple-tut/a-no-header/.gitignore b/laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-tut/a-no-header/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/.gitignore diff --git a/laborator/content/linking/02-multiple-tut/a-no-header/Makefile b/laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/Makefile similarity index 100% rename from laborator/content/linking/02-multiple-tut/a-no-header/Makefile rename to laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/Makefile diff --git a/laborator/content/linking/02-multiple-tut/a-no-header/add.c b/laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/add.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/a-no-header/add.c rename to laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/add.c diff --git a/laborator/content/linking/02-multiple-tut/a-no-header/main.c b/laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/main.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/a-no-header/main.c rename to laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/main.c diff --git a/laborator/content/linking/02-multiple-tut/a-no-header/sub.c b/laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/sub.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/a-no-header/sub.c rename to laborator/content/etapele-compilarii/02-multiple-tut/a-no-header/sub.c diff --git a/laborator/content/linking/02-multiple-tut/b-header/.gitignore b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/.gitignore diff --git a/laborator/content/linking/02-multiple-tut/b-header/Makefile b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/Makefile similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/Makefile rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/Makefile diff --git a/laborator/content/linking/02-multiple-tut/b-header/add.c b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/add.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/add.c rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/add.c diff --git a/laborator/content/linking/02-multiple-tut/b-header/main.c b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/main.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/main.c rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/main.c diff --git a/laborator/content/linking/02-multiple-tut/b-header/ops.h b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/ops.h similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/ops.h rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/ops.h diff --git a/laborator/content/linking/02-multiple-tut/b-header/sub.c b/laborator/content/etapele-compilarii/02-multiple-tut/b-header/sub.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/b-header/sub.c rename to laborator/content/etapele-compilarii/02-multiple-tut/b-header/sub.c diff --git a/laborator/content/linking/02-multiple-tut/c-lib/.gitignore b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/.gitignore similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/.gitignore rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/.gitignore diff --git a/laborator/content/linking/02-multiple-tut/c-lib/Makefile b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/Makefile similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/Makefile rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/Makefile diff --git a/laborator/content/linking/02-multiple-tut/c-lib/add.c b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/add.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/add.c rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/add.c diff --git a/laborator/content/linking/02-multiple-tut/c-lib/main.c b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/main.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/main.c rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/main.c diff --git a/laborator/content/linking/02-multiple-tut/c-lib/ops.h b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/ops.h similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/ops.h rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/ops.h diff --git a/laborator/content/linking/02-multiple-tut/c-lib/sub.c b/laborator/content/etapele-compilarii/02-multiple-tut/c-lib/sub.c similarity index 100% rename from laborator/content/linking/02-multiple-tut/c-lib/sub.c rename to laborator/content/etapele-compilarii/02-multiple-tut/c-lib/sub.c diff --git a/laborator/content/linking/03-entry-2-fix/.gitignore b/laborator/content/etapele-compilarii/03-entry-2-fix/.gitignore similarity index 100% rename from laborator/content/linking/03-entry-2-fix/.gitignore rename to laborator/content/etapele-compilarii/03-entry-2-fix/.gitignore diff --git a/laborator/content/linking/03-entry-2-fix/Makefile b/laborator/content/etapele-compilarii/03-entry-2-fix/Makefile similarity index 100% rename from laborator/content/linking/03-entry-2-fix/Makefile rename to laborator/content/etapele-compilarii/03-entry-2-fix/Makefile diff --git a/laborator/content/linking/03-entry-2-fix/hello.c b/laborator/content/etapele-compilarii/03-entry-2-fix/hello.c similarity index 100% rename from laborator/content/linking/03-entry-2-fix/hello.c rename to laborator/content/etapele-compilarii/03-entry-2-fix/hello.c diff --git a/laborator/content/linking/03-entry-fix/a-c/.gitignore b/laborator/content/etapele-compilarii/03-entry-fix/a-c/.gitignore similarity index 100% rename from laborator/content/linking/03-entry-fix/a-c/.gitignore rename to laborator/content/etapele-compilarii/03-entry-fix/a-c/.gitignore diff --git a/laborator/content/linking/03-entry-fix/a-c/Makefile b/laborator/content/etapele-compilarii/03-entry-fix/a-c/Makefile similarity index 100% rename from laborator/content/linking/03-entry-fix/a-c/Makefile rename to laborator/content/etapele-compilarii/03-entry-fix/a-c/Makefile diff --git a/laborator/content/linking/03-entry-fix/a-c/hello.c b/laborator/content/etapele-compilarii/03-entry-fix/a-c/hello.c similarity index 100% rename from laborator/content/linking/03-entry-fix/a-c/hello.c rename to laborator/content/etapele-compilarii/03-entry-fix/a-c/hello.c diff --git a/laborator/content/linking/03-entry-fix/b-asm/.gitignore b/laborator/content/etapele-compilarii/03-entry-fix/b-asm/.gitignore similarity index 100% rename from laborator/content/linking/03-entry-fix/b-asm/.gitignore rename to laborator/content/etapele-compilarii/03-entry-fix/b-asm/.gitignore diff --git a/laborator/content/linking/03-entry-fix/b-asm/Makefile b/laborator/content/etapele-compilarii/03-entry-fix/b-asm/Makefile similarity index 100% rename from laborator/content/linking/03-entry-fix/b-asm/Makefile rename to laborator/content/etapele-compilarii/03-entry-fix/b-asm/Makefile diff --git a/laborator/content/linking/03-entry-fix/b-asm/hello.asm b/laborator/content/etapele-compilarii/03-entry-fix/b-asm/hello.asm similarity index 100% rename from laborator/content/linking/03-entry-fix/b-asm/hello.asm rename to laborator/content/etapele-compilarii/03-entry-fix/b-asm/hello.asm diff --git a/laborator/content/linking/03-entry-fix/c-extra-nolibc/.gitignore b/laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/.gitignore similarity index 100% rename from laborator/content/linking/03-entry-fix/c-extra-nolibc/.gitignore rename to laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/.gitignore diff --git a/laborator/content/linking/03-entry-fix/c-extra-nolibc/Makefile b/laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/Makefile similarity index 100% rename from laborator/content/linking/03-entry-fix/c-extra-nolibc/Makefile rename to laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/Makefile diff --git a/laborator/content/linking/03-entry-fix/c-extra-nolibc/hello.c b/laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/hello.c similarity index 100% rename from laborator/content/linking/03-entry-fix/c-extra-nolibc/hello.c rename to laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/hello.c diff --git a/laborator/content/linking/03-entry-fix/c-extra-nolibc/puts.asm b/laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/puts.asm similarity index 100% rename from laborator/content/linking/03-entry-fix/c-extra-nolibc/puts.asm rename to laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/puts.asm diff --git a/laborator/content/linking/03-entry-fix/c-extra-nolibc/start.asm b/laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/start.asm similarity index 100% rename from laborator/content/linking/03-entry-fix/c-extra-nolibc/start.asm rename to laborator/content/etapele-compilarii/03-entry-fix/c-extra-nolibc/start.asm diff --git a/laborator/content/linking/03-entry-fix/d-extra-libc/.gitignore b/laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/.gitignore similarity index 100% rename from laborator/content/linking/03-entry-fix/d-extra-libc/.gitignore rename to laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/.gitignore diff --git a/laborator/content/linking/03-entry-fix/d-extra-libc/Makefile b/laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/Makefile similarity index 100% rename from laborator/content/linking/03-entry-fix/d-extra-libc/Makefile rename to laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/Makefile diff --git a/laborator/content/linking/03-entry-fix/d-extra-libc/hello.c b/laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/hello.c similarity index 100% rename from laborator/content/linking/03-entry-fix/d-extra-libc/hello.c rename to laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/hello.c diff --git a/laborator/content/linking/03-entry-fix/d-extra-libc/start.asm b/laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/start.asm similarity index 100% rename from laborator/content/linking/03-entry-fix/d-extra-libc/start.asm rename to laborator/content/etapele-compilarii/03-entry-fix/d-extra-libc/start.asm diff --git a/laborator/content/linking/04-var-func-fix/.gitignore b/laborator/content/etapele-compilarii/04-var-func-fix/.gitignore similarity index 100% rename from laborator/content/linking/04-var-func-fix/.gitignore rename to laborator/content/etapele-compilarii/04-var-func-fix/.gitignore diff --git a/laborator/content/linking/04-var-func-fix/Makefile b/laborator/content/etapele-compilarii/04-var-func-fix/Makefile similarity index 100% rename from laborator/content/linking/04-var-func-fix/Makefile rename to laborator/content/etapele-compilarii/04-var-func-fix/Makefile diff --git a/laborator/content/linking/04-var-func-fix/main.c b/laborator/content/etapele-compilarii/04-var-func-fix/main.c similarity index 100% rename from laborator/content/linking/04-var-func-fix/main.c rename to laborator/content/etapele-compilarii/04-var-func-fix/main.c diff --git a/laborator/content/linking/04-var-func-fix/state.c b/laborator/content/etapele-compilarii/04-var-func-fix/state.c similarity index 100% rename from laborator/content/linking/04-var-func-fix/state.c rename to laborator/content/etapele-compilarii/04-var-func-fix/state.c diff --git a/laborator/content/linking/04-var-func-fix/state.h b/laborator/content/etapele-compilarii/04-var-func-fix/state.h similarity index 100% rename from laborator/content/linking/04-var-func-fix/state.h rename to laborator/content/etapele-compilarii/04-var-func-fix/state.h diff --git a/laborator/content/linking/05-lib-fix/.gitignore b/laborator/content/etapele-compilarii/05-lib-fix/.gitignore similarity index 100% rename from laborator/content/linking/05-lib-fix/.gitignore rename to laborator/content/etapele-compilarii/05-lib-fix/.gitignore diff --git a/laborator/content/linking/05-lib-fix/Makefile b/laborator/content/etapele-compilarii/05-lib-fix/Makefile similarity index 100% rename from laborator/content/linking/05-lib-fix/Makefile rename to laborator/content/etapele-compilarii/05-lib-fix/Makefile diff --git a/laborator/content/linking/05-lib-fix/add.c b/laborator/content/etapele-compilarii/05-lib-fix/add.c similarity index 100% rename from laborator/content/linking/05-lib-fix/add.c rename to laborator/content/etapele-compilarii/05-lib-fix/add.c diff --git a/laborator/content/linking/05-lib-fix/main.c b/laborator/content/etapele-compilarii/05-lib-fix/main.c similarity index 100% rename from laborator/content/linking/05-lib-fix/main.c rename to laborator/content/etapele-compilarii/05-lib-fix/main.c diff --git a/laborator/content/linking/05-lib-fix/ops.h b/laborator/content/etapele-compilarii/05-lib-fix/ops.h similarity index 100% rename from laborator/content/linking/05-lib-fix/ops.h rename to laborator/content/etapele-compilarii/05-lib-fix/ops.h diff --git a/laborator/content/linking/05-lib-fix/sub.c b/laborator/content/etapele-compilarii/05-lib-fix/sub.c similarity index 100% rename from laborator/content/linking/05-lib-fix/sub.c rename to laborator/content/etapele-compilarii/05-lib-fix/sub.c diff --git a/laborator/content/linking/06-obj-link-dev/.gitignore b/laborator/content/etapele-compilarii/06-obj-link-dev/.gitignore similarity index 100% rename from laborator/content/linking/06-obj-link-dev/.gitignore rename to laborator/content/etapele-compilarii/06-obj-link-dev/.gitignore diff --git a/laborator/content/linking/06-obj-link-dev/Makefile b/laborator/content/etapele-compilarii/06-obj-link-dev/Makefile similarity index 100% rename from laborator/content/linking/06-obj-link-dev/Makefile rename to laborator/content/etapele-compilarii/06-obj-link-dev/Makefile diff --git a/laborator/content/linking/06-obj-link-dev/main.c b/laborator/content/etapele-compilarii/06-obj-link-dev/main.c similarity index 100% rename from laborator/content/linking/06-obj-link-dev/main.c rename to laborator/content/etapele-compilarii/06-obj-link-dev/main.c diff --git a/laborator/content/linking/README.md b/laborator/content/etapele-compilarii/README.md similarity index 84% rename from laborator/content/linking/README.md rename to laborator/content/etapele-compilarii/README.md index 6258928b..fd418998 100644 --- a/laborator/content/linking/README.md +++ b/laborator/content/etapele-compilarii/README.md @@ -1,6 +1,31 @@ -# Laborator 4: Crearea și analiza unui executabil (2) +# Laborator 03: Compilare - +Etapele prin care trece un program scris în `C` din momentul în care este scris până când este rulat ca un proces sunt, in ordine: + +- preprocesare +- compilare +- asamblare +- link editare + +În imaginea de mai jos sunt reprezentate si detaliate aceste etape: + +![phases-full.png](https://ocw.cs.pub.ro/courses/_media/iocla/laboratoare/phases-full.png?cache=) + +## Preprocesare + +În cadrul primei etape, cea de `preprocesare` au loc următoarele acțiuni plecând de la fișierul cod sursă: +* eliminarea comentariilor +* expandarea directivelor care încep cu simbolul `#` + * înlocuirea valorilor corespunzătoare pentru `#define ...` + * includerea conținutului fișierelor date ca parametru directivei `#include` + +## Compilare + +În etapa de `compilare` au loc următoarele subetape: +* analiza lexicală - verificarea limbajului +* analiza sintactică - verificarea ordinii cuvintelor (`;` vine la finalul asignării unei variabile) +* analiza semantică - determinarea sensului codului scris (determinarea contextului variabilelor) +* generarea de cod în limbaj de asamblare care este o formă human-readable a ce ajunge procesorul să execute efectiv ## Assembly / Asamblare @@ -223,9 +248,96 @@ Hex dump of section '.rodata': 0x080484e8 6f726c64 2100 orld!. ``` +Majoritatea compilatoarelor oferă opțiunea de a genera și un fișier cu programul scris în limbaj de asamblare. + +>**NOTE**: În cazul compilatorului `gcc` este de ajuns să adăugați flag-ul `-S` și vă va genera un +fișier `*.s` cu codul aferent. În arhiva de `TODO` aveți un exemplu de trecere a unui program +foarte simplu `hello.c` prin cele patru faze. Îl puteți testa pe un sistem Unix/Linux și pe un sistem Windows cu suport de MinGW. +```shell +$ make +cc -E -o hello.i hello.c +cc -Wall -S -o hello.s hello.i +cc -c -o hello.o hello.s +cc -o hello hello.o + +$ ls +Makefile hello hello.c hello.i hello.o hello.s + +$ ./hello +Hello, World! + +$ tail -10 hello.i + + +# 5 "hello.c" +int main(void) +{ + puts("Hello, World!"); + + return 0; +} + +$ cat hello.s + .file "hello.c" + .section .rodata +.LC0: + .string "Hello, World!" + .text + .globl main + .type main, @function +main: +.LFB0: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movl $.LC0, %edi + call puts + movl $0, %eax + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size main, .-main + .ident "GCC: (Debian 5.2.1-17) 5.2.1 20150911" + .section .note.GNU-stack,"",@progbits + +$ file hello.o +hello.o: ELF 64-bit LSB relocatable, x86-64, [...] + +$ file hello +hello: ELF 64-bit LSB executable, x86-64, [...] + +$ objdump -d hello.o + +hello.o: file format elf64-x86-64 + + +Disassembly of section .text: + +0000000000000000
: + 0: 55 push %rbp + 1: 48 89 e5 mov %rsp,%rbp + 4: bf 00 00 00 00 mov $0x0,%edi + 9: e8 00 00 00 00 callq e + e: b8 00 00 00 00 mov $0x0,%eax + 13: 5d pop %rbp + 14: c3 retq +``` + +Pentru a genera sintaxa intel pe 32 de biți, se pot folosi aceste opțiuni: +```shell +cc -Wall -m32 -S -masm=intel -o hello.s hello.i +``` + +Dacă programele scrise în limbaje de nivel înalt ajung să fie portate ușor pentru procesoare diferite (arm, powerpc, x86, etc.), cele scrise în limbaj de asamblare sunt implementări specifice unei anumite arhitecturi. Limbaje de nivel înalt reprezintă o formă mai abstractă de rezolvare a unei probleme, din punctul de vedere al unui procesor, motiv pentru care și acestea trebuie traduse în limbaj de asamblare în cele din urmă, pentru a se putea ajunge la un binar care poate fi rulat. Mai multe detalii în laboratoarele următoare. + ## Exerciții -> **NOTE:** În cadrul laboratoarelor vom folosi repository-ul de Git de IOCLA: https://github.com/systems-cs-pub-ro/iocla. +> **WARNING:** În cadrul laboratoarelor vom folosi repository-ul de Git de IOCLA: https://github.com/systems-cs-pub-ro/iocla. > Repository-ul este clonat pe desktopul mașinii virtuale. > Pentru a îl actualiza, folosiți comanda `git pull origin master` din interiorul directorului în care se află repository-ul (`~/Desktop/iocla`). > Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. @@ -369,4 +481,4 @@ Rezultatul funcției scrisă în python va fi preluat în codul C și se va afi > Puteți să urmăriți și exemplele de [aici](https://www.codeproject.com/Articles/820116/Embedding-Python-program-in-a-C-Cplusplus-code) și/sau [aici](https://www.xmodulo.com/embed-python-code-in-c.html) pentru a vedea cum să preluați rezultatul funcției scrisă în python. De asemenea puteți consulta documentația de [aici](https://docs.python.org/3/c-api/long.html) pentru a vedea cum să faceți conversia rezultatului la un tip de date din C. > **NOTE:** -> Atenție la versiunea de python pe care o folosiți; nu este recomandată o anumită versiune însă trebuie să aveți în vedere că în funcție de soluția voastră este posibil să fie nevoie să folosiți versiune specifică. Makefile-ul folosește versiunea **3.9**. \ No newline at end of file +> Atenție la versiunea de python pe care o folosiți; nu este recomandată o anumită versiune însă trebuie să aveți în vedere că în funcție de soluția voastră este posibil să fie nevoie să folosiți versiune specifică. Makefile-ul folosește versiunea **3.9**. diff --git a/laborator/content/linking/bonus-c-python/Makefile b/laborator/content/etapele-compilarii/bonus-c-python/Makefile similarity index 100% rename from laborator/content/linking/bonus-c-python/Makefile rename to laborator/content/etapele-compilarii/bonus-c-python/Makefile diff --git a/laborator/content/linking/bonus-c-python/main.c b/laborator/content/etapele-compilarii/bonus-c-python/main.c similarity index 100% rename from laborator/content/linking/bonus-c-python/main.c rename to laborator/content/etapele-compilarii/bonus-c-python/main.c diff --git a/laborator/content/linking/bonus-c-python/python_modules/my_module.py b/laborator/content/etapele-compilarii/bonus-c-python/python_modules/my_module.py similarity index 100% rename from laborator/content/linking/bonus-c-python/python_modules/my_module.py rename to laborator/content/etapele-compilarii/bonus-c-python/python_modules/my_module.py diff --git a/laborator/content/linking/demo/extern/Makefile b/laborator/content/etapele-compilarii/demo/extern/Makefile similarity index 100% rename from laborator/content/linking/demo/extern/Makefile rename to laborator/content/etapele-compilarii/demo/extern/Makefile diff --git a/laborator/content/linking/demo/extern/extern-1.c b/laborator/content/etapele-compilarii/demo/extern/extern-1.c similarity index 100% rename from laborator/content/linking/demo/extern/extern-1.c rename to laborator/content/etapele-compilarii/demo/extern/extern-1.c diff --git a/laborator/content/linking/demo/extern/extern-2.c b/laborator/content/etapele-compilarii/demo/extern/extern-2.c similarity index 100% rename from laborator/content/linking/demo/extern/extern-2.c rename to laborator/content/etapele-compilarii/demo/extern/extern-2.c diff --git a/laborator/content/linking/demo/extern/extern-3.c b/laborator/content/etapele-compilarii/demo/extern/extern-3.c similarity index 100% rename from laborator/content/linking/demo/extern/extern-3.c rename to laborator/content/etapele-compilarii/demo/extern/extern-3.c diff --git a/laborator/content/linking/demo/extern/extern-4.c b/laborator/content/etapele-compilarii/demo/extern/extern-4.c similarity index 100% rename from laborator/content/linking/demo/extern/extern-4.c rename to laborator/content/etapele-compilarii/demo/extern/extern-4.c diff --git a/laborator/content/linking/demo/extern/extern-5.c b/laborator/content/etapele-compilarii/demo/extern/extern-5.c similarity index 100% rename from laborator/content/linking/demo/extern/extern-5.c rename to laborator/content/etapele-compilarii/demo/extern/extern-5.c diff --git a/laborator/content/linking/demo/extern/extern.h b/laborator/content/etapele-compilarii/demo/extern/extern.h similarity index 100% rename from laborator/content/linking/demo/extern/extern.h rename to laborator/content/etapele-compilarii/demo/extern/extern.h diff --git a/laborator/content/linking/demo/linker/Makefile b/laborator/content/etapele-compilarii/demo/linker/Makefile similarity index 100% rename from laborator/content/linking/demo/linker/Makefile rename to laborator/content/etapele-compilarii/demo/linker/Makefile diff --git a/laborator/content/linking/demo/linker/hello-world.c b/laborator/content/etapele-compilarii/demo/linker/hello-world.c similarity index 100% rename from laborator/content/linking/demo/linker/hello-world.c rename to laborator/content/etapele-compilarii/demo/linker/hello-world.c diff --git a/laborator/content/linking/demo/sections-unions/Makefile b/laborator/content/etapele-compilarii/demo/sections-unions/Makefile similarity index 100% rename from laborator/content/linking/demo/sections-unions/Makefile rename to laborator/content/etapele-compilarii/demo/sections-unions/Makefile diff --git a/laborator/content/linking/demo/sections-unions/callee.c b/laborator/content/etapele-compilarii/demo/sections-unions/callee.c similarity index 100% rename from laborator/content/linking/demo/sections-unions/callee.c rename to laborator/content/etapele-compilarii/demo/sections-unions/callee.c diff --git a/laborator/content/linking/demo/sections-unions/caller.c b/laborator/content/etapele-compilarii/demo/sections-unions/caller.c similarity index 100% rename from laborator/content/linking/demo/sections-unions/caller.c rename to laborator/content/etapele-compilarii/demo/sections-unions/caller.c diff --git a/laborator/content/linking/demo/sections-unions/caller.h b/laborator/content/etapele-compilarii/demo/sections-unions/caller.h similarity index 100% rename from laborator/content/linking/demo/sections-unions/caller.h rename to laborator/content/etapele-compilarii/demo/sections-unions/caller.h diff --git a/laborator/content/linking/demo/sections/Makefile b/laborator/content/etapele-compilarii/demo/sections/Makefile similarity index 100% rename from laborator/content/linking/demo/sections/Makefile rename to laborator/content/etapele-compilarii/demo/sections/Makefile diff --git a/laborator/content/linking/demo/sections/sections.c b/laborator/content/etapele-compilarii/demo/sections/sections.c similarity index 100% rename from laborator/content/linking/demo/sections/sections.c rename to laborator/content/etapele-compilarii/demo/sections/sections.c diff --git a/laborator/content/linking/demo/static/Makefile b/laborator/content/etapele-compilarii/demo/static/Makefile similarity index 100% rename from laborator/content/linking/demo/static/Makefile rename to laborator/content/etapele-compilarii/demo/static/Makefile diff --git a/laborator/content/linking/demo/static/static-1.c b/laborator/content/etapele-compilarii/demo/static/static-1.c similarity index 100% rename from laborator/content/linking/demo/static/static-1.c rename to laborator/content/etapele-compilarii/demo/static/static-1.c diff --git a/laborator/content/linking/demo/static/static-2.c b/laborator/content/etapele-compilarii/demo/static/static-2.c similarity index 100% rename from laborator/content/linking/demo/static/static-2.c rename to laborator/content/etapele-compilarii/demo/static/static-2.c diff --git a/laborator/content/linking/demo/static/static-3.c b/laborator/content/etapele-compilarii/demo/static/static-3.c similarity index 100% rename from laborator/content/linking/demo/static/static-3.c rename to laborator/content/etapele-compilarii/demo/static/static-3.c diff --git a/laborator/content/linking/demo/static/static-41.c b/laborator/content/etapele-compilarii/demo/static/static-41.c similarity index 100% rename from laborator/content/linking/demo/static/static-41.c rename to laborator/content/etapele-compilarii/demo/static/static-41.c diff --git a/laborator/content/linking/demo/static/static-42.c b/laborator/content/etapele-compilarii/demo/static/static-42.c similarity index 100% rename from laborator/content/linking/demo/static/static-42.c rename to laborator/content/etapele-compilarii/demo/static/static-42.c diff --git a/laborator/content/linking/06-obj-link-dev/shop.o b/laborator/content/linking/06-obj-link-dev/shop.o deleted file mode 100644 index 5f612b5d..00000000 Binary files a/laborator/content/linking/06-obj-link-dev/shop.o and /dev/null differ diff --git a/laborator/content/linking/bonus-c-python/python_modules/__pycache__/my_module.cpython-39.pyc b/laborator/content/linking/bonus-c-python/python_modules/__pycache__/my_module.cpython-39.pyc deleted file mode 100644 index 9b12dce2..00000000 Binary files a/laborator/content/linking/bonus-c-python/python_modules/__pycache__/my_module.cpython-39.pyc and /dev/null differ diff --git a/laborator/content/operatii-memorie-gdb/1-iterate/Makefile b/laborator/content/operatii-memorie-gdb/1-iterate/Makefile new file mode 100644 index 00000000..9f6562be --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/1-iterate/Makefile @@ -0,0 +1,2 @@ +PROGNAME := iterate +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/1-iterate/iterate.c b/laborator/content/operatii-memorie-gdb/1-iterate/iterate.c new file mode 100644 index 00000000..5a1b1f38 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/1-iterate/iterate.c @@ -0,0 +1,45 @@ +#include + +/** + * Afisati adresele elementelor din vectorul "v" impreuna cu valorile + * de la acestea. + * Parcurgeti adresele, pe rand, din octet in octet, + * din 2 in 2 octeti si apoi din 4 in 4. + */ + +void print_char(int *v,int n){ + printf("MARIME V: %ld, ELEMENTE V: %ld \n", sizeof(v), sizeof(v)/sizeof(int)); +unsigned char *char_ptr =(unsigned char*)v; +for(unsigned char i=0;i 0x%x\n", char_ptr, *(char_ptr+i)); +} +} + +void print_short(int *v,int n){ +short *short_ptr =(short*)v; +for(unsigned short i=0;i 0x%x\n", short_ptr, *(short_ptr+i)); +} +} + +void print_int(int *v,int n){ +int *int_ptr =v; +for(unsigned int i=0;i 0x%x\n", int_ptr, *(int_ptr+i)); +} +} + + +int main() { + int v[] = {0xCAFEBABE, 0xDEADBEEF, 0x0B00B135, 0xBAADF00D, 0xDEADC0DE}; +printf("MARIME V: %ld, ELEMENTE V: %ld \n", sizeof(v), sizeof(v)/sizeof(int)); +printf("PENTRU CHAR \n"); + print_char(v,5); + printf("PENTRU short \n"); + print_short(v,5); + printf("PENTRU INT \n"); + print_int(v,5); + (void) v; + + return 0; +} diff --git a/laborator/content/operatii-memorie-gdb/2-delete-first/Makefile b/laborator/content/operatii-memorie-gdb/2-delete-first/Makefile new file mode 100644 index 00000000..f4fbe417 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/2-delete-first/Makefile @@ -0,0 +1,2 @@ +PROGNAME := delete-first +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/2-delete-first/delete-first.c b/laborator/content/operatii-memorie-gdb/2-delete-first/delete-first.c new file mode 100644 index 00000000..0cdf60d1 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/2-delete-first/delete-first.c @@ -0,0 +1,20 @@ +#include +#include +#include + +char* delete_first(char *s, char *pattern) +{ + int found_it = strstr(s,pattern) - s; + char *s2 = strcpy(s + found_it, s + found_it + strlen(pattern)); + memcpy(s + found_it, s2, strlen(s2) ); + return s; +} + +int main(){ + char s[] = "Ana are mere"; + char *pattern = "re"; + + printf("%s\n", delete_first(s, pattern)); + + return 0; +} \ No newline at end of file diff --git a/laborator/content/operatii-memorie-gdb/3-pixels/Makefile b/laborator/content/operatii-memorie-gdb/3-pixels/Makefile new file mode 100644 index 00000000..530a16d6 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/3-pixels/Makefile @@ -0,0 +1,2 @@ +PROGNAME := pixels +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/ex3/pixel.h b/laborator/content/operatii-memorie-gdb/3-pixels/pixel.h similarity index 94% rename from laborator/content/operatii-memorie-gdb/ex3/pixel.h rename to laborator/content/operatii-memorie-gdb/3-pixels/pixel.h index 454bfccc..8b4c3056 100644 --- a/laborator/content/operatii-memorie-gdb/ex3/pixel.h +++ b/laborator/content/operatii-memorie-gdb/3-pixels/pixel.h @@ -8,9 +8,9 @@ typedef struct Pixel { } Pixel; typedef struct Picture { - int height; - int width; - Pixel **pix_array; + int height; + int width; + Pixel **pix_array; } Picture; Picture* generatePicture(int height, int width, Pixel **pix_array) { @@ -28,7 +28,7 @@ Picture* generatePicture(int height, int width, Pixel **pix_array) { pic->pix_array[i][j] = pix_array[i][j]; } } - + return pic; } @@ -74,7 +74,9 @@ Pixel** generatePixelArray(int height, int width) { } void freePixelArray(Pixel ***pix_array, int height, int width) { - for (int i = 0 ; i < height ; ++i) + (void) width; + + for (int i = 0 ; i < height ; ++i) free((*pix_array)[i]); free(*pix_array); diff --git a/laborator/content/operatii-memorie-gdb/3-pixels/pixels.c b/laborator/content/operatii-memorie-gdb/3-pixels/pixels.c new file mode 100644 index 00000000..9197d375 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/3-pixels/pixels.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include "pixel.h" +#define GET_PIXEL(a,i,j) (*(*(a+i)+j)) + +/* + TODO a + Functia primeste ca parametru o imagine si intoarce imaginea rasturnata. + Prin imagine rasturnata se intelege inversarea liniilor matricei pix_array + din structura lui Picture, astfel: Linia 1 devine linia n, linia 2 devine + linia n - 1, etc. +*/ +// void swap(){ +// pic->GET_PIXEL(pix_array,i,j).R = 0.3 * pic->GET_PIXEL(pix_array,i,j).R; +// pic->GET_PIXEL(pix_array,i,j).G = 0.59 * pic->GET_PIXEL(pix_array,i,j).G; +// pic->GET_PIXEL(pix_array,i,j).B = 0.11 * pic->GET_PIXEL(pix_array,i,j).B; +// // } + +void reversePic(Picture *pic){ + + for(int i=0;iheight/2;i++){ + for (int j=0;jwidth;j++){ + unsigned char aux; + aux=pic->pix_array[pic->height-i-1][j].R; + pic->pix_array[pic->height-i-1][j].R=pic->pix_array[i][j].R; + pic->pix_array[i][j].R =aux; + + aux=pic->pix_array[pic->height-i-1][j].G; + pic->pix_array[pic->height-i-1][j].G=pic->pix_array[i][j].G; + pic->pix_array[i][j].G =aux; + + aux=pic->pix_array[pic->height-i-1][j].B; + pic->pix_array[pic->height-i-1][j].B=pic->pix_array[i][j].B; + pic->pix_array[i][j].B =aux; + + } + } + + +} + +void colorToGray(Picture *pic){ + + for(int i=0;iheight;i++){ + for (int j=0;jwidth;j++){ + pic->pix_array[i][j].R = 0.3 * pic->pix_array[i][j].R; + pic->pix_array[i][j].G = 0.59 * pic->pix_array[i][j].G; + pic->pix_array[i][j].B = 0.11 * pic->pix_array[i][j].B; + } + } + + +} + + +int main() { + int height, width; + scanf("%d%d", &height, &width); + Pixel **pix_array = generatePixelArray(height, width); + Picture *pic = generatePicture(height, width, pix_array); + printf("poza inainte: \n"); + printPicture(pic); + printf("poza dupa: \n"); + reversePic(pic); + printPicture(pic); + + freePicture(&pic); + freePixelArray(&pix_array, height, width); + + return 0; +} diff --git a/laborator/content/operatii-memorie-gdb/4-find-max/Makefile b/laborator/content/operatii-memorie-gdb/4-find-max/Makefile new file mode 100644 index 00000000..3ee48cc5 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/4-find-max/Makefile @@ -0,0 +1,2 @@ +PROGNAME := find-max +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/4-find-max/find-max.c b/laborator/content/operatii-memorie-gdb/4-find-max/find-max.c new file mode 100644 index 00000000..6b637dfd --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/4-find-max/find-max.c @@ -0,0 +1,52 @@ +#include +#include +#include + + + +void *find_max(void *arr, int n, int element_size, + int (*compare)(const void *, const void *)) { + void *max_elem = arr; + for(int i=0;i*(int*)(b+i)) + return 1; + if(*(int*)(a+i)>*(int*)(b+i)) + return 0; + } + return 0; + +} + + +int main() { + int n; + scanf("%d", &n); + + int *arr = malloc(n * sizeof(*arr)); + + for (int i = 0 ; i < n; ++i) + scanf("%d", &arr[i]); + + int *res=(int *)find_max(arr,n,sizeof(*arr)/sizeof(int), compare_ints); + printf("%d" , *res); + + free(arr); + return 0; +} diff --git a/laborator/content/operatii-memorie-gdb/5-segfault/Makefile b/laborator/content/operatii-memorie-gdb/5-segfault/Makefile new file mode 100644 index 00000000..028935e2 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/5-segfault/Makefile @@ -0,0 +1,3 @@ +PROGNAME := segfault +include ../../utils/Makefile.generic + diff --git a/laborator/content/operatii-memorie-gdb/ex5/ex5.c b/laborator/content/operatii-memorie-gdb/5-segfault/segfault.c similarity index 95% rename from laborator/content/operatii-memorie-gdb/ex5/ex5.c rename to laborator/content/operatii-memorie-gdb/5-segfault/segfault.c index 5f3e24e2..d415b4fa 100644 --- a/laborator/content/operatii-memorie-gdb/ex5/ex5.c +++ b/laborator/content/operatii-memorie-gdb/5-segfault/segfault.c @@ -25,7 +25,7 @@ int main() { for (int i = 0 ; i < n; ++i) v[i] = nth_fibo(i); - v[423433] = 3; + // v[423433] = 3; free(v); return 0; diff --git a/laborator/content/operatii-memorie-gdb/6-inspect/Makefile b/laborator/content/operatii-memorie-gdb/6-inspect/Makefile new file mode 100644 index 00000000..39b22d95 --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/6-inspect/Makefile @@ -0,0 +1,2 @@ +PROGNAME := inspect +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/ex6/ex6.c b/laborator/content/operatii-memorie-gdb/6-inspect/inspect.c similarity index 70% rename from laborator/content/operatii-memorie-gdb/ex6/ex6.c rename to laborator/content/operatii-memorie-gdb/6-inspect/inspect.c index cc98583c..a5e945c5 100644 --- a/laborator/content/operatii-memorie-gdb/ex6/ex6.c +++ b/laborator/content/operatii-memorie-gdb/6-inspect/inspect.c @@ -8,9 +8,13 @@ int main() { unsigned int *int_ptr = (unsigned int *) &v; - for (int i = 0 ; i < sizeof(v) / sizeof(*int_ptr) ; ++i) { + for (unsigned int i = 0 ; i < sizeof(v) / sizeof(*int_ptr) ; ++i) { ++int_ptr; } + (void) a; + (void) b; + (void) c; + return 0; } diff --git a/laborator/content/operatii-memorie-gdb/7-pointers/Makefile b/laborator/content/operatii-memorie-gdb/7-pointers/Makefile new file mode 100644 index 00000000..aea3db7f --- /dev/null +++ b/laborator/content/operatii-memorie-gdb/7-pointers/Makefile @@ -0,0 +1,2 @@ +PROGNAME := pointers +include ../../utils/Makefile.generic diff --git a/laborator/content/operatii-memorie-gdb/ex7/ex7.c b/laborator/content/operatii-memorie-gdb/7-pointers/pointers.c similarity index 96% rename from laborator/content/operatii-memorie-gdb/ex7/ex7.c rename to laborator/content/operatii-memorie-gdb/7-pointers/pointers.c index e616db57..3e745255 100644 --- a/laborator/content/operatii-memorie-gdb/ex7/ex7.c +++ b/laborator/content/operatii-memorie-gdb/7-pointers/pointers.c @@ -13,6 +13,9 @@ int main() { char src[] = "Learn IOCLA, you must!"; char *dest = malloc(sizeof(src)); + (void) s1; + (void) s2; + /* Decomentati pe rand cate un assert pe masura ce implementati o functie. Daca functia voastra este implementata corect atunci asertia se va realiza diff --git a/laborator/content/operatii-memorie-gdb/README.md b/laborator/content/operatii-memorie-gdb/README.md index 27fb9f98..5a076635 100644 --- a/laborator/content/operatii-memorie-gdb/README.md +++ b/laborator/content/operatii-memorie-gdb/README.md @@ -27,11 +27,11 @@ Un pointer la void este un pointer care nu are un tip asociat. Pointerii la void Cel mai adesea sunt folosiți în implementarea de funcții generice. De exemplu, funcțiile `malloc()` și `calloc()` returnează un pointer la void ceea ce permite ca aceste funcții să fie folosite pentru alocarea de memorie pentru orice tip de date. -Un exemplu de folosire a pointerilor la void este următorul: +Un exemplu de folosire a pointerilor la void este următorul: ```c #include - + void increment(void *data, int element_size) { /* Se verifică dacă data introdusă este un char */ if (element_size == sizeof(char)) { @@ -41,20 +41,20 @@ void increment(void *data, int element_size) { char *char_ptr = data; ++(*char_ptr); } - + if (element_size == sizeof(int)) { int *int_ptr = data; ++(*int_ptr); } } - + int main() { char c = 'a'; int x = 10; - + increment(&c, sizeof(c)); increment(&x, sizeof(x)); - + printf("%c, %d\n", c, x); /* Va avea ca rezultat: b, 11 */ return 0; } @@ -84,7 +84,7 @@ Scăderea a doi pointeri este posibilă doar dacă ambii au același tip. Rezult char *s = "Learn IOCLA, you must!"; char *p = s; for (; *p; ++p); /* Se iterează caracter cu caracter, până la '\0' */ - + printf("%ld", p - s); /* Se va afișa 22. */ ``` #### **Interpretarea datelor din memorie** @@ -169,7 +169,7 @@ typedef struct student { int an; float medie; } Student; - + int main() { Student s; s.nume = (char *) malloc(20 * sizeof(*s.nume)); @@ -204,7 +204,7 @@ struct A { short y; /* Se face padding cu 6 bytes */ }; - + printf("Size of struct: %zu", sizeof(struct A)) /* Se va afișa 24 */ ``` @@ -228,19 +228,19 @@ O funcție care trebuie să modifice mai multe valori primite prin argumente sau ```c #include - + void swap(int *a, int *b) { int c = *a; *a = *b; *b = c; } - + int main() { int a = 3, b = 5; swap(&a, &b); - + printf("a = %d, b = %d\n", a, b); /* Se va afișa a = 5, b = 3 */ - + return 0; } ``` @@ -255,7 +255,7 @@ char* toUpper(char *s) { s[i] -= 32; } } - + return s; } ``` @@ -272,19 +272,19 @@ De ce este necesară folosirea parantezelor suplimentare? Dacă acestea ar lipsi int add(int a, int b) { return a + b; } - + int subtract(int a, int b) { return a - b; } - + int operation(int x, int y, int (*func) (int, int)) { return func(x, y); } - + int main() { int (*minus)(int, int) = subtract; printf("%d", operation(10, 5, minus)); /* Se va afișa 5 */ - + return 0; } ``` @@ -295,16 +295,16 @@ Funcția [qsort()](http://www.cplusplus.com/reference/cstdlib/qsort/) din `stdli int compare(const void *a, const void *b) { return *(int *) a - *(int *)b; } - + int main() { int v[] = {100, 5, 325, 1, 30}; int size = sizeof(v) / sizeof(*v); - + qsort(v, size, sizeof(*v), compare); for (int i = 0 ; i < size ; ++i) { printf("%d ", v[i]); } - + return 0; } ``` @@ -349,6 +349,8 @@ unde: - f este formatul de afișare (x pentru hexa, d pentru zecimal, s pentru șir de caractere și i pentru instrucțiuni) - u este dimensiunea unui element (b pentru 1 octet, h pentru 2, w pentru 4 și g pentru 8 octeți) +Vă recomandăm și articolul [Debugging](https://ocw.cs.pub.ro/courses/programare/tutoriale/debugging) pentru a aprofunda cum folosim GDB atât din CLI cât și prin intermediul unui IDE. + ## **Pregătire infrastructură** > **IMPORTANT:** În cadrul laboratoarelor vom folosi repository-ul de git al materiei IOCLA - [https://github.com/systems-cs-pub-ro/iocla](https://github.com/systems-cs-pub-ro/iocla). Repository-ul este clonat pe desktop-ul mașinii virtuale. Pentru a îl actualiza, folosiți comanda `git pull origin master` din interiorul directorului în care se află repository-ul (`~/Desktop/iocla`). Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. Dacă doriți să descărcați repository-ul în altă locație, folosiți comanda `git clone https://github.com/systems-cs-pub-ro/iocla ${target}`. Pentru mai multe informații despre folosirea utilitarului `git`, urmați ghidul de la [Git Immersion](https://gitimmersion.com/). @@ -359,21 +361,21 @@ unde: - comanda `gcc` pe post de linker - `gdb` pentru analiza dinamică, investigație și debugging - + În general nu va fi nevoie să dați comenzi de compilare. Fiecare director cuprinde un Makefile pe care îl puteți rula pentru a compila în mod automat fișierele cod sursă limbaj de asamblare sau C. ### **1. Iterarea print-un vector de întregi** - Veți rezolva exercițiul plecând de la fișierul **ex1.c** aflat în directorul **ex1**. + Veți rezolva exercițiul plecând de la fișierul **iterate.c** aflat în directorul **1-iterate**. Se dă urmatoarea bucată de cod în C: ```c #include - + int main() { int v[] = {0xCAFEBABE, 0xDEADBEEF, 0x0B00B135, 0xBAADF00D, 0xDEADC0DE}; - + return 0; } ``` @@ -391,7 +393,7 @@ Afișați adresele elementelor din vectorul `v` împreună cu valorile de la ace ### **2. Ștergerea primei apariții a unui pattern dintr-un șir de caractere** -Veți rezolva exercițiul plecând de la fișierul **ex2.c** aflat în directorul **ex2**. +Veți rezolva exercițiul plecând de la fișierul **delete-first.c** aflat în directorul **2-delete-first**. Dându-se un șir de caractere și un pattern să se implementeze funcția `delete_first(char *s, char *pattern)` care întoarce șirul obținut prin ștergerea primei apariții a pattern-ului în s. @@ -405,7 +407,7 @@ Dându-se un șir de caractere și un pattern să se implementeze funcția `dele ### **3. Pixels** -Veți rezolva exercițiul plecând de la fișierul **ex3.c** aflat în directorul **ex3.** +Veți rezolva exercițiul plecând de la fișierul **pixels.c** aflat în directorul **3-pixels**. Se consideră structura unui pixel și a unei imagini descrise în fișierul `pixel.h`: @@ -415,10 +417,10 @@ typedef struct Pixel { unsigned char G; unsigned char B; } Pixel; - + typedef struct Picture { - int height; - int width; + int height; + int width; Pixel **pix_array; } Picture; ``` @@ -443,7 +445,7 @@ p.b = 0.11 * p.b; ### **4. Find-Max** -Veți rezolva exercițiul plecând de la fișierul **ex4.c** aflat în directorul **ex4**. +Veți rezolva exercițiul plecând de la fișierul **find-max.c** aflat în directorul **4-find-max**. Deschideți scheletul de cod și implementați funcțiile: ```c @@ -456,14 +458,14 @@ compare(const void *a, const void *b) ### **5. Tutorial GDB: Depanarea unui SEG Fault** -Veți rezolva exercițiul plecând de la fișierul **ex5.c** aflat în directorul **ex5**. +Veți rezolva exercițiul plecând de la fișierul **segfault.c** aflat în directorul **5-segfault**. Urmăriți și compilați codul sursă din schelet (în cazul în care nu folosiți Makefile-ul, asigurați-vă să compilați sursa cu flag-ul -g . Pe scurt, programul primește un număr n, alocă un vector de dimensiune n pe care-l inițializează cu primele n numere din șirul lui Fibonacci. Totuși, în urma rulării se afisează: Segmentation fault (core dumped). Porniți cu GDB executabilul: ```bash -gdb ./seg +gdb ./segfault ``` După ce ați pornit programul GDB, toată interacțiunea cu acesta se face prin prompt-ul de GDB. Lansați programul în execuție folosind comanda run. Ce observați? GDB se blochează la citirile de la input. @@ -490,25 +492,25 @@ Ce s-a întamplat? Am accesat o zonă de memorie cu acces restricționat. ### **6. Inspectarea datelor** -Veți rezolva exercițiul plecând de la fișierul **ex6.c** aflat în directorul **ex6**. +Veți rezolva exercițiul plecând de la fișierul **inspect.c** aflat în directorul **6-inspect**. Se dau următoarele declarații: ```c #include - + int main() { unsigned int a = 4127; int b = -27714; short c = 1475; int v[] = {0xCAFEBABE, 0xDEADBEEF, 0x0B00B135, 0xBAADF00D, 0xDEADC0DE}; - + unsigned int *int_ptr = (unsigned int *) &v; - + for (int i = 0 ; i < sizeof(v) / sizeof(*int_ptr) ; ++i) { ++int_ptr; } - + return 0; } ``` @@ -521,7 +523,7 @@ Compilați codul sursă și porniți executabilul cu GDB. Setați un breakpoint ### **7. Bonus** -Veți rezolva exercițiul plecând de la fișierul **ex7.c** aflat în directorul **ex7**. +Veți rezolva exercițiul plecând de la fișierul **pointers.c** aflat în directorul **7-pointers**. Să se implementeze funcțiile [memcpy](http://www.cplusplus.com/reference/cstring/memcpy/), [strcpy](http://www.cplusplus.com/reference/cstring/strcpy/) și [strcmp](http://www.cplusplus.com/reference/cstring/strcmp/) folosind operații pe pointeri. @@ -537,11 +539,11 @@ pwndbg> set context-sections 'regs code stack' # afișare zonă de memorie în hex + ASCII pwndbg> hexdump $ecx # afișare stivă -pwndbg> stack +pwndbg> stack # afișare permanentă memory dump 8 octeți -pwndbg> ctx-watch execute "x/8xb &msg" - -# setări recomandate în .gdbinit +pwndbg> ctx-watch execute "x/8xb &msg" + +# setări recomandate în .gdbinit set context-sections 'regs code expressions' set show-flags on set dereference-limit 1 diff --git a/laborator/content/operatii-memorie-gdb/ex1/Makefile b/laborator/content/operatii-memorie-gdb/ex1/Makefile deleted file mode 100644 index 842d275d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex1/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex1/ex1.c b/laborator/content/operatii-memorie-gdb/ex1/ex1.c deleted file mode 100644 index def8670f..00000000 --- a/laborator/content/operatii-memorie-gdb/ex1/ex1.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -/** - * Afisati adresele elementelor din vectorul "v" impreuna cu valorile - * de la acestea. - * Parcurgeti adresele, pe rand, din octet in octet, - * din 2 in 2 octeti si apoi din 4 in 4. - */ - -int main() { - int v[] = {0xCAFEBABE, 0xDEADBEEF, 0x0B00B135, 0xBAADF00D, 0xDEADC0DE}; - - return 0; -} diff --git a/laborator/content/operatii-memorie-gdb/ex2/Makefile b/laborator/content/operatii-memorie-gdb/ex2/Makefile deleted file mode 100644 index 842d275d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex2/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex2/ex2.c b/laborator/content/operatii-memorie-gdb/ex2/ex2.c deleted file mode 100644 index df61486d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex2/ex2.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -char* delete_first(char *s, char *pattern); - -int main(){ - char *s = "Ana are mere"; - char *pattern = "re"; - - // Decomentati linia dupa ce ati implementat functia delete_first. - // printf("%s\n", delete_first(s, pattern)); - - return 0; -} diff --git a/laborator/content/operatii-memorie-gdb/ex3/Makefile b/laborator/content/operatii-memorie-gdb/ex3/Makefile deleted file mode 100644 index 842d275d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex3/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex3/ex3.c b/laborator/content/operatii-memorie-gdb/ex3/ex3.c deleted file mode 100644 index a9dbc68d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex3/ex3.c +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include -#include -#include -#include "pixel.h" - -/* - TODO a - Functia primeste ca parametru o imagine si intoarce imaginea rasturnata. - Prin imagine rasturnata se intelege inversarea liniilor matricei pix_array - din structura lui Picture, astfel: Linia 1 devine linia n, linia 2 devine - linia n - 1, etc. -*/ - -void reversePic(Picture *pic); - -/* - TODO b - Functia primeste ca parametru o imagine si intoarce noua imagine obtinuta - prin convertirea fiecarui pixel la valoarea sa grayscale. - Valoarea grayscale a unui pixel sa calculeaza dupa urmatoarea formula: - p.r = 0.3 * p.r; - p.g = 0.59 * p.g; - p.b = 0.11 * p.b; -*/ - -void colorToGray(Picture *pic); - -/* - Structura unui pixel, cea a unei imagini, precum si generarea acestora - sunt definite in pixel.h. Programul primeste de la tastatura inaltimea - si latimea imaginii. De preferat, introduceti valori mici pentru - a fi usor de verificat ulterior. - Folositi functia printPicture pentru a printa componentele imaginii. - Dupa ce ati realizat un TODO, apelati functia corespunzatoare in main - urmata de printPicture pentru a vedea daca se obtine rezultatul dorit. -*/ - -int main() { - int height, width; - scanf("%d%d", &height, &width); - Pixel **pix_array = generatePixelArray(height, width); - Picture *pic = generatePicture(height, width, pix_array); - - printPicture(pic); - - freePicture(&pic); - freePixelArray(&pix_array, height, width); - - return 0; -} diff --git a/laborator/content/operatii-memorie-gdb/ex4/Makefile b/laborator/content/operatii-memorie-gdb/ex4/Makefile deleted file mode 100644 index 842d275d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex4/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex4/ex4.c b/laborator/content/operatii-memorie-gdb/ex4/ex4.c deleted file mode 100644 index 6589fea0..00000000 --- a/laborator/content/operatii-memorie-gdb/ex4/ex4.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include - -/* - Functie generica pentru calcularea valorii maxime dintr-un array. - n este dimensiunea array-ului - element_size este dimensiunea unui element din array - Se va parcurge vectorul arr, iar la fiecare iteratie sa va verifica - daca functia compare intoarce 1, caz in care elementul curent va fi - si cel maxim. - Pentru a folosi corect aritmetica pe pointeri vom inmulti indexul curent - din parcurgere cu dimensiunea unui element. - Astfel, pentru accesarea elementului curent avem: - void *cur_element = (char *)arr + index * element_size; -*/ - -void *find_max(void *arr, int n, int element_size, - int (*compare)(const void *, const void *)) { - void *max_elem = arr; - return max_elem; -} - -/* - a si b sunt doi pointeri la void, dar se specifica in enunt - ca datele de la acele adrese sunt de tip int, asadar trebuie - castati. - Functia returneaza 1 daca valorea de la adresa lui a este mai - mare decat cea de la adresa lui b, in caz contrar returneaza 0. -*/ - -int compare(const void *a, const void *b); - -/* - Se citeste de la tastatura un vector si se cere sa se afle - elementul maxim folosind functia find_max. - Rezultatul functiei find_max trebuie cast la int, spre exemplu: - int *res = (*int) find_max(...); -*/ -int main() { - int n; - scanf("%d", &n); - - int *arr = malloc(n * sizeof(*arr)); - - for (int i = 0 ; i < n; ++i) - scanf("%d", &arr[i]); - - free(arr); - return 0; -} diff --git a/laborator/content/operatii-memorie-gdb/ex5/Makefile b/laborator/content/operatii-memorie-gdb/ex5/Makefile deleted file mode 100644 index d6577f97..00000000 --- a/laborator/content/operatii-memorie-gdb/ex5/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc -CFLAGS = -g - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) $(CFLAGS) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex6/Makefile b/laborator/content/operatii-memorie-gdb/ex6/Makefile deleted file mode 100644 index d6577f97..00000000 --- a/laborator/content/operatii-memorie-gdb/ex6/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc -CFLAGS = -g - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) $(CFLAGS) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/operatii-memorie-gdb/ex7/Makefile b/laborator/content/operatii-memorie-gdb/ex7/Makefile deleted file mode 100644 index 842d275d..00000000 --- a/laborator/content/operatii-memorie-gdb/ex7/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#IOCLA REMEMBERS - -SRC = $(shell find . -name *.c | cut -c3-) -OBJ = $(basename $(SRC)) -CC = gcc - -.PHONY: all -all: build - -.PHONY: build -build: - $(CC) $(SRC) -o $(OBJ) - -.PHONY: run -run: - ./$(OBJ) - -.PHONY: clean -clean: - rm $(OBJ) diff --git a/laborator/content/toolchain-decompilare/2-warm-up-gotos/Makefile b/laborator/content/toolchain-decompilare/2-warm-up-gotos/Makefile new file mode 100644 index 00000000..5097a480 --- /dev/null +++ b/laborator/content/toolchain-decompilare/2-warm-up-gotos/Makefile @@ -0,0 +1,2 @@ +BINARIES := bogosort ignore_the_comments +include ../../utils/Makefile.single diff --git a/laborator/content/toolchain-decompilare/2-warm-up-gotos/bogosort.c b/laborator/content/toolchain-decompilare/2-warm-up-gotos/bogosort.c index 29d20eb4..cda09e67 100644 --- a/laborator/content/toolchain-decompilare/2-warm-up-gotos/bogosort.c +++ b/laborator/content/toolchain-decompilare/2-warm-up-gotos/bogosort.c @@ -4,7 +4,7 @@ /* checks if the array is sorted */ static int is_sorted(int a[], int n) { - size_t i; + int i; for (i = 1; i < n; i++) if (a[i] < a[i-1]) @@ -16,7 +16,7 @@ static int is_sorted(int a[], int n) /* shuffle an array */ static void shuffle(int a[], int n) { - size_t i; + int i; int t, r; for (i = 0; i < n; i++) { diff --git a/laborator/content/toolchain-decompilare/3-goto-algs/Makefile b/laborator/content/toolchain-decompilare/3-goto-algs/Makefile new file mode 100644 index 00000000..a000700c --- /dev/null +++ b/laborator/content/toolchain-decompilare/3-goto-algs/Makefile @@ -0,0 +1,2 @@ +BINARIES := binary_search vector_max +include ../../utils/Makefile.single diff --git a/laborator/content/toolchain-decompilare/3-goto-algs/binary_search.c b/laborator/content/toolchain-decompilare/3-goto-algs/binary_search.c index 970b4c12..9721d663 100644 --- a/laborator/content/toolchain-decompilare/3-goto-algs/binary_search.c +++ b/laborator/content/toolchain-decompilare/3-goto-algs/binary_search.c @@ -1,6 +1,6 @@ #include -void main(void) +int main(void) { int v[] = {1, 2, 15, 51, 53, 66, 202, 7000}; int dest = v[2]; /* 15 */ @@ -8,4 +8,7 @@ void main(void) int end = sizeof(v) / sizeof(int) - 1; /* TODO: Implement binary search */ + (void) dest; + (void) start; + (void) end; } diff --git a/laborator/content/toolchain-decompilare/3-goto-algs/vector_max.c b/laborator/content/toolchain-decompilare/3-goto-algs/vector_max.c index 02ca99e4..b548d13e 100644 --- a/laborator/content/toolchain-decompilare/3-goto-algs/vector_max.c +++ b/laborator/content/toolchain-decompilare/3-goto-algs/vector_max.c @@ -1,6 +1,6 @@ #include -void main(void) +int main(void) { int v[] = {4, 1, 2, -17, 15, 22, 6, 2}; int max; @@ -9,4 +9,7 @@ void main(void) /* TODO: Implement finding the maximum value in the vector */ max = v[0]; i = 1; + + (void) i; + (void) max; } diff --git a/laborator/content/toolchain-decompilare/4-tutorial-ghidra/Makefile b/laborator/content/toolchain-decompilare/4-tutorial-ghidra/Makefile index f11be245..c2d05d2f 100644 --- a/laborator/content/toolchain-decompilare/4-tutorial-ghidra/Makefile +++ b/laborator/content/toolchain-decompilare/4-tutorial-ghidra/Makefile @@ -1,4 +1,2 @@ -build: - gcc crackme.c -o crackme -clean: - rm crackme +PROGNAME := crackme +include ../../utils/Makefile.generic diff --git a/laborator/content/toolchain-decompilare/README.md b/laborator/content/toolchain-decompilare/README.md index 1dfe9da6..9601d818 100644 --- a/laborator/content/toolchain-decompilare/README.md +++ b/laborator/content/toolchain-decompilare/README.md @@ -1,7 +1,4 @@ -# Laborator 03: Toolchain - -În acest laborator, vom trece prin fiecare nivel de procesare al unui limbaj de nivel înalt și prin toolchain-ul -pe care îl vom folosi de acum încolo. +# Laborator 4: Toolchain ## C basics: GOTOs @@ -152,114 +149,6 @@ programarea cu goto-uri ne pregătește pentru lucrul în limbajul de asamblare. >**WARNING**: În orice alt caz, această formă de programare ar trebui evitată pe cât posibil. ![goto.png]( https://imgs.xkcd.com/comics/goto.png) -## De la C la program în rulare - -Etapele prin care trece un program din momentul în care este scris până când este rulat ca un proces sunt, in ordine: - -- preprocesare -- compilare -- asamblare -- link editare - -În imaginea de mai jos sunt reprezentate si detaliate aceste etape: - -![phases-full.png](https://ocw.cs.pub.ro/courses/_media/iocla/laboratoare/phases-full.png?cache=) - -În etapa de `compilare` codul este tradus din cod de nivel înalt în limbaj de asamblare. Limbajul de asamblare este -o formă human-readable a ce ajunge procesorul să execute efectiv. Dacă programele scrise în limbaje de nivel înalt ajung -să fie portate ușor pentru procesoare diferite (arm, powerpc, x86, etc.), cele scrise în limbaj de asamblare sunt -implementări specifice unei anumite arhitecturi. Limbaje de nivel înalt reprezintă o formă mai abstractă de rezolvare a -unei probleme, din punctul de vedere al unui procesor, motiv pentru care și acestea trebuie traduse în limbaj de asamblare -în cele din urmă, pentru a se putea ajunge la un binar care poate fi rulat. Mai multe detalii în laboratorul următor. - -Majoritatea compilatoarelor oferă opțiunea de a genera și un fișier cu programul scris în limbaj de asamblare. - ->**NOTE**: În cazul compilatorului `gcc` este de ajuns să adăugați flag-ul `-S` și vă va genera un -fișier `*.s` cu codul aferent. În arhiva de `TODO` aveți un exemplu de trecere a unui program -foarte simplu `hello.c` prin cele patru faze. Îl puteți testa pe un sistem Unix/Linux și pe un sistem Windows cu suport de MinGW. -```shell -$ make -cc -E -o hello.i hello.c -cc -Wall -S -o hello.s hello.i -cc -c -o hello.o hello.s -cc -o hello hello.o - -$ ls -Makefile hello hello.c hello.i hello.o hello.s - -$ ./hello -Hello, World! - -$ tail -10 hello.i - - -# 5 "hello.c" -int main(void) -{ - puts("Hello, World!"); - - return 0; -} - -$ cat hello.s - .file "hello.c" - .section .rodata -.LC0: - .string "Hello, World!" - .text - .globl main - .type main, @function -main: -.LFB0: - .cfi_startproc - pushq %rbp - .cfi_def_cfa_offset 16 - .cfi_offset 6, -16 - movq %rsp, %rbp - .cfi_def_cfa_register 6 - movl $.LC0, %edi - call puts - movl $0, %eax - popq %rbp - .cfi_def_cfa 7, 8 - ret - .cfi_endproc -.LFE0: - .size main, .-main - .ident "GCC: (Debian 5.2.1-17) 5.2.1 20150911" - .section .note.GNU-stack,"",@progbits - -$ file hello.o -hello.o: ELF 64-bit LSB relocatable, x86-64, [...] - -$ file hello -hello: ELF 64-bit LSB executable, x86-64, [...] - -$ objdump -d hello.o - -hello.o: file format elf64-x86-64 - - -Disassembly of section .text: - -0000000000000000
: - 0: 55 push %rbp - 1: 48 89 e5 mov %rsp,%rbp - 4: bf 00 00 00 00 mov $0x0,%edi - 9: e8 00 00 00 00 callq e - e: b8 00 00 00 00 mov $0x0,%eax - 13: 5d pop %rbp - 14: c3 retq -``` - -Pentru a genera sintaxa intel pe 32 de biți, se pot folosi aceste opțiuni: -```shell -cc -Wall -m32 -S -masm=intel -o hello.s hello.i -``` - - -## Toolchain - În cadrul laboratoarelor vom folosi: - asamblorul [NASM](https://www.nasm.us/) - linkerul din cadrul suitei gcc @@ -287,6 +176,8 @@ pentru că există relația de 1:1 între cod mașină și limbaj de asamblare.< Veți utiliza cele două opțiuni în cadrul laboratorului de astăzi, pentru a analiza niște binare simple. +## Exerciții + >**WARNING**: În cadrul laboratoarelor vom folosi repository-ul de git al materiei IOCLA - [https://github.com/systems-cs-pub-ro/iocla](https://github.com/systems-cs-pub-ro/iocla). @@ -419,7 +310,3 @@ Folosind informațiile noi dobândite despre Ghidra, dar și cele învățate an Programul generează o valoare aleatoare și vă cere să ghiciți o altă valoare calculată pe baza valorii aleatoare.
Mult succes! - -## Soluții - -Soluțiile pentru exerciții sunt disponibile [aici](https://elf.cs.pub.ro/asm/res/laboratoare/lab-03-sol.zip). \ No newline at end of file diff --git a/laborator/lab-03 b/laborator/lab-03 index c50c3c21..dba1e563 120000 --- a/laborator/lab-03 +++ b/laborator/lab-03 @@ -1 +1 @@ -content/toolchain-decompilare \ No newline at end of file +content/etapele-compilarii \ No newline at end of file diff --git a/laborator/lab-04 b/laborator/lab-04 index 78c85a70..c50c3c21 120000 --- a/laborator/lab-04 +++ b/laborator/lab-04 @@ -1 +1 @@ -content/linking \ No newline at end of file +content/toolchain-decompilare \ No newline at end of file