Initial commit

This commit is contained in:
2026-01-09 14:29:09 +01:00
commit 20291d04ad
10 changed files with 349 additions and 0 deletions

25
Colleen/ASM/Colleen.s Normal file
View File

@@ -0,0 +1,25 @@
;Colleen
section .text
extern printf
global main
main:
push rbp
mov rbp, rsp
sub rsp, 32
and rsp, 0xFFFFFFFFFFFFFFF0
mov rdi, fmt
mov rax, 0
mov rsi, 10
mov rdx, fmt
mov rcx, 34
call printf wrt ..plt
add rsp, 32
pop rbp
mov rax,0
ret
section .data
fmt:
db ";Colleen%1$csection .text%1$c extern printf%1$c global main%1$cmain:%1$c push rbp%1$c mov rbp, rsp%1$c sub rsp, 32%1$c and rsp, 0xFFFFFFFFFFFFFFF0%1$c%1$c mov rdi, fmt%1$c mov rax, 0%1$c mov rsi, 10%1$c mov rdx, fmt%1$c mov rcx, 34%1$c call printf wrt ..plt%1$c%1$c add rsp, 32%1$c pop rbp%1$c%1$c mov rax,0%1$c ret%1$csection .data%1$c fmt:%1$c db %3$c%2$s%3$c, 0%1$c", 0

57
Colleen/ASM/Makefile Normal file
View File

@@ -0,0 +1,57 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: lejulien <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/07/05 18:43:38 by lejulien #+# #+# #
# Updated: 2022/07/28 12:58:35 by lejulien ### ########.fr #
# #
# **************************************************************************** #
SRCS = ./Colleen.s
SRCS_OBJS = ${SRCS:.s=.o}
FLAGS = -f elf64
.s.o:
nasm $(FLAGS) $(SRCS) -o $(SRCS_OBJS)
NAME = Colleen
$(NAME): $(SRCS_OBJS)
@echo "\e[1;35m _ _ _ _ _ _ _ "
@echo "\e[1;35m /\ \ /\ \ \e[1;31m43 6F 6C 6C 65 65 6E\e[1;35m /\ \ /\_\ /\ \ /\ \ _ /\ \ "
@echo "\e[1;35m / \ \____ / \ \ \e[1;32mby lejulien\e[1;35m / \ \ / / / _ \ \ \ / \ \ /\_\ / \ \ "
@echo "\e[1;35m / /\ \_____\ / /\ \ \ / /\ \ \ \ \ \__ /\_\ /\ \_\ / /\ \ \_/ / // /\ \ \ "
@echo "\e[1;35m / / /\/___ // / /\ \_\ / / /\ \ \ \ \___\ / / / / /\/_/ / / /\ \___/ // / /\ \_\ "
@echo "\e[1;35m / / / / / // / /_/ / / / / / \ \_\ \__ / / / / / / / / / / \/____// /_/_ \/_/ "
@echo "\e[1;35m / / / / / // / /__\/ / / / / _ / / / / / / / / / / / / / / / / / // /____/\ "
@echo "\e[1;35m/ / / / / // / /_____/ ___________ / / / /\ \/ / / / / / / / / / / / / / / / // /\____\/ "
@echo "\e[1;35m\ \ \__/ / // / /\ \ \ ___/__________/\ / / /__\ \ \/ / / /___/ / /___/ / /__ / / / / / // / /______ "
@echo "\e[1;35m \ \___\/ // / / \ \ \/__________ \ \/ / /____\ \ \/ / /____\/ //\__\/_/___\/ / / / / // / /_______\ "
@echo "\e[1;35m \/_____/ \/_/ \_\/\____\/ \____\/\/________\_\/\/_________/ \/_________/\/_/ \/_/ \/__________/ "
gcc $(SRCS_OBJS) -o $(NAME)
clean:
rm -f $(SRCS_OBJS)
fclean: clean
rm -f $(NAME)
comp: $(NAME)
@cat Colleen.s > file_o
@./Colleen > bin_o
diff file_o bin_o
@rm bin_o
@rm file_o
@rm Colleen.o
@rm Colleen
re: fclean $(NAME)
.PHONY: clean fclean re

