-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
73 lines (50 loc) · 1.38 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
.PHONY: all clean distclean
GNUARM_PREFIX ?= /opt/arm-gnu-toolchain-13.3.rel1-darwin-arm64-arm-none-eabi/bin/arm-none-eabi-
CC = $(GNUARM_PREFIX)gcc
CFLAGS = -Wall
CFLAGS += -Wno-long-long
CFLAGS += -Wno-multichar
CFLAGS += -Os
CFLAGS += -march=armv4
CFLAGS += -fcall-used-r9
LD = $(GNUARM_PREFIX)gcc
LDFLAGS = -nostdlib
PAYLOAD_LDFLAGS = -Tpayload.ld -Ttext=0x62000800
HOOK_LDFLAGS = -Thook.ld -fpie
OBJCOPY = $(GNUARM_PREFIX)objcopy
PAYLOAD_SOURCES = \
payload.c
PAYLOAD_OBJECTS = $(PAYLOAD_SOURCES:.c=.o)
PAYLOAD_ELF = payload.elf
PAYLOAD_BIN = payload.bin
HOOK_SOURCES = \
hook.c
HOOK_OBJECTS = $(HOOK_SOURCES:.c=.o)
HOOK_ELF = hook.elf
HOOK_BIN = hook.bin
HOOK_HEADER = hook.h
TEMPLATE_DFU = template.dfu
PWN_DFU = pwn.dfu
all: $(HOOK_HEADER) $(PWN_DFU)
$(PWN_DFU): $(PAYLOAD_BIN) | $(HOOK_HEADER)
cp -a $(TEMPLATE_DFU) $@
dd if=$< of=$@ bs=1 conv=notrunc seek=$$((0x800))
$(PAYLOAD_BIN): $(PAYLOAD_ELF)
$(OBJCOPY) -O binary $< $@
$(PAYLOAD_ELF): $(PAYLOAD_OBJECTS) | entry.o
$(LD) -o $@ $(LDFLAGS) $(PAYLOAD_LDFLAGS) $^
$(PAYLOAD_OBJECTS): $(HOOK_HEADER)
$(HOOK_HEADER): $(HOOK_BIN)
xxd -n hook -i $< $@
$(HOOK_BIN): $(HOOK_ELF)
$(OBJCOPY) -O binary $< $@
$(HOOK_ELF): $(HOOK_OBJECTS)
$(LD) -o $@ $(LDFLAGS) $(HOOK_LDFLAGS) $^
.S.o:
$(CC) -o $@ $(CFLAGS) -c $<
.c.o:
$(CC) -o $@ $(CFLAGS) -c $<
clean:
-$(RM) *.o *.elf *.a $(HOOK_HEADER)
distclean: clean
-$(RM) *.bin