include config.mak

ifndef OUT
$(error You need to run ./configure.pl before make)
endif

export ARCH
export CFLAGS
export ELFBASE
export OUT
export TMP
export TODAY := $(shell date "+%Y-%m-%d")

SED_ELFMAGIC = sed \
	-e 's/ELFMAGIC/$(ELFMAGIC)/g' \
	-e 's/ELFBASE/$(ELFBASE)/g'

.SUFFIXES: .inc .gdb .ndisasm

all:	mkdir \
	infection \
	scanner

infection: \
	mkdir \
	magic_elf \
	evil_magic \
	$(OUT)/readelf/evil_magic \
	$(OUT)/readelf/segments \
	other_magic \
	entry_point \
	one_step_closer \
	additional_cs \
	doing_it_in_c  \
	stub_revisited \
	suspicious_code

scanner: \
	mkdir \
	infection \
	$(OUT)/scanner/dist_big \
	$(OUT)/scanner/entry_point_big \
	$(OUT)/scanner/dist_small \
	$(OUT)/scanner/entry_point_small

magic_elf: \
	mkdir \
	$(OUT)/magic_elf \
	$(OUT)/magic_elf/strings \
	$(OUT)/magic_elf/od \
	$(OUT)/magic_elf/ndisasm \
	$(OUT)/magic_elf/gdb \
	$(OUT)/magic_elf/magic_elf_static \
	$(OUT)/magic_elf/static_main.gdb \
	$(OUT)/magic_elf/static_write.gdb \
	$(OUT)/magic_elf/addr_of_main

evil_magic: \
	mkdir \
	$(OUT)/evil_magic/nasm \
	$(OUT)/evil_magic/cc \
	$(OUT)/evil_magic/od \
	$(OUT)/evil_magic/evil_magic.asm \
	$(OUT)/evil_magic/evil_magic.c

other_magic: \
	mkdir \
	$(OUT)/other_magic/perl \
	$(OUT)/other_magic/mem \
	$(OUT)/other_magic/exe

entry_point: \
	mkdir \
	$(OUT)/entry_point/segments \
	$(OUT)/entry_point/scan \
	$(OUT)/entry_point/sh.gdb \
	$(OUT)/entry_point/sh.ndisasm \
	$(OUT)/entry_point/e2.ndisasm \
	$(OUT)/entry_point/e3.ndisasm \
	$(OUT)/entry_point/entry_point \
	$(OUT)/entry_point/ldd \
	$(OUT)/entry_point/nm \
	src/entry_point/__libc_start_main \
	$(OUT)/entry_point/sections

one_step_closer: \
	mkdir \
	$(OUT)/one_step_closer/test-e1i1 \
	$(OUT)/one_step_closer/test-e2i1 \
	$(OUT)/one_step_closer/test-e3i1

additional_cs: \
	mkdir \
	$(OUT)/additional_cs/od \
	$(OUT)/additional_cs/test \
	$(OUT)/additional_cs/segments \
	$(OUT)/additional_cs/scan

doing_it_in_c: \
	$(OUT)/doing_it_in_c/get_relocate_ofs.ndisasm \
	$(OUT)/doing_it_in_c/i1/infection.inc \
	$(OUT)/doing_it_in_c/begin.ndisasm \
	$(OUT)/doing_it_in_c/addr \
	$(OUT)/doing_it_in_c/e3i1.ndisasm \
	$(OUT)/doing_it_in_c/e3i2.ndisasm \
	$(OUT)/doing_it_in_c/e3i3.ndisasm \
	$(OUT)/doing_it_in_c/test-e3i1 \
	$(OUT)/doing_it_in_c/test-e3i2 \
	$(OUT)/doing_it_in_c/test-e3i3

stub_revisited: \
	$(OUT)/stub_revisited/magic_elf.ndisasm \
	$(OUT)/stub_revisited/sh.ndisasm \
	$(OUT)/stub_revisited/sh_ret.ndisasm \
	$(OUT)/stub_revisited/sh_infected.ndisasm \
	$(OUT)/stub_revisited/stack \
	src/stub_revisited/__libc_start_main

suspicious_code: \
	$(OUT)/suspicious_code/ndisasm

# traditional /bin/sh can't handle {out,tmp}/magic_elf
mkdir:
	mkdir -p \
		$(OUT)/magic_elf \
		$(TMP)/magic_elf \
		$(OUT)/evil_magic \
		$(TMP)/evil_magic \
		$(OUT)/readelf \
		$(OUT)/scanner \
		$(OUT)/other_magic \
		$(TMP)/one_step_closer/e1i1 \
		$(TMP)/one_step_closer/e2i1 \
		$(TMP)/one_step_closer/e3i1 \
		$(OUT)/one_step_closer/e1i1 \
		$(OUT)/one_step_closer/e2i1 \
		$(OUT)/one_step_closer/e3i1 \
		$(OUT)/one_step_closer/i1 \
		$(TMP)/one_step_closer/i1 \
		$(OUT)/entry_point \
		$(TMP)/additional_cs/e3i1 \
		$(OUT)/additional_cs \
		$(TMP)/doing_it_in_c/i1 \
		$(OUT)/doing_it_in_c/i1 \
		$(TMP)/doing_it_in_c/i2 \
		$(OUT)/doing_it_in_c/i2 \
		$(TMP)/doing_it_in_c/i3 \
		$(OUT)/doing_it_in_c/i3 \
		$(TMP)/doing_it_in_c/e3i1 \
		$(OUT)/doing_it_in_c/e3i1 \
		$(TMP)/doing_it_in_c/e3i2 \
		$(OUT)/doing_it_in_c/e3i2 \
		$(TMP)/doing_it_in_c/e3i3 \
		$(OUT)/doing_it_in_c/e3i3 \
		$(TMP)/stub_revisited \
		$(OUT)/stub_revisited \
		$(OUT)/suspicious_code \
		$(OUT)/suspicious_code \
	2> /dev/null

clean:
	rm -rf config.mak $(TMP) $(OUT) \
		_dvi _html _redhat _gnome $(DIRNAME).junk
	find . -type f \
		-name '*.bak' \
		-o -name '*.orig' \
		-o -name '*~' \
		-o -name '*.fot' \
		-o -name '*infected' \
		-o -name '*.core' \
		-o -name 'core.*' \
		-o -name core \
	| xargs rm -f

$(OUT)/calc.sgml: all /bin/sh src/calc.pl 
	src/calc.pl "-sgml=$(OUT)/calc.sgml"

html: $(OUT)/calc.sgml
	- [ -d _$@ ] && rm -r _$@
	mkdir _$@
	etc/mkhtml.sh _$@ '../etc/ldp.dsl#html' 

# HTML output through the default DSSSL shipped by RedHat 
redhat: $(OUT)/calc.sgml
	- [ -d _$@ ] && rm -r _$@
	mkdir _$@
	jw -f docbook -b html -o _$@ main.sgml

gnome: $(OUT)/calc.sgml
	- [ -d _$@ ] && rm -r _$@
	mkdir _$@
	etc/mkhtml.sh _$@ /usr/share/sgml/docbook/utils-0.6.9/docbook-utils.dsl

mozilla: html
	mozilla $(HTML) &
netscape: html
	netscape $(HTML) &
links: html
	links $(HTML)
dvi: $(OUT)/calc.sgml
	- [ -d _dvi ] && rm -r _dvi
	mkdir _dvi
	jw -f docbook -b dvi -o _dvi main.sgml

xdvi: dvi
	xdvi $(DVI)

fileref:
	etc/fileref.pl *.sgml

dist_html: fileref html
	tar -C .. -zcf $(DIRNAME)-$(TODAY).html.tar.gz \
		$(DIRNAME)/_html \
		--exclude-from=etc/tar-exclude
dist_src: clean
	tar -C .. -zcf $(DIRNAME)-$(TODAY).tar.gz \
		$(DIRNAME) \
		--exclude-from=etc/tar-exclude
dist: dist_html dist_src

$(OUT)/magic_elf/magic_elf.c: \
	src/magic_elf/magic_elf.c
	$(SED_ELFMAGIC) $? > $@
$(TMP)/magic_elf/magic_elf \
$(OUT)/magic_elf/magic_elf: \
	$(OUT)/magic_elf/magic_elf.c \
	src/magic_elf/cc.sh
	src/magic_elf/cc.sh > $(OUT)/magic_elf/magic_elf 2>&1
$(OUT)/magic_elf/strings: \
	$(TMP)/magic_elf/magic_elf \
	src/magic_elf/strings.sh
	src/magic_elf/strings.sh > $@ 2>&1
$(OUT)/magic_elf/od: \
	$(OUT)/magic_elf/magic_elf \
	src/magic_elf/od.sh
	src/magic_elf/od.sh > $@ 2>&1
$(OUT)/magic_elf/ndisasm: \
	$(OUT)/magic_elf/magic_elf \
	$(OUT)/magic_elf/addr_of_main \
	src/magic_elf/ndisasm.sh
	src/magic_elf/ndisasm.sh > $@ 2>&1
$(OUT)/magic_elf/gdb: \
	$(OUT)/magic_elf/magic_elf \
	src/magic_elf/gdb.sh
	src/magic_elf/gdb.sh > $@ 2>&1
$(OUT)/magic_elf/magic_elf_static: \
	src/magic_elf/magic_elf.c \
	src/magic_elf/cc_static.sh
	src/magic_elf/cc_static.sh > $@ 2>&1
$(OUT)/magic_elf/static_main.gdb: \
	$(OUT)/magic_elf/magic_elf_static \
	src/magic_elf/gdb.sh
	src/magic_elf/gdb.sh "$(TMP)/magic_elf/magic_elf_static" > $@ 2>&1
$(OUT)/magic_elf/static_write.gdb: \
	$(OUT)/magic_elf/magic_elf_static \
	src/magic_elf/gdb.sh
	src/magic_elf/gdb.sh \
		"$(TMP)/magic_elf/magic_elf_static" "__libc_write" \
	> $@ 2>&1
$(OUT)/magic_elf/addr_of_main.c: \
	src/magic_elf/addr_of_main.c
	$(SED_ELFMAGIC) $? > $@
$(TMP)/magic_elf/addr_of_main: $(OUT)/magic_elf/addr_of_main.c
	$(CC) $(CFLAGS) -o $@ $?
$(OUT)/magic_elf/addr_of_main: $(TMP)/magic_elf/addr_of_main
	$? > $@ 2>&1

$(TMP)/evil_magic/nasm \
$(OUT)/evil_magic/nasm: \
	src/evil_magic/evil_magic.asm \
	src/evil_magic/nasm.sh
	src/evil_magic/nasm.sh > $@ 2>&1
$(OUT)/evil_magic/od: \
	$(OUT)/evil_magic/nasm \
	src/evil_magic/od.sh
	src/evil_magic/od.sh > $@ 2>&1
$(OUT)/evil_magic/ndisasm.sh: \
	src/evil_magic/od.sh \
	etc/mkndisasm.sh
	etc/mkndisasm.sh > $@ && chmod 775 $@
$(OUT)/evil_magic/evil_magic.asm: \
	$(OUT)/evil_magic/nasm \
	$(OUT)/evil_magic/ndisasm.sh
	$(OUT)/evil_magic/ndisasm.sh > $@ 2>&1
$(OUT)/evil_magic/evil_magic.c: \
	$(OUT)/evil_magic/evil_magic.asm \
	src/evil_magic/ndisasm.pl
	src/evil_magic/ndisasm.pl \
		< $(OUT)/evil_magic/evil_magic.asm \
		> $@ 2>&1
$(OUT)/evil_magic/cc: \
	$(OUT)/evil_magic/evil_magic.c src/evil_magic/cc.sh
	src/evil_magic/cc.sh > $@ 2>&1