17
Colleen/C/Colleen.c Normal file
View File

@@ -0,0 +1,17 @@
#include <stdio.h>
#define FORMAT "#include <stdio.h>%1$c#define FORMAT %3$c%2$s%3$c%1$c%1$c/*%1$c This string format the code%1$c*/%1$c%1$cvoid generate() {%1$c printf(FORMAT, 10, FORMAT, 34);%1$c}%1$c%1$cint main(void) {%1$c /*%1$c Call generate function%1$c */%1$c generate();%1$c}%1$c"
/*
This string format the code
*/
void generate() {
printf(FORMAT, 10, FORMAT, 34);
}
int main(void) {
/*
Call generate function
*/
generate();
}

58
Colleen/C/Makefile Normal file
View File

@@ -0,0 +1,58 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: lejulien <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/07/05 18:43:38 by lejulien #+# #+# #
# Updated: 2022/07/28 12:58:35 by lejulien ### ########.fr #
# #
# **************************************************************************** #
SRCS = ./Colleen.c
SRCS_OBJS = ${SRCS:.c=.o}
FLAGS = -Wall -Wextra -Werror
.c.o:
gcc -c $< -o $(<:.c=.o)
NAME = Colleen
$(NAME): $(SRCS_OBJS)
@echo "\e[1;35m _ _ _ _ _ _ _ "
@echo "\e[1;35m /\ \ /\ \ \e[1;31m43 6F 6C 6C 65 65 6E\e[1;35m /\ \ /\_\ /\ \ /\ \ _ /\ \ "
@echo "\e[1;35m / \ \____ / \ \ \e[1;32mby lejulien\e[1;35m / \ \ / / / _ \ \ \ / \ \ /\_\ / \ \ "
@echo "\e[1;35m / /\ \_____\ / /\ \ \ / /\ \ \ \ \ \__ /\_\ /\ \_\ / /\ \ \_/ / // /\ \ \ "
@echo "\e[1;35m / / /\/___ // / /\ \_\ / / /\ \ \ \ \___\ / / / / /\/_/ / / /\ \___/ // / /\ \_\ "
@echo "\e[1;35m / / / / / // / /_/ / / / / / \ \_\ \__ / / / / / / / / / / \/____// /_/_ \/_/ "
@echo "\e[1;35m / / / / / // / /__\/ / / / / _ / / / / / / / / / / / / / / / / / // /____/\ "
@echo "\e[1;35m/ / / / / // / /_____/ ___________ / / / /\ \/ / / / / / / / / / / / / / / / // /\____\/ "
@echo "\e[1;35m\ \ \__/ / // / /\ \ \ ___/__________/\ / / /__\ \ \/ / / /___/ / /___/ / /__ / / / / / // / /______ "
@echo "\e[1;35m \ \___\/ // / / \ \ \/__________ \ \/ / /____\ \ \/ / /____\/ //\__\/_/___\/ / / / / // / /_______\ "
@echo "\e[1;35m \/_____/ \/_/ \_\/\____\/ \____\/\/________\_\/\/_________/ \/_________/\/_/ \/_/ \/__________/ "
gcc -o $(NAME) $(SRCS_OBJS) $(FLAGS)
clean:
rm -f $(SRCS_OBJS)
fclean: clean
rm -f $(NAME)
comp: $(NAME)
@cat Colleen.c > file_o
@./Colleen > bin_o
diff file_o bin_o
@rm bin_o
@rm file_o
@rm Colleen.o
@rm Colleen
re: fclean $(NAME)
.PHONY: clean fclean re

8
Grace/C/Grace.c Normal file
View File

@@ -0,0 +1,8 @@
#include <stdio.h>
#define F "#include <stdio.h>%1$c#define F %2$c%3$s%2$c%1$c#define PF() fprintf(o, F, 10, 34, F);%1$c#define FT()int main(){FILE *o=fopen(%2$c./Grace_kid.c%2$c, %2$cw%2$c);PF() fclose(o);}%1$c/*%1$c This will call the main and the defined format, everything will be replaced in compile-time%1$c*/%1$cFT()%1$c"
#define PF() fprintf(o, F, 10, 34, F);
#define FT()int main(){FILE *o=fopen("./Grace_kid.c", "w");PF() fclose(o);}
/*
This will call the main and the defined format, everything will be replaced in compile-time
*/
FT()

56
Grace/C/Makefile Normal file
View File

@@ -0,0 +1,56 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: lejulien <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/07/05 18:43:38 by lejulien #+# #+# #
# Updated: 2022/07/28 14:21:48 by lejulien ### ########.fr #
# #
# **************************************************************************** #
SRCS = ./Grace.c
SRCS_OBJS = ${SRCS:.c=.o}
FLAGS = -Wall -Wextra -Werror
.c.o:
gcc -c $< -o $(<:.c=.o)
NAME = Grace
$(NAME): $(SRCS_OBJS)
@echo "\e[1;35m _ _ _ _ _ _ _ "
@echo "\e[1;35m /\ \ /\ \ \e[1;31m 47 72 61 63 65 \e[1;35m /\ \ /\_\ /\ \ /\ \ _ /\ \ "
@echo "\e[1;35m / \ \____ / \ \ \e[1;32mby lejulien\e[1;35m / \ \ / / / _ \ \ \ / \ \ /\_\ / \ \ "
@echo "\e[1;35m / /\ \_____\ / /\ \ \ / /\ \ \ \ \ \__ /\_\ /\ \_\ / /\ \ \_/ / // /\ \ \ "
@echo "\e[1;35m / / /\/___ // / /\ \_\ / / /\ \ \ \ \___\ / / / / /\/_/ / / /\ \___/ // / /\ \_\ "
@echo "\e[1;35m / / / / / // / /_/ / / / / / \ \_\ \__ / / / / / / / / / / \/____// /_/_ \/_/ "
@echo "\e[1;35m / / / / / // / /__\/ / / / / _ / / / / / / / / / / / / / / / / / // /____/\ "
@echo "\e[1;35m/ / / / / // / /_____/ ___________ / / / /\ \/ / / / / / / / / / / / / / / / // /\____\/ "
@echo "\e[1;35m\ \ \__/ / // / /\ \ \ ___/__________/\ / / /__\ \ \/ / / /___/ / /___/ / /__ / / / / / // / /______ "
@echo "\e[1;35m \ \___\/ // / / \ \ \/__________ \ \/ / /____\ \ \/ / /____\/ //\__\/_/___\/ / / / / // / /_______\ "
@echo "\e[1;35m \/_____/ \/_/ \_\/\____\/ \____\/\/________\_\/\/_________/ \/_________/\/_/ \/_/ \/__________/ "
gcc -o $(NAME) $(SRCS_OBJS) $(FLAGS)
clean:
rm -f $(SRCS_OBJS)
fclean: clean
rm -f $(NAME)
rm -f $(NAME)_kid.c
comp: $(NAME)
./${NAME}
diff Grace_kid.c Grace.c
@rm Grace_kid.c
@rm -f $(SRC_OBJS)
re: fclean $(NAME)
.PHONY: clean fclean re

26
README.md Normal file
View File

@@ -0,0 +1,26 @@
# quine concepts
A quine is basically a program that write it's own source code.
For this project we had to do 3 quine that are graduatly more difficult.
## Description
- Colleen:
This one is simple enough to start understanding how quine are made.
And so with some research I learned that a quine in C works with a format string and printf
```C
// General algorythm of a quine in C
char f[] = "__CODE_PRINTF_FORMATED__";
int main (int ac, char **av) {
printf(f, __SOME_VARS_, f, _SOME_VARS_);
}
```
And so, we can see that the with the first f we write the file. And with the second one we manage to write it's own format again.
After this the trick is using diff until there are no diffs.
- Grace:
This one is that you have to create a new file and write the code inside instead of outputting it.
Plus you'll need to define you main.
- Sully:
The last one like Grace but you input a number to the program and it will create n file and create n executables.
But not 0 to stop it;

