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/reprezentare-numere/2-len_xor/len_xor.c b/laborator/content/reprezentare-numere/2-len_xor/len_xor.c index c199ea03..b6a93087 100644 --- a/laborator/content/reprezentare-numere/2-len_xor/len_xor.c +++ b/laborator/content/reprezentare-numere/2-len_xor/len_xor.c @@ -4,21 +4,33 @@ int my_strlen(const char *str) { - /* TODO */ - (void) str; - - return -1; + int contor=0; + while ( *(str+contor) ){ + contor++; + } + return contor; + } -void equality_check(const char *str) +void equality_check(const char *str,int lenght) { - /* TODO */ - (void) str; + int contor=0; + while(contor < lenght){ + if(!(*(str+contor)^*(str+contor+ (1< #include #include -void mirror(char *s) +void mirror( char * s) { - /* TODO */ + + int lenght = 0; + while( *(s + lenght) ){ + lenght++; + } + // printf("%d", lenght); + + for(int i = 0 ; i < (lenght>>1); i++){ + char aux = *(s + i); + // printf("prima data e : %c",*(s + i) ); + *(s + i) = *(s + lenght - i -1); + // printf(" se schimba in : %c ", *(s + i) ); + *(s + lenght - i -1) = aux; + } (void) s; } int main() { - /* TODO: Test function */ - + char s[10]; + scanf("%s", s); + mirror(s); + printf("%s",s); return 0; } diff --git a/laborator/content/reprezentare-numere/4-rotations/rotations.c b/laborator/content/reprezentare-numere/4-rotations/rotations.c index 7a66802d..3b9021db 100644 --- a/laborator/content/reprezentare-numere/4-rotations/rotations.c +++ b/laborator/content/reprezentare-numere/4-rotations/rotations.c @@ -1,22 +1,43 @@ #include void rotate_left(int *number, int bits) -{ - /* TODO */ +{ + + printf("numar: %d \n", *number); + int copie = *number; + *number = *number << bits; + printf("numar: %d \n", *number); + printf(" copie: %d \n", copie); + copie = copie >> (32-bits); + printf(" copie modificata: %d \n", copie); + *number = *number | copie; + (void) number; (void) bits; } void rotate_right(int *number, int bits) { - /* TODO */ + int copie=*number; + *number = *number >> bits; + printf("numar: %d \n", *number); + printf(" copie: %d \n", copie); + copie = copie << (32-bits); + printf(" copie modificata: %d \n", copie); + *number = *number | copie; + (void) number; (void) bits; } int main() { - /* TODO: Test functions */ + int number,bits; + scanf("%d %d", &number , &bits); + rotate_left(&number,bits); + // rotate_right(&number,bits); + printf("%d",number); + return 0; } diff --git a/laborator/content/reprezentare-numere/5-odd_even/odd_even.c b/laborator/content/reprezentare-numere/5-odd_even/odd_even.c index c970e6fa..229da132 100644 --- a/laborator/content/reprezentare-numere/5-odd_even/odd_even.c +++ b/laborator/content/reprezentare-numere/5-odd_even/odd_even.c @@ -1,23 +1,91 @@ #include #include +void print_hexa(int number, int nr_bits) +{ int necesari=nr_bits; + printf("0x"); + while(((necesari >>2 )<<2) ^ necesari ){ + necesari=necesari + 1; + printf("0"); + } +// printf("nr biti : %d", nr_bits); + for(int i=nr_bits-1; i >= 0;i--){ + if((number>>(4*i) == 15)) + printf("F"); + else if(number>>4*i == 14) + printf("E"); + else if((number>>4*i) == 13) + printf("D"); + else if((number>>4*i) == 12) + printf("C"); + else if((number>>4*i )== 11) + printf("B"); + else if((number>>4*i) == 10) + printf("A"); + else if ((number>>4*i)<10) + printf("%d" ,number>>(4*i)); + + number=number-((number>>(4*i))<<(4*i)); + } + + printf("\n"); + (void) number; + (void) nr_bits; +} + void print_binary(int number, int nr_bits) -{ - /* TODO */ +{ int necesari=nr_bits; + printf("0b"); + while(((necesari >>2 )<<2) ^ necesari ){ + necesari=necesari + 1; + printf("0"); + } + + for(int i=nr_bits -1; i >= 0;i--){ + if(number>>i){ + printf("1"); + number=number-((number>>i)<>1)<<1) ^ ( *(numbers+i) ) ) { //daca e impar + while(*(numbers+i)>>(4*nr_bits)) + nr_bits++; + print_hexa(*(numbers+i),nr_bits); + nr_bits = 0; + + }else{ + + while(*(numbers+i)>>nr_bits) + nr_bits = nr_bits + 4; + print_binary(*(numbers+i), nr_bits); + nr_bits = 0; + } + } + (void) numbers; (void) n; } int main() { - /* TODO: Test functions */ + int n; + scanf("%d", &n); + int v[n]; + for(int i = 0;i < n;i++){ + scanf("%d", v+i); + } + check_parity(v,n); return 0; } diff --git a/laborator/content/reprezentare-numere/ex1.txt b/laborator/content/reprezentare-numere/ex1.txt new file mode 100644 index 00000000..59005211 --- /dev/null +++ b/laborator/content/reprezentare-numere/ex1.txt @@ -0,0 +1,6 @@ +121-> 1111001 +18446-> 10010000010 + +->50642 +->0x8c1f + 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