From 2e4a52504c97635fd030078cab7c73ac58980cda Mon Sep 17 00:00:00 2001 From: whaffman Date: Sun, 19 Jan 2025 15:55:55 +0100 Subject: [PATCH] initial --- Makefile | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ funfail.so | Bin 0 -> 16056 bytes obj/calloc.d | 1 + obj/calloc.o | Bin 0 -> 2152 bytes obj/malloc.d | 1 + obj/malloc.o | Bin 0 -> 2144 bytes obj/read.d | 1 + obj/read.o | Bin 0 -> 928 bytes obj/write.d | 1 + obj/write.o | Bin 0 -> 2160 bytes src/calloc.c | 25 ++++++++++++++++++++++++ src/malloc.c | 23 ++++++++++++++++++++++ src/read.c | 0 src/write.c | 26 +++++++++++++++++++++++++ 14 files changed, 132 insertions(+) create mode 100644 Makefile create mode 100755 funfail.so create mode 100644 obj/calloc.d create mode 100644 obj/calloc.o create mode 100644 obj/malloc.d create mode 100644 obj/malloc.o create mode 100644 obj/read.d create mode 100644 obj/read.o create mode 100644 obj/write.d create mode 100644 obj/write.o create mode 100644 src/calloc.c create mode 100644 src/malloc.c create mode 100644 src/read.c create mode 100644 src/write.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..abdcf15 --- /dev/null +++ b/Makefile @@ -0,0 +1,54 @@ +# **************************************************************************** # +# # +# ::: o_ :::::: ::: # +# Makefile :+: / :+::+: :+: # +# +:+ > +:++:+ +:+ # +# By: whaffman +#+ +:+ +#++#++:++#++ # +# +#+ +#+#+ +#++#+ +#+ \o/ # +# Created: 2024/10/15 11:48:46 by whaffman #+#+# #+#+# #+# #+# | # +# Updated: 2024/11/07 15:28:08 by whaffman ### ### ### ### / \ # +# # +# **************************************************************************** # + +NAME = funfail.so + +SRC_PATH = src +INC_PATH = inc +OBJ_PATH = obj + +VPATH = src:src/utils +SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) +OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) +DEPENDS = ${OBJECTS:.o=.d} + +CC = cc +RM = rm -rf + +INCLUDES = -I./$(INC_PATH) +CFLAGS = -Wall -Wextra -Werror -MMD +LDLIBS = -fPIC -shared -ldl + + + +all: $(NAME) + +$(NAME): $(OBJECTS) + $(CC) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o $(NAME) + +-include ${DEPENDS} + +$(OBJ_PATH): + mkdir -p $@ + +$(OBJ_PATH)/%.o: %.c | $(OBJ_PATH) + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + $(RM) $(OBJECTS) $(OBJ_PATH) + +fclean: clean + $(RM) $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/funfail.so b/funfail.so new file mode 100755 index 0000000000000000000000000000000000000000..de5d0033dfce86ef68f9458b618729739d73f6d1 GIT binary patch literal 16056 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 ac zoaY>I9QiS6-C!@s&SIl;QRNbXC_dSNU+KU_z4RhDr9xOceKLSmJ;}u^S)OG-0n>9< zV5wYPuRx(-xvuRLu+*lv;@EIfB#3njcHN?DhjK=6+9&Oq`9;B1`{@q$*Cl>Pij$S% z&|Ts9d5P27!JWpwBseju5!>5>Q$BJWPvKmzjSk%Jz~3mG*L^2A#T~%LJRvycL#-`3 z9=~TUf?oC9uwUkpYn4siv(`M&mrTzDeX&{v-F3oA(Wz7{8+EqhSvtP4iK=H7AB%a( zuIa0;vue5CI{Hu~Yq{{yH7izo>Hird(3##`uM#9B=6v5-t^PyDP(f#uVgu3liyy>& z;Xr3dLw;W)!tR{l{67&Ge)B--)%EGUQB2jJpX{LG&+9X$cS$k-swFAKLYyZd5_SDq z!IFXY;4>l&DL+}*pZlAr&G)r~d={Gmlyu&EPHPFM6sY?NjxqnE%usSwn2dz_BbMTpJz5QI!9x M$e;f+?4bJp0gmPZ2LJ#7 literal 0 HcmV?d00001 diff --git a/obj/malloc.d b/obj/malloc.d new file mode 100644 index 0000000..2783f3d --- /dev/null +++ b/obj/malloc.d @@ -0,0 +1 @@ +obj/malloc.o: src/malloc.c diff --git a/obj/malloc.o b/obj/malloc.o new file mode 100644 index 0000000000000000000000000000000000000000..7e53e4557bd40b0d94d64fe47b219cf129f942a9 GIT binary patch literal 2144 zcmbtUOKTKC5U$z0)I40{10@>v;tNc>d7wr_HZE)CkZ6boyp5C1m_&DH!fdZ3V)PIq zEJ4tlSC3vj<+vcYc=Z=}5d!g|UL-8Us+q3M*qJ?9P}5ak*H>NL)jcnB6SotF0W1dG zgguW@fN!mPb|x@0&;#A@`*8oxj9K|^uKh@vmDMftbsNo^mD*M?u2sz&Ipt=3_=GXzI-_2<3j#_?d)jocPiu={m8 z8L(^6h43a#efdORfXT53*5ug4#NDiw#o-4 zkv_SeP;*B+>M)UiR~QK5@}w9*b-D70nj{zYDD6>loJYPpELF& z-Wypr*b8E3QR!TCxr9I*KG+1m+5}hq5_$0Et+01u5c1f>l1Oti=N;*|Pr;VnBFq&^ zD@Cv@$M;>&!dBaI(R1ObDiHe??7B`@4y8}wv`^YI_f{)Z=U&klV znQVe-76cubnS9@Tlb<2))4SVF5P-D+#_)qI3lKUa*EENH*aMhNCO6^PJgzfUhnGV( zWKsXR)^PAP7_n${ZfM=r#dv_ejXt}dLkD0*+!p$8M#p#I^Q)yPrC6{8fK|&>i5Rmg zoBU)~O1>&!3!wzCxT=69d78=$xhz+b;Whe|63Mf{k6F!%GB0GQmaXIdN*rSY-F?Sv zRw#ntbOei zYdv)QCmU866mGE1TV0Cw^LwfOVMO*_G$YbcCOc{p{qWZ8sI;PhX7vqfzx5Cc{_IJ+ MHVqFZ+vLCh8$gver~m)} literal 0 HcmV?d00001 diff --git a/obj/write.d b/obj/write.d new file mode 100644 index 0000000..d245ad8 --- /dev/null +++ b/obj/write.d @@ -0,0 +1 @@ +obj/write.o: src/write.c diff --git a/obj/write.o b/obj/write.o new file mode 100644 index 0000000000000000000000000000000000000000..248ee2886ae516707ef747931ff78c03cea866bf GIT binary patch literal 2160 zcmb_c&1(}u6n~q3YCnucL~Sj>gIKUj`a!WCN@|E*B~_^g1rO^sUE6Ast(%Qa#i~#$ zEK%_2pWxY(2M+_rgTgW^pB^}XGB={jz1KA4^Ne)D@DGjC=er_$#miUKSO zOu?STD8P@_Jw4&63Fw6$_;q0LcSdu+X&XCncYQ~5OIw$6*%-u<%O=f$bPKB}%(rO2P&p*}l(L%%+E;aW;hPN&mXVbxxCOn{kW@@(u> zX1-K#O0khKbxe&9Pn0}!^wH?J8Xq4LFl`fsjwyYTZhfe1jAuofI7hx`eY2Xmm5 zqe_2wN9PMX@BzeWki4f)syF&HlI&@ZyhR29;X=J?g`c}&t1Y3Oq*?;a3^=xURR;i6 z>70}RpG%>A5Y9G7q&@Tn@_Ktg>;w)v7g>f72*cGT_;?fCZ4u>QvsaLmg8I&IK`p6!uZVqPPw~q!&*Srh!F zgmd240;jlLI2ex!oa&*`5EVP%81tYO9owImShLNXp*m*S0d>J}3{dBbMNnkRUM!T<728@dZD$RAD3ZCP-?oiBzUKcRF^oZPu3d_i5H{a; zUY7r*{kTA9lwg9Gqv8i~ML5tIlFIMvh~S+RIR8%s3~h2Eu^_{z5vQ24f2Sbw{o=Ts zpY0J;i27GA(Psa{Ocb-6e-d%R;u3FA5UIYPus_e|aFO*O?_wAj!kt5`1BYBcpL-0~ zf+Fvq-W{cq{Z~Z(GeKw6Wq-PbVg0`)9whgf`cMA{_GdgSH`3sh$R86k^^x`|`%_H0 e_Xxp9v7r +#include +#include + +typedef void *(*f)(size_t __nmemb, size_t __size); + +void *calloc(size_t __nmemb, size_t __size) +{ + static f og_calloc = NULL; + static int calls = 0; + const int MAX_CALLS = getenv("MAX_CALLOC_CALLS") ? atoi(getenv("MAX_CALLOC_CALLS")) : -1; + + if (!og_calloc) + { + og_calloc = (f)dlsym(RTLD_NEXT, "calloc"); + } + + calls++; + if (MAX_CALLS < 0 || calls <= MAX_CALLS) + { + return og_calloc(__nmemb, __size); + } + errno = ENOMEM; + return NULL; +} \ No newline at end of file diff --git a/src/malloc.c b/src/malloc.c new file mode 100644 index 0000000..238caec --- /dev/null +++ b/src/malloc.c @@ -0,0 +1,23 @@ +#include +#include +#include + + +typedef void* (*f)(size_t size); + +void* malloc(size_t size) { + static f og_malloc = NULL; + static int calls = 0; + const int MAX_CALLS = getenv("MAX_MALLOC_CALLS") ? atoi(getenv("MAX_MALLOC_CALLS")) : -1; + + if (!og_malloc) { + og_malloc = (f)dlsym(RTLD_NEXT, "malloc"); + } + + calls++; + if (MAX_CALLS < 0 || calls <= MAX_CALLS) { + return og_malloc(size); + } + errno = ENOMEM; + return NULL; +} \ No newline at end of file diff --git a/src/read.c b/src/read.c new file mode 100644 index 0000000..e69de29 diff --git a/src/write.c b/src/write.c new file mode 100644 index 0000000..6e912cf --- /dev/null +++ b/src/write.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +typedef ssize_t (*f)(int fd, const void *buf, size_t count); + +ssize_t write(int fd, const void *buf, size_t count) +{ + static f og_write = NULL; + static int calls = 0; + const int MAX_CALLS = getenv("MAX_WRITE_CALLS") ? atoi(getenv("MAX_WRITE_CALLS")) : -1; + + if (!og_write) + { + og_write = (f)dlsym(RTLD_NEXT, "write"); + } + + calls++; + if (MAX_CALLS < 0 || calls <= MAX_CALLS) + { + return og_write(fd, buf, count); + } + errno = EBADF; + return -1; +} \ No newline at end of file