$(OUT)/readelf/evil_magic: $(TMP)/evil_magic src/readelf/evil_magic.sh
	src/readelf/evil_magic.sh > $@ 2>&1
$(OUT)/readelf/segments: src/readelf/segments.sh
	$? > $@ 2>&1

$(OUT)/other_magic/perl: src/other_magic/perl.pl
	$? > $@ 2>&1
$(OUT)/other_magic/mem: src/other_magic/mem.sh
	$? > $@ 2>&1
$(OUT)/other_magic/exe: src/other_magic/exe.sh
	$? > $@ 2>&1

$(OUT)/scanner/dist_big: \
	src/scanner/big.sh \
	src/scanner/dist.pl
	src/scanner/big.sh | tail -1 > $@ 2>&1
$(OUT)/scanner/entry_point_big: \
	src/scanner/big.sh \
	src/scanner/entry_point.pl
	src/scanner/big.sh "src/scanner/entry_point.pl" > $@ 2>&1
$(OUT)/scanner/dist_small: \
	src/scanner/small.sh \
	src/scanner/dist.pl
	( src/scanner/small.sh 2>&1 ) | tail -1 > $@
$(OUT)/scanner/entry_point_small: \
	src/scanner/small.sh \
	src/scanner/entry_point.pl
	src/scanner/small.sh "src/scanner/entry_point.pl" > $@ 2>&1

$(OUT)/one_step_closer/i1/infection.inc: \
	src/one_step_closer/i1/infection.asm \
	src/one_step_closer/infection.sh
	src/one_step_closer/infection.sh $@
$(TMP)/one_step_closer/e1i1/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/one_step_closer/i1/infection.inc
	src/one_step_closer/cc.sh one_step_closer e1 i1 \
	> $(OUT)/one_step_closer/e1i1/cc 2>&1

$(OUT)/one_step_closer/test-e1i1.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/one_step_closer/test-e1i1: \
	$(TMP)/one_step_closer/e1i1/sh_infected \
	$(OUT)/one_step_closer/test-e1i1.sh
	-$(OUT)/one_step_closer/test-e1i1.sh > $@ 2>&1
$(TMP)/one_step_closer/e2i1/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/one_step_closer/i1/infection.inc
	src/one_step_closer/cc.sh one_step_closer e2 i1 \
	> $(OUT)/one_step_closer/e2i1/cc 2>&1
$(OUT)/one_step_closer/test-e2i1.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/one_step_closer/test-e3i1.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/one_step_closer/test-e2i1: \
	$(TMP)/one_step_closer/e2i1/sh_infected \
	$(OUT)/one_step_closer/test-e2i1.sh
	-$(OUT)/one_step_closer/test-e2i1.sh > $@ 2>&1
$(TMP)/one_step_closer/e3i1/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/one_step_closer/i1/infection.inc
	src/one_step_closer/cc.sh one_step_closer e3 i1 \
	> $(OUT)/one_step_closer/e3i1/cc 2>&1
$(OUT)/one_step_closer/test-e3i1: \
	$(TMP)/one_step_closer/e3i1/sh_infected \
	$(OUT)/one_step_closer/test-e3i1.sh
	-$(OUT)/one_step_closer/test-e3i1.sh > $@ 2>&1

$(OUT)/entry_point/segments: \
	$(TMP)/one_step_closer/e1i1/sh_infected \
	src/entry_point/segments.sh
	src/entry_point/segments.sh > $@ 2>&1
$(OUT)/entry_point/scan: \
	$(TMP)/one_step_closer/e1i1/sh_infected \
	src/entry_point/scan_dist.sh 
	src/entry_point/scan_dist.sh > $@ 2>&1
$(OUT)/entry_point/sh.gdb: \
	src/entry_point/gdb.sh
	$? > $@ 2>&1
$(OUT)/entry_point/sh.ndisasm: \
	src/entry_point/ndisasm.sh
	$? > $@ 2>&1