50
Sully/C/Makefile Normal file
View File

@@ -0,0 +1,50 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: lejulien <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/07/05 18:43:38 by lejulien #+# #+# #
# Updated: 2022/07/29 12:58:41 by lejulien ### ########.fr #
# #
# **************************************************************************** #
SRCS = ./Sully.c
SRCS_OBJS = ${SRCS:.c=.o}
FLAGS = -Wall -Wextra -Werror
.c.o:
gcc -c $< -o $(<:.c=.o)
NAME = Sully
$(NAME): $(SRCS_OBJS)
@echo "\e[1;35m _ _ _ _ _ _ _ "
@echo "\e[1;35m /\ \ /\ \ \e[1;31m 53 75 6C 6C 79 \e[1;35m /\ \ /\_\ /\ \ /\ \ _ /\ \ "
@echo "\e[1;35m / \ \____ / \ \ \e[1;32mby lejulien\e[1;35m / \ \ / / / _ \ \ \ / \ \ /\_\ / \ \ "
@echo "\e[1;35m / /\ \_____\ / /\ \ \ / /\ \ \ \ \ \__ /\_\ /\ \_\ / /\ \ \_/ / // /\ \ \ "
@echo "\e[1;35m / / /\/___ // / /\ \_\ / / /\ \ \ \ \___\ / / / / /\/_/ / / /\ \___/ // / /\ \_\ "
@echo "\e[1;35m / / / / / // / /_/ / / / / / \ \_\ \__ / / / / / / / / / / \/____// /_/_ \/_/ "
@echo "\e[1;35m / / / / / // / /__\/ / / / / _ / / / / / / / / / / / / / / / / / // /____/\ "
@echo "\e[1;35m/ / / / / // / /_____/ ___________ / / / /\ \/ / / / / / / / / / / / / / / / // /\____\/ "
@echo "\e[1;35m\ \ \__/ / // / /\ \ \ ___/__________/\ / / /__\ \ \/ / / /___/ / /___/ / /__ / / / / / // / /______ "
@echo "\e[1;35m \ \___\/ // / / \ \ \/__________ \ \/ / /____\ \ \/ / /____\/ //\__\/_/___\/ / / / / // / /_______\ "
@echo "\e[1;35m \/_____/ \/_/ \_\/\____\/ \____\/\/________\_\/\/_________/ \/_________/\/_/ \/_/ \/__________/ "
gcc -o $(NAME) $(SRCS_OBJS) $(FLAGS)
clean:
rm -f $(SRCS_OBJS)
fclean: clean
rm -f $(NAME)
rm -f $(NAME)_*
re: fclean $(NAME)
.PHONY: clean fclean re

22
Sully/C/Sully.c Normal file
View File

@@ -0,0 +1,22 @@
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define FORMAT "#include <stdio.h>%1$c#include <stdlib.h>%1$c#include <strings.h>%1$c%1$c#define FORMAT %2$c%4$s%2$c%1$c%1$cint i=%5$d;%1$cchar nbuf[1024];%1$c%1$cint main() {%1$c bzero(nbuf,1024);%1$c sprintf(nbuf,%2$c./Sully_%3$cd.c%2$c,i-1);%1$c FILE *o = fopen(nbuf,%2$cw%2$c);%1$c fprintf(o,FORMAT,10,34,37,FORMAT,i-1);%1$c fclose(o);%1$c bzero(nbuf,1024);%1$c if (i-1>0)%1$c sprintf(nbuf,%2$cclang -Wall -Wextra -Werror ./Sully_%3$c1$d.c -o Sully_%3$c1$d;./Sully_%3$c1$d%2$c,i-1);%1$c else%1$c sprintf(nbuf,%2$cclang -Wall -Wextra -Werror ./Sully_%3$c1$d.c -o Sully_%3$c1$d%2$c,i-1);%1$c system(nbuf);%1$c}%1$c"
int i=5;
char nbuf[1024];
int main() {
bzero(nbuf,1024);
sprintf(nbuf,"./Sully_%d.c",i-1);
FILE *o = fopen(nbuf,"w");
fprintf(o,FORMAT,10,34,37,FORMAT,i-1);
fclose(o);
bzero(nbuf,1024);
if (i-1>0)
sprintf(nbuf,"clang -Wall -Wextra -Werror ./Sully_%1$d.c -o Sully_%1$d;./Sully_%1$d",i-1);
else
sprintf(nbuf,"clang -Wall -Wextra -Werror ./Sully_%1$d.c -o Sully_%1$d",i-1);
system(nbuf);
}

