1
1
env_scripts = ['''
2
2
#!@duckscript
3
3
profile = get_env PROFILE
4
+ harness_api = get_env HARNESS_API
4
5
5
6
if eq ${profile} "dev"
6
7
set_env PROFILE_DIR debug
7
8
else
8
9
set_env PROFILE_DIR ${profile}
9
10
end
11
+
12
+ if eq ${harness_api} "nyx"
13
+ set_env FEATURE nyx
14
+ else
15
+ set_env FEATURE ""
16
+ end
17
+
10
18
''' , '''
11
19
#!@duckscript
12
20
runs_on_ci = get_env RUN_ON_CI
@@ -25,12 +33,12 @@ TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}"
25
33
LIBAFL_QEMU_CLONE_DIR = { value = " ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/qemu-libafl-bridge" , condition = { env_not_set = [
26
34
" LIBAFL_QEMU_DIR" ,
27
35
] } }
28
-
29
36
LINUX_BUILDER_URL =
" [email protected] :AFLplusplus/linux-qemu-image-builder.git"
30
37
LINUX_BUILDER_DIR = { value = " ${TARGET_DIR}/linux_builder" , condition = { env_not_set = [
31
38
" LINUX_BUILDER_DIR" ,
32
39
] } }
33
40
LINUX_BUILDER_OUT = " ${LINUX_BUILDER_DIR}/output"
41
+ HARNESS_API = { value = " lqemu" , condition = { env_not_set = [" HARNESS_API" ] } }
34
42
35
43
[tasks .target_dir ]
36
44
condition = { files_not_exist = [
@@ -51,7 +59,22 @@ script = '''
51
59
git clone ${LINUX_BUILDER_URL} ${LINUX_BUILDER_DIR}
52
60
'''
53
61
54
- [tasks .compile_target ]
62
+ [tasks .compile_target_nyx ]
63
+ condition = { env = { "HARNESS_API" = " nyx" } }
64
+ dependencies = [" target_dir" , " linux_builder_dir" ]
65
+ command = " clang"
66
+ args = [
67
+ " -O0" ,
68
+ " -static" ,
69
+ " ${WORKING_DIR}/example/harness_nyx.c" ,
70
+ " -o" ,
71
+ " ${TARGET_DIR}/runtime/harness" ,
72
+ " -I" ,
73
+ " ${TARGET_DIR}/${PROFILE_DIR}/include" ,
74
+ ]
75
+
76
+ [tasks .compile_target_native ]
77
+ condition = { env = { "HARNESS_API" = " lqemu" } }
55
78
dependencies = [" target_dir" , " linux_builder_dir" ]
56
79
command = " clang"
57
80
args = [
@@ -64,6 +87,9 @@ args = [
64
87
" ${TARGET_DIR}/${PROFILE_DIR}/include" ,
65
88
]
66
89
90
+ [tasks .compile_target ]
91
+ dependencies = [" compile_target_native" , " compile_target_nyx" ]
92
+
67
93
[tasks .target ]
68
94
dependencies = [" build" , " compile_target" ]
69
95
script_runner = " @shell"
@@ -96,7 +122,15 @@ ${LINUX_BUILDER_DIR}/update.sh
96
122
[tasks .build ]
97
123
dependencies = [" target_dir" ]
98
124
command = " cargo"
99
- args = [" build" , " --profile" , " ${PROFILE}" , " --target-dir" , " ${TARGET_DIR}" ]
125
+ args = [
126
+ " build" ,
127
+ " --profile" ,
128
+ " ${PROFILE}" ,
129
+ " --target-dir" ,
130
+ " ${TARGET_DIR}" ,
131
+ " --features" ,
132
+ " ${FEATURE}" ,
133
+ ]
100
134
101
135
[tasks .run ]
102
136
dependencies = [" build" ]
@@ -111,15 +145,15 @@ else
111
145
LIBAFL_QEMU_BIOS_DIR=${LIBAFL_QEMU_CLONE_DIR}/build/qemu-bundle/usr/local/share/qemu
112
146
fi
113
147
114
- cp ${LINUX_BUILDER_OUT}/OVMF_CODE.fd ${LINUX_BUILDER_OUT}/OVMF_CODE.fd.clone
115
- cp ${LINUX_BUILDER_OUT}/OVMF_VARS.fd ${LINUX_BUILDER_OUT}/OVMF_VARS.fd.clone
148
+ cp ${LINUX_BUILDER_OUT}/OVMF_CODE.4m. fd ${LINUX_BUILDER_OUT}/OVMF_CODE.fd.clone
149
+ cp ${LINUX_BUILDER_OUT}/OVMF_VARS.4m. fd ${LINUX_BUILDER_OUT}/OVMF_VARS.fd.clone
116
150
cp ${LINUX_BUILDER_OUT}/linux.qcow2 ${LINUX_BUILDER_OUT}/linux.qcow2.clone
117
151
118
152
${TARGET_DIR}/${PROFILE_DIR}/qemu_linux_process \
119
153
-accel tcg \
120
154
-m 4G \
121
- -drive if=pflash,format=raw,file="${LINUX_BUILDER_OUT}/OVMF_CODE.fd" `# OVMF code pflash` \
122
- -drive if=pflash,format=raw,file="${LINUX_BUILDER_OUT}/OVMF_VARS.fd" `# OVMF vars pflash` \
155
+ -drive if=pflash,format=raw,file="${LINUX_BUILDER_OUT}/OVMF_CODE.4m. fd" `# OVMF code pflash` \
156
+ -drive if=pflash,format=raw,file="${LINUX_BUILDER_OUT}/OVMF_VARS.4m. fd" `# OVMF vars pflash` \
123
157
-device virtio-scsi-pci,id=scsi0 `# SCSI bus` \
124
158
-device scsi-hd,bus=scsi0.0,drive=disk,id=virtio-disk0,bootindex=1 \
125
159
-blockdev driver=file,filename="${LINUX_BUILDER_OUT}/linux.qcow2",node-name=storage `# Backend file of "disk"` \
0 commit comments