$(OUT)/entry_point/entry_point: \
	src/entry_point/entry_point.sh \
	$(TMP)/one_step_closer/e1i1/sh_infected \
	$(TMP)/one_step_closer/e2i1/sh_infected
	src/entry_point/entry_point.sh > $@ 2>&1
$(OUT)/entry_point/e2.ndisasm: \
	src/entry_point/ndisasm.sh \
	$(TMP)/one_step_closer/e2i1/sh_infected
	src/entry_point/ndisasm.sh \
	$(TMP)/one_step_closer/e2i1/sh_infected \
	> $@ 2>&1
$(OUT)/entry_point/ldd: \
	src/entry_point/ldd.sh
	$?  > $@ 2>&1
$(OUT)/entry_point/nm: \
	src/entry_point/nm.sh
	$?  > $@ 2>&1
src/entry_point/__libc_start_main: \
	$(OUT)/entry_point/nm \
	src/entry_point/get_libc_start_main.sh
	src/entry_point/get_libc_start_main.sh $@
$(OUT)/entry_point/e3.ndisasm: \
	src/entry_point/ndisasm.sh \
	$(TMP)/one_step_closer/e3i1/sh_infected
	src/entry_point/ndisasm.sh \
	$(TMP)/one_step_closer/e3i1/sh_infected \
	> $@ 2>&1
$(OUT)/entry_point/sections: \
	src/entry_point/sections.sh
	$? > $@ 2>&1

$(OUT)/additional_cs/od: \
	src/additional_cs/od.sh
	$?  > $@ 2>&1
$(OUT)/additional_cs/i1: \
	$(OUT)/one_step_closer/i1/infection.inc
	ln -s ../one_step_closer/i1 $@
$(TMP)/additional_cs/e3i1/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/additional_cs/i1
	src/one_step_closer/cc.sh additional_cs e3 i1 \
	> $(OUT)/additional_cs/cc 2>&1
$(OUT)/additional_cs/test-e3i1.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/additional_cs/test: \
	$(TMP)/additional_cs/e3i1/sh_infected \
	$(OUT)/additional_cs/test-e3i1.sh
	-$(OUT)/additional_cs/test-e3i1.sh > $@ 2>&1
$(OUT)/additional_cs/segments: \
	$(TMP)/additional_cs/e3i1/sh_infected
	( ls -l $?; readelf -l $? ) > $@ 2>&1
$(OUT)/additional_cs/scan: \
	$(TMP)/additional_cs/e3i1/sh_infected \
	src/additional_cs/scan_dist.sh
	src/additional_cs/scan_dist.sh > $@ 2>&1

$(OUT)/doing_it_in_c/i1/infection.inc: \
	src/doing_it_in_c/i1/infection.asm \
	src/one_step_closer/infection.sh
	src/one_step_closer/infection.sh $@ 2>&1
$(TMP)/doing_it_in_c/e3i1/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/doing_it_in_c/i1/infection.inc
	src/one_step_closer/cc.sh doing_it_in_c e3 i1 \
	> $(OUT)/doing_it_in_c/e3i1/cc 2>&1
$(OUT)/doing_it_in_c/test-e3i1.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/doing_it_in_c/test-e3i1: \
	$(TMP)/doing_it_in_c/e3i1/sh_infected \
	$(OUT)/doing_it_in_c/test-e3i1.sh
	-$(OUT)/doing_it_in_c/test-e3i1.sh > $@ 2>&1

$(OUT)/doing_it_in_c/i2/infection.inc: \
	src/doing_it_in_c/i2/infection.asm \
	src/one_step_closer/infection.sh
	src/one_step_closer/infection.sh $@ 2>&1
$(TMP)/doing_it_in_c/e3i2/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/doing_it_in_c/i2/infection.inc
	src/one_step_closer/cc.sh doing_it_in_c e3 i2 \
	> $(OUT)/doing_it_in_c/e3i2/cc 2>&1
$(OUT)/doing_it_in_c/test-e3i2.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/doing_it_in_c/test-e3i2: \
	$(TMP)/doing_it_in_c/e3i2/sh_infected \
	$(OUT)/doing_it_in_c/test-e3i2.sh
	-$(OUT)/doing_it_in_c/test-e3i2.sh > $@ 2>&1

