1# 2# american fuzzy lop++ - argvfuzz 3# -------------------------------- 4# 5# Copyright 2019-2024 Kjell Braden <[email protected]> 6# 7# Licensed under the Apache License, Version 2.0 (the "License"); 8# you may not use this file except in compliance with the License. 9# You may obtain a copy of the License at: 10# 11# http://www.apache.org/licenses/LICENSE-2.0 12# 13 14.PHONY: all install clean argv_fuzz_persistent_demo argv_fuzz_demo demo 15 16PREFIX ?= /usr/local 17BIN_PATH = $(PREFIX)/bin 18HELPER_PATH = $(PREFIX)/lib/afl 19 20CFLAGS = -fPIC -Wall -Wextra 21LDFLAGS = -shared 22 23UNAME_SAYS_LINUX=$(shell uname | grep -E '^Linux|^GNU' >/dev/null; echo $$?) 24UNAME_SAYS_LINUX:sh=uname | grep -E '^Linux|^GNU' >/dev/null; echo $$? 25 26_LDFLAGS_ADD=$(UNAME_SAYS_LINUX:1=) 27LDFLAGS_ADD=$(_LDFLAGS_ADD:0=-ldl) 28LDFLAGS += $(LDFLAGS_ADD) 29 30# on gcc for arm there is no -m32, but -mbe32 31M32FLAG = -m32 32M64FLAG = -m64 33 34CC_IS_GCC=$(shell $(CC) --version 2>/dev/null | grep -q gcc; echo $$?) 35CC_IS_GCC:sh=$(CC) --version 2>/dev/null | grep -q gcc; echo $$? 36CC_IS_ARMCOMPILER=$(shell $(CC) -v 2>&1 >/dev/null | grep -q arm; echo $$?) 37CC_IS_ARMCOMPILER:sh=$(CC) -v 2>&1 >/dev/null | grep -q arm; echo $$? 38 39_M32FLAG=$(CC_IS_GCC)$(CC_IS_ARMCOMPILER) 40__M32FLAG=$(_M32FLAG:00=-mbe32) 41___M32FLAG=$(__M32FLAG:$(CC_IS_GCC)$(CC_IS_ARMCOMPILER)=-m32) 42M32FLAG=$(___M32FLAG) 43 44all: argvfuzz32.so argvfuzz64.so demo 45 46argvfuzz32.so: argvfuzz.c 47 -@$(CC) $(M32FLAG) $(CFLAGS) $^ $(LDFLAGS) -o $@ 2>/dev/null || echo "argvfuzz32 build failure (that's fine)" 48 49argvfuzz64.so: argvfuzz.c 50 -@$(CC) $(M64FLAG) $(CFLAGS) $^ $(LDFLAGS) -o $@ 2>/dev/null || echo "argvfuzz64 build failure (that's fine)" 51 52install: argvfuzz32.so argvfuzz64.so 53 install -d -m 755 $(DESTDIR)$(HELPER_PATH)/ 54 if [ -f argvfuzz32.so ]; then set -e; install -m 755 argvfuzz32.so $(DESTDIR)$(HELPER_PATH)/; fi 55 if [ -f argvfuzz64.so ]; then set -e; install -m 755 argvfuzz64.so $(DESTDIR)$(HELPER_PATH)/; fi 56 57argv_fuzz_persistent_demo: argv_fuzz_persistent_demo.c 58 ../../afl-cc -g -o $@ $^ 59 60argv_fuzz_demo: argv_fuzz_demo.c 61 ../../afl-cc -g -o $@ $^ 62 63demo: argv_fuzz_persistent_demo argv_fuzz_demo 64 65clean: 66 rm -f argvfuzz32.so argvfuzz64.so argv_fuzz_demo argv_fuzz_persistent_demo 67 68