30
Sully/C/src/Sully.c Normal file
View File

@@ -0,0 +1,30 @@
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
char f[]="#include <stdio.h>%c#include <stdlib.h>%c#include <strings.h>%c%cchar f[]=%c%s%c;%cint i = %d;%cchar nbuf[1024];%c%cint main(int ac, char **av) {%c // get values%c i = (ac == 2)?atoi(av[1]):i;%c if (i < 0) return 0;%c // open file%c bzero(nbuf, 1024);%c sprintf(nbuf, %c./Sully_%cd.c%c, i);%c FILE *o = fopen(nbuf, %cw%c);%c // write code to other%c fprintf(o, f, 10, 10, 10, 10, 34, f, 34, 10, i, 10, 10, 10, 10, 10, 10, 10, 10, 10, 34, 37, 34, 10, 34, 34, 10, 10, 10, 10, 10, 10, 10, 34, 37, 37, 37, 37, 34, 10, 10, 34, 37, 37, 37, 37, 34, 10, 10, 34, 37, 37, 34, 10, 10, 10, 10);%c fclose(o);%c // prepare compilation settings%c bzero(nbuf, 1024);%c if (ac == 1)%c sprintf(nbuf, %cclang -Wall -Wextra -Werror ./Sully_%cd.c -o Sully_%cd;./Sully_%cd %cd%c, i, i, i, i);%c else if (i > 0)%c sprintf(nbuf, %cclang -Wall -Wextra -Werror ./Sully_%cd.c -o Sully_%cd;./Sully_%cd %cd%c, i, i, i, i-1);%c else%c sprintf(nbuf, %cclang -Wall -Wextra -Werror ./Sully_%cd.c -o Sully_%cd%c, i, i);%c // execute%c system(nbuf);%c}%c";
int i = 5;
char nbuf[1024];
int main(int ac, char **av) {
// get values
i = (ac == 2)?atoi(av[1]):i;
if (i < 0) return 0;
// open file
bzero(nbuf, 1024);
sprintf(nbuf, "./Sully_%d.c", i);
FILE *o = fopen(nbuf, "w");
// write code to other
fprintf(o, f, 10, 10, 10, 10, 34, f, 34, 10, i, 10, 10, 10, 10, 10, 10, 10, 10, 10, 34, 37, 34, 10, 34, 34, 10, 10, 10, 10, 10, 10, 10, 34, 37, 37, 37, 37, 34, 10, 10, 34, 37, 37, 37, 37, 34, 10, 10, 34, 37, 37, 34, 10, 10, 10, 10);
fclose(o);
// prepare compilation settings
bzero(nbuf, 1024);
if (ac == 1)
sprintf(nbuf, "clang -Wall -Wextra -Werror ./Sully_%d.c -o Sully_%d;./Sully_%d %d", i, i, i, i);
else if (i > 0)
sprintf(nbuf, "clang -Wall -Wextra -Werror ./Sully_%d.c -o Sully_%d;./Sully_%d %d", i, i, i, i-1);
else
sprintf(nbuf, "clang -Wall -Wextra -Werror ./Sully_%d.c -o Sully_%d", i, i);
// execute
system(nbuf);
}