$(OUT)/doing_it_in_c/i3/infection.inc: \
	src/doing_it_in_c/i3/infection.asm \
	src/one_step_closer/infection.sh
	src/one_step_closer/infection.sh $@ 2>&1
$(TMP)/doing_it_in_c/e3i3/sh_infected: \
	src/one_step_closer/cc.sh \
	$(OUT)/doing_it_in_c/i3/infection.inc
	src/one_step_closer/cc.sh doing_it_in_c e3 i3 \
	> $(OUT)/doing_it_in_c/e3i3/cc 2>&1
$(OUT)/doing_it_in_c/test-e3i3.sh: \
	src/one_step_closer/test.sh
	etc/mktest $@ < $?
$(OUT)/doing_it_in_c/test-e3i3: \
	$(TMP)/doing_it_in_c/e3i3/sh_infected \
	$(OUT)/doing_it_in_c/test-e3i3.sh
	-$(OUT)/doing_it_in_c/test-e3i3.sh > $@ 2>&1

$(OUT)/doing_it_in_c/get_relocate_ofs.ndisasm: \
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/sh_infected
	src/doing_it_in_c/ndisasm.sh > $@ 2>&1
$(OUT)/doing_it_in_c/begin.ndisasm: \
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/sh_infected
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/infector "begin" > $@ 2>&1
$(OUT)/doing_it_in_c/addr: \
	src/doing_it_in_c/addr.c
	$(CC) $(CFLAGS) -o $(TMP)/doing_it_in_c/addr $? > $@ 2>&1 \
	&& $(TMP)/doing_it_in_c/addr >> $@ 2>&1
$(OUT)/doing_it_in_c/e3i1.ndisasm: \
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/sh_infected
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/infector infection 4 > $@ 2>&1
$(OUT)/doing_it_in_c/e3i2.ndisasm: \
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i2/sh_infected
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i2/infector infection 1 > $@ 2>&1
$(OUT)/doing_it_in_c/e3i3.ndisasm: \
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i3/sh_infected
	src/doing_it_in_c/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i3/infector infection 2 > $@ 2>&1

$(OUT)/stub_revisited/sh.ndisasm: \
	src/stub_revisited/ndisasm.sh
	( $? 2>&1 ) | head > $@
$(OUT)/stub_revisited/sh_ret.ndisasm: \
	src/stub_revisited/ndisasm.sh \
	src/stub_revisited/ndisasm_ret.sh
	src/stub_revisited/ndisasm_ret.sh > $@ 2>&1
$(OUT)/stub_revisited/magic_elf.ndisasm: \
	src/stub_revisited/ndisasm.sh \
	$(TMP)/magic_elf/magic_elf
	( src/stub_revisited/ndisasm.sh $(TMP)/magic_elf/magic_elf 2>&1 ) \
	| head \
	> $@
$(OUT)/stub_revisited/sh_infected.ndisasm: \
	src/stub_revisited/ndisasm.sh \
	$(TMP)/doing_it_in_c/e3i1/sh_infected
	( src/stub_revisited/ndisasm.sh \
		$(TMP)/doing_it_in_c/e3i1/sh_infected 2>&1 ) \
	| head \
	> $@
$(OUT)/stub_revisited/stack: \
	src/stub_revisited/stack.sh \
	$(TMP)/magic_elf/magic_elf
	src/stub_revisited/stack.sh > $@ 2>&1
src/stub_revisited/__libc_start_main: \
	$(OUT)/stub_revisited/stack \
	src/stub_revisited/get_libc_start_main.sh
	src/stub_revisited/get_libc_start_main.sh \
		$@ $(OUT)/stub_revisited/stack

$(OUT)/suspicious_code/ndisasm: \
	src/suspicious_code/dumpsection.pl \
	src/suspicious_code/ndisasm.sh
	src/suspicious_code/ndisasm.sh > $@ 2>&1
