NASM = nasm
CC = gcc
CFLAGS = -m32 -g -O0 -fno-omit-frame-pointer -fno-pie -no-pie -Wall -Wextra
all: hello hello_runner shell_runner
%.o: %.asm
	$(NASM) -f elf32 -g -F dwarf $< -o $@
%.bin: %.o
	objcopy -O binary -j .text $< $@
hello: hello.o
	ld -m elf_i386 -z noexecstack $< -o $@
hello_payload.h: hello.bin bin_to_header.py
	python3 bin_to_header.py $< $@
execve_stack_payload.h: execve_stack.bin bin_to_header.py
	python3 bin_to_header.py $< $@
hello_runner: run_payload.c hello_payload.h
	$(CC) $(CFLAGS) -z noexecstack $< -o $@
shell_runner: run_payload.c execve_stack_payload.h
	$(CC) $(CFLAGS) -z noexecstack -DPAYLOAD_HEADER='"execve_stack_payload.h"' $< -o $@
clean:
	rm -f hello hello_runner shell_runner *.o *.bin *_payload.h
.PHONY: all clean
.SECONDARY:
