mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-24 14:43:22 +00:00
Compare commits
2376 Commits
Author | SHA1 | Date | |
---|---|---|---|
4a51cb71fb | |||
f2efea4b46 | |||
e15a013696 | |||
857046ede5 | |||
4515e06ca8 | |||
97cef46b62 | |||
4ec29928bf | |||
ba79777bc5 | |||
b67905c40f | |||
6b98157c1a | |||
4d2ccd18f6 | |||
52a0410d92 | |||
d898418037 | |||
2aaa60e4fc | |||
e9dce31496 | |||
b201279ae5 | |||
be83f06b2f | |||
9d5007b18e | |||
7527c76c74 | |||
06264df168 | |||
878b27af76 | |||
4b99ebbf22 | |||
6d9b29daca | |||
3f1288e2f9 | |||
8f1b78f49e | |||
07648f75ea | |||
3a0c91b862 | |||
e5e485fcdb | |||
16f3df7cc6 | |||
6d0f086d9c | |||
c25a602a03 | |||
81974c4d5e | |||
5f3b7e6cdf | |||
910b9f3f25 | |||
4fd2cb2ce0 | |||
e234a6ae4e | |||
ee17782e61 | |||
cd6954e3c1 | |||
29e41a09d5 | |||
4103687f76 | |||
976e99b1d4 | |||
da7c548452 | |||
1ecfd78418 | |||
07fead0466 | |||
8bd8442bcc | |||
5904083231 | |||
171b1923e9 | |||
8d5eb9487d | |||
633a3feab9 | |||
c8f60a7fbf | |||
3a62bb68e0 | |||
8178f4dfdd | |||
4a3305c007 | |||
9858bc81a3 | |||
b5573b3adb | |||
15dd4ad177 | |||
d540971443 | |||
1d7c76d141 | |||
224a49341a | |||
fce010f051 | |||
bdc8e3b79e | |||
9289af040c | |||
49a769ac06 | |||
2b450aeb20 | |||
5f1c0111a6 | |||
89f0dc2d14 | |||
cffb0e9a25 | |||
2b26e3867f | |||
aad433e11e | |||
59e1a18197 | |||
8f98044d69 | |||
6c414409d4 | |||
7119bf5d86 | |||
ea1222b33f | |||
37edfe2de9 | |||
76a2d9b59b | |||
87f127722c | |||
a49b5ef072 | |||
5cad92e57e | |||
f6ef1fe65e | |||
048e429356 | |||
eb3cb4bbf8 | |||
b0866f59cc | |||
b3b016a4a3 | |||
341e17bf53 | |||
eb4561e3a6 | |||
990b234067 | |||
07a4e6370a | |||
1381e96d8c | |||
5ca303393f | |||
de2c565953 | |||
2a254fce8f | |||
758f136d3e | |||
5d3d86c680 | |||
d8d5adeb61 | |||
003456f770 | |||
394d8ade15 | |||
61107c59cf | |||
889e54eab8 | |||
a14f3c90a8 | |||
e05ed58bf8 | |||
d6824d540b | |||
2e35326040 | |||
e5dcaa818e | |||
bac2da8669 | |||
9c293b5b7b | |||
6804065a8d | |||
246444dd57 | |||
6a216b5708 | |||
f6d2da27e3 | |||
ada59feda8 | |||
af8d4d49ed | |||
dc002b4b35 | |||
acb0a2f027 | |||
43bbbbf4e0 | |||
05da66b5e9 | |||
b8cea84195 | |||
741dce3ca6 | |||
67d87dd2a9 | |||
ab142282a3 | |||
bfe5b88e78 | |||
fc26001b50 | |||
1542c7f49c | |||
615ab1a7b8 | |||
ce1af1bc9c | |||
ab0e3fdd82 | |||
40aca0b6b3 | |||
a632c00b0d | |||
db2e04361d | |||
7d19b108c4 | |||
818afe6232 | |||
e8da5f9e28 | |||
b3fee6cab2 | |||
da7a8ce60a | |||
a6386bd640 | |||
b3feda052d | |||
c1eb2bccaa | |||
5cb6dc7795 | |||
af66d8027b | |||
4ee4495120 | |||
c02721775a | |||
cbdcd32959 | |||
12bdefe00e | |||
81829d132b | |||
5fa0f8f55b | |||
7e818e877a | |||
32a40ab5c5 | |||
c2087b7c13 | |||
feffae60dd | |||
8e3f6fe2dc | |||
92b8c5bb60 | |||
646237e234 | |||
b4f71c7cc7 | |||
73334207ce | |||
e8a6b1cfb5 | |||
748238d6ab | |||
5fcd4bb082 | |||
a1aef91e39 | |||
c2c128dd67 | |||
372206e159 | |||
c036108b59 | |||
b5c77cf4f6 | |||
2b33be939a | |||
e01cad2f7d | |||
a1beb72cad | |||
a9348e0acc | |||
9a1e22afab | |||
855ee06247 | |||
f1ad9bdaea | |||
2f73215d4f | |||
155405e0d0 | |||
88e83c7322 | |||
35ddec7aeb | |||
e11922e5cc | |||
a79c002145 | |||
ea91cfdf9a | |||
031e4300a5 | |||
dd0ca7335f | |||
686d8823eb | |||
a5d554c3ef | |||
177db9cf79 | |||
2d8c3d2934 | |||
f1192b2d16 | |||
fc164e4709 | |||
1c95e2e8e0 | |||
9962de1a4c | |||
304a72c1ff | |||
83112ed5e0 | |||
fbd781fc83 | |||
62306f5ce8 | |||
1d15048f2f | |||
adcffce0a0 | |||
9a65fe904d | |||
ac998e9222 | |||
15c0ad60c5 | |||
0de25f08ba | |||
bca7ce8043 | |||
ee14785f68 | |||
c0ed118ba5 | |||
0adb664a31 | |||
4a54328901 | |||
24508194c2 | |||
95b46b4278 | |||
b16ccb4811 | |||
4119752f83 | |||
b7b5fdf42a | |||
dbd9423fc0 | |||
8f19becb62 | |||
38e5c32a55 | |||
0c50945303 | |||
8726d7b0a3 | |||
408ef5298b | |||
2ce243bc6e | |||
255594ba3a | |||
8bb0232ace | |||
e3efacaae6 | |||
a550df4301 | |||
710dda5221 | |||
c3b864d8d4 | |||
6892018142 | |||
84df805ed3 | |||
9c286da29b | |||
92b7974f44 | |||
38860323de | |||
8316425375 | |||
0cedc8014b | |||
8aae1fc5d7 | |||
4ad3144f50 | |||
4b01d594c4 | |||
5e4cd05e04 | |||
7cf01b10b7 | |||
eb7d1e22e5 | |||
0555b26161 | |||
bb0a31158a | |||
bfd2b6298e | |||
b87d97aa2b | |||
48b2028af8 | |||
92be4ea871 | |||
8a2656681f | |||
5671cae225 | |||
ef8d252843 | |||
af670ca138 | |||
aace0d1192 | |||
cee4b4593b | |||
434ccf3df4 | |||
b81df11d8a | |||
dab498c3b7 | |||
d5bb9731fe | |||
9dd0b7c6de | |||
1cae68dde3 | |||
996e1515b3 | |||
f6808158c5 | |||
7e4c5b3636 | |||
0994972c07 | |||
a0da531170 | |||
46a0f812b1 | |||
de78f867a4 | |||
707145c491 | |||
1e597a64dc | |||
4c394a9d7b | |||
3eef1560a2 | |||
fc574086ec | |||
68e66fa920 | |||
38df6eb3a9 | |||
0245f8438d | |||
d7ea8356a7 | |||
c64ea49432 | |||
38fe1c6066 | |||
74f01881e3 | |||
0f8da71588 | |||
7d3cfcfd0b | |||
536397b22f | |||
6253bea73c | |||
a5ef93c83a | |||
5b9dfa0600 | |||
5d0bcf8152 | |||
83007f77f5 | |||
c456e20750 | |||
982017a2ab | |||
3b4cd98498 | |||
0ed767fac5 | |||
25fbec6638 | |||
ae6c30a711 | |||
c7b1ed2395 | |||
5d0f020648 | |||
74e6fbab82 | |||
30824bc58e | |||
d146965025 | |||
e1e155022f | |||
d37a8f72d6 | |||
9dd3e3e38a | |||
b927b80e10 | |||
af6736c356 | |||
6e98b3ebb2 | |||
afb81b8005 | |||
2b922e9e68 | |||
57637ba0b0 | |||
d536ddc240 | |||
564399bd75 | |||
87a693d1a9 | |||
49bd24144a | |||
182b8a4582 | |||
97bddc8cfa | |||
a55e26959b | |||
63e2222af1 | |||
9637fe8a74 | |||
c084458294 | |||
498e9f4298 | |||
13033034db | |||
749c63d3b3 | |||
73c2619c33 | |||
65f9553365 | |||
3f621c8ed4 | |||
11f3b487ee | |||
4c253aedae | |||
efdad526ee | |||
4081a8f7b6 | |||
867f948bb2 | |||
767ed8c5da | |||
f0aadc3d0b | |||
d95c4483fd | |||
00a147b244 | |||
74eae83b54 | |||
324b44872c | |||
94a1d4d3ac | |||
a3392007cd | |||
4ac06a4eef | |||
0495ded87d | |||
64b80b3201 | |||
fa20eb1de7 | |||
ae15803bf1 | |||
9e375179d8 | |||
460760d7b6 | |||
682b620922 | |||
6b69cd2e57 | |||
56a86bb9e2 | |||
00ad2ffc61 | |||
a16e92800d | |||
7c9ff4bfe7 | |||
d334093606 | |||
044bd3cb41 | |||
4e192db13c | |||
8cc5442401 | |||
bd94d5fce7 | |||
b6be906082 | |||
60a5df5262 | |||
c384a17b41 | |||
6fdd6004f2 | |||
c4fe6f5277 | |||
645e331559 | |||
45bddcd808 | |||
9627458ecc | |||
f8b3d34225 | |||
5273c61cd8 | |||
0c1c947aaf | |||
6224ae1c60 | |||
72f4a9f678 | |||
060f4ea320 | |||
6177954773 | |||
7b40d7b942 | |||
1317433a51 | |||
a578d719e1 | |||
8bb10c3bf1 | |||
b920cd2f23 | |||
38dac93f63 | |||
6f66be12f6 | |||
4ee93331dc | |||
30a675ab87 | |||
845522f59b | |||
f37be09a92 | |||
ed877f5e3e | |||
d916403927 | |||
41f6aa7940 | |||
50a63777ec | |||
26fe7a9d66 | |||
07a0e2caf7 | |||
30bfd44dfd | |||
26f8708fed | |||
3beec8d4fa | |||
2e553bcd69 | |||
0e5a5f1805 | |||
d02cfc54b6 | |||
7b9ac9d414 | |||
515de0d68d | |||
1eeb6785ad | |||
20392878f1 | |||
102067d43d | |||
6c88e21459 | |||
041f19494e | |||
8e9f507bbc | |||
c380819e02 | |||
fa84e52af0 | |||
cf9238e09d | |||
190f3024da | |||
768053b6f2 | |||
bdd2a412c4 | |||
d217c7df05 | |||
9484da57ed | |||
ef2ccc8117 | |||
02887dc164 | |||
d048af11cd | |||
0559d1d171 | |||
37b681ac11 | |||
f065ddbdb2 | |||
140053502b | |||
58fad91b0b | |||
01b5aa123d | |||
8cdf767bf5 | |||
e910882e32 | |||
a1c9c497d5 | |||
a63c838b10 | |||
b7e574607c | |||
10e6b4e454 | |||
ec5b1924c4 | |||
80ddb484de | |||
cafb2e540e | |||
b4e3f22259 | |||
df52157834 | |||
a13958b32b | |||
a31b58eeea | |||
e31b816aa0 | |||
0e5027d8d8 | |||
dc79533191 | |||
128e4d5565 | |||
ad3960580d | |||
00683d06c2 | |||
a38980c80b | |||
664a180d72 | |||
d6346561db | |||
d82ada89fe | |||
9d384b4e38 | |||
6e45e55d82 | |||
ecaccd9739 | |||
95a2d49232 | |||
16c16b3e6e | |||
945e00b73f | |||
e592b4bcf0 | |||
96ef2d3821 | |||
2d126dc750 | |||
13a32e9595 | |||
73f7164048 | |||
5b1b986c89 | |||
1c53bbea52 | |||
0c5c172a30 | |||
ff1643d81f | |||
378573ab8b | |||
33ddf6ea0e | |||
a2bc3538f7 | |||
636e98d151 | |||
9f01737fa7 | |||
be4e5d2617 | |||
cc78fb721b | |||
bb7d2a7347 | |||
9d03763d94 | |||
3cf4529f3c | |||
477fb58311 | |||
59043b24cc | |||
15547eb654 | |||
16f9cc7369 | |||
efa9df24c2 | |||
a37eca9df5 | |||
e68d2345d5 | |||
fced3e00ce | |||
c53663c7ac | |||
bc2e65e482 | |||
ce2814967d | |||
781725aeaf | |||
9276dc9e6c | |||
c7de368dc2 | |||
fbd9994f6f | |||
087c368242 | |||
a56354a893 | |||
a5d4c8d532 | |||
a46fe3ad43 | |||
4ffa5b0636 | |||
62ec52dd95 | |||
ea876e59a8 | |||
66eee34709 | |||
85627516a4 | |||
b26ee09f71 | |||
fb89b042f8 | |||
646aeb2b18 | |||
2a60ceb694 | |||
80916a3613 | |||
0c3d06c41e | |||
07db922024 | |||
fa610270ab | |||
cefefba244 | |||
42017bbeda | |||
a3ee281e2b | |||
232290108e | |||
5c017d7071 | |||
62aacf88ab | |||
b3e77d3d50 | |||
766085293d | |||
4a593d0405 | |||
82b6b8c87e | |||
b6f9f4c436 | |||
b120ca27f8 | |||
5eb1f3a4c6 | |||
8ada9d06e8 | |||
cce8c4dbae | |||
3502db1ac5 | |||
df8a0e8418 | |||
b8a25063f6 | |||
6df21f3489 | |||
dcba2c3642 | |||
059c963467 | |||
ce9c6df456 | |||
0aef3b4040 | |||
4cc0589440 | |||
96722083d8 | |||
ee238eb00d | |||
45ccc7d475 | |||
a32d2ad193 | |||
f25919ad56 | |||
ae524d856d | |||
9be4f9c055 | |||
40e5b285f2 | |||
3ca787ba76 | |||
137b9ecf5e | |||
2509624add | |||
8c6fcd98be | |||
7dc825dbe9 | |||
6b3336d107 | |||
ceeb266273 | |||
9bb0733eb5 | |||
22cdad2d20 | |||
8b3befea6d | |||
5b9928f1a9 | |||
856a59901e | |||
19d0961020 | |||
3bd5e65edc | |||
b520046ab6 | |||
d22550a520 | |||
6f994ec56b | |||
09c8e40363 | |||
8e44c06a13 | |||
358f17f615 | |||
b109e31722 | |||
b77458ae81 | |||
cfeb8e83f7 | |||
0fa9ad46ae | |||
cfb11177cd | |||
0a1979fd20 | |||
0dc64b93d8 | |||
f6c9acd518 | |||
68218dd31c | |||
441b64b467 | |||
8b319969f3 | |||
41b1787565 | |||
e6fccdd9c1 | |||
0ffef8c79d | |||
3d52079a7c | |||
e47c29e728 | |||
280374f739 | |||
ce15937717 | |||
c8f2ba5b49 | |||
3dbfd18f36 | |||
4be0ae2008 | |||
67b39050df | |||
4ccd8c1400 | |||
4f997665f1 | |||
b6a15d9719 | |||
e90194093e | |||
4c90293e44 | |||
8197e9b2e4 | |||
baec99079f | |||
16a5e6bf16 | |||
39f715982d | |||
724d4ec3de | |||
e4670d3abc | |||
8aa86d063a | |||
c1d9e00044 | |||
0827a447d3 | |||
2874565b36 | |||
8ed3126f28 | |||
b408fdffcc | |||
d9cd600c1b | |||
68f18923ab | |||
9e74a7dfe1 | |||
0b5b888f82 | |||
46854b439a | |||
8ffed4b859 | |||
3b8cd9652a | |||
269050aee3 | |||
6e753f8f0f | |||
9adcc73d61 | |||
ddea300822 | |||
9900c92ebc | |||
0bd1264faf | |||
49753eb2d0 | |||
c9605f2251 | |||
6ee11c2a6f | |||
ef1d384184 | |||
a6d4f04019 | |||
87d27b8616 | |||
f22d8120ef | |||
8ecfbcdf34 | |||
263daaacaf | |||
d3254d8066 | |||
76e15a0695 | |||
1931838a11 | |||
6bd49b1d5c | |||
2d4d16755c | |||
bfcf6db17a | |||
bda4d8812e | |||
f70d4a6fd4 | |||
90ff345d73 | |||
8fa5d4c313 | |||
2162fd8e1a | |||
248a2f2f0b | |||
ef311ec70c | |||
5b70d23211 | |||
16ce555845 | |||
c961925356 | |||
23ea727915 | |||
f157bca548 | |||
35937e6263 | |||
69bd7c16eb | |||
6940e13629 | |||
380ff114e9 | |||
5e53002303 | |||
872d1c1d98 | |||
94187837c7 | |||
ede3545d8b | |||
cdac882834 | |||
1ee224652c | |||
8511638afb | |||
b10007a7b5 | |||
19ce862810 | |||
124665b392 | |||
b420ccdbf8 | |||
5e8f385705 | |||
dcc889a264 | |||
f3789801f2 | |||
0f08b13fa0 | |||
2ce6e7a7fb | |||
83d5864203 | |||
7e2c52f2b9 | |||
e88f364282 | |||
21f696f02e | |||
ef1ea07e68 | |||
0c02a8f4d3 | |||
48f7f7a17b | |||
115ee8bad5 | |||
c009896c34 | |||
6dc36f1e6e | |||
f4436f118c | |||
8440aaea5a | |||
0d0338012b | |||
5ac1b6e940 | |||
92aaaef381 | |||
2c87e68ad6 | |||
26e690c220 | |||
b63dd7a464 | |||
d2a7628748 | |||
b1e7b834ac | |||
9eb47a924a | |||
1d62bf1c37 | |||
982d46e7cb | |||
1fbface656 | |||
1374e65401 | |||
0fab4e1955 | |||
a2574169e2 | |||
4b88e059ef | |||
12a7059ae8 | |||
a897f355a9 | |||
326ab632c3 | |||
dda096da03 | |||
5daec436f9 | |||
033c743a41 | |||
459d8f9ba2 | |||
0022cc4782 | |||
995e556065 | |||
a93268acec | |||
e70c54547e | |||
7919545499 | |||
5a8db5954c | |||
ee4e1936d0 | |||
ec67780854 | |||
aaf8835cdb | |||
0a525f768b | |||
4ed43b7632 | |||
5e09e13ece | |||
eec725a345 | |||
fd63344ffc | |||
90a9f22c3d | |||
cc3ac932d9 | |||
d8947d1fa4 | |||
32ba60185e | |||
8bcfba8231 | |||
68f269437d | |||
29ee3a1ffc | |||
39e8b91806 | |||
3ab7fcf5dd | |||
3a509c6168 | |||
6dcbc4dff4 | |||
d928b148d8 | |||
3209a9d4e8 | |||
f0f83bab52 | |||
6aa6af04ac | |||
5b977453cb | |||
a60e425d39 | |||
4e3739cdf2 | |||
e51b4700e2 | |||
0b9f7c4c89 | |||
9dcdbbb649 | |||
ac2f0c9896 | |||
fbf5e08425 | |||
df5c264754 | |||
66f535ad61 | |||
b8d84ababb | |||
b485b7a252 | |||
c1395bb543 | |||
0c2e998f69 | |||
504529c3aa | |||
1fab45024b | |||
e354235ebb | |||
d55196352c | |||
45e569845e | |||
b55421d4a1 | |||
fb8da3e4b1 | |||
a9c0f9a165 | |||
4b5c4d58dc | |||
b0e58b5b14 | |||
858c81a19b | |||
04360a35ed | |||
c8ca944fac | |||
b5e4d1a491 | |||
20cb846c95 | |||
a1e531589e | |||
d6b680de48 | |||
28314632bd | |||
09ab904354 | |||
5c0cf60ec1 | |||
698caed9c0 | |||
ae05f5c4b0 | |||
d397bba6b2 | |||
7a6b66e684 | |||
e6daeef55c | |||
c36c1b8992 | |||
1d1f575b5c | |||
ecdffa03f8 | |||
6688184bfd | |||
84a4fd40a0 | |||
d37a195392 | |||
11e76af819 | |||
ed8c0d173e | |||
c57fdbedaf | |||
bd9676aa04 | |||
e5d0a9ecdf | |||
314debb799 | |||
24ad714d0d | |||
41225b53fa | |||
5efd306f7b | |||
ccbcb5c8d3 | |||
2f172d6c5a | |||
1eb81fdf36 | |||
62b6af693d | |||
a49988afbf | |||
03495beadb | |||
079fdbf9bc | |||
002e3840e6 | |||
96c558bec4 | |||
a267263420 | |||
c14fd1ad18 | |||
88782ae43c | |||
70e777d031 | |||
9e1482ad04 | |||
fef08192ad | |||
5488422471 | |||
e8e6dbf839 | |||
5602a09cc6 | |||
164a01e723 | |||
f7f106c42a | |||
7f817fe583 | |||
5e66d95fbd | |||
d064b2e4af | |||
9d067d26da | |||
8e417ecb5c | |||
a9d072ad02 | |||
5630c2e72c | |||
29ff59cc8a | |||
dab429521b | |||
48fc106905 | |||
ee72d5d01d | |||
378f4dd46d | |||
2455f081fc | |||
f06acc4e27 | |||
3c546341e3 | |||
650bd1c179 | |||
9efa96fe0c | |||
361c2ac576 | |||
54359be31a | |||
77949acaee | |||
88a852ef0f | |||
cb52b1757d | |||
b4869d0663 | |||
30fa7b8006 | |||
7793ca4055 | |||
3353a23fcb | |||
b32b9bd1d5 | |||
133a8cea1c | |||
729dbf7dda | |||
67e9ef43a7 | |||
1b5b54fe94 | |||
9b3e6112ff | |||
7663e7dd05 | |||
2e29e64a3f | |||
15e0319c98 | |||
055ca98fb2 | |||
968295ed81 | |||
48e366d7a8 | |||
9aa10ef7ca | |||
a85b8d69ef | |||
2900d51e5d | |||
63cc113f12 | |||
3bf88da091 | |||
11e3122843 | |||
dbe6b1da44 | |||
91dc7776ec | |||
a5036499d2 | |||
9ef4b45609 | |||
5b160f187d | |||
604f17b897 | |||
da1f3bf41e | |||
452acf3a75 | |||
5ad50adaa8 | |||
c165165b58 | |||
0303d315fc | |||
2129257454 | |||
a7e9ce2e33 | |||
b9851cdabe | |||
a9261c6d64 | |||
064131887b | |||
6b5d5b11b0 | |||
3f2859ec16 | |||
5340f2f2eb | |||
8610b0e406 | |||
ffb4767fc1 | |||
97cae2df99 | |||
dc0369eb10 | |||
71f0bd003f | |||
cc65e91eeb | |||
2ae0208d3b | |||
7114663f52 | |||
26e45e41ed | |||
38b14c5c44 | |||
0c76d7e621 | |||
c69c84da09 | |||
0565fe4213 | |||
cb0bc98576 | |||
ef4eeede86 | |||
1cce581ffe | |||
989a85bb05 | |||
db3645c76b | |||
b5c5496b2f | |||
4aec6dabde | |||
0fac7bd373 | |||
9c1c1062be | |||
36a03e3bc8 | |||
dfb0a65e07 | |||
d40866add2 | |||
9ca8ff77f3 | |||
e95ac10ff7 | |||
c7cf2c17a2 | |||
29b1e30126 | |||
24b9eddc7e | |||
effa766d4a | |||
b9783e44a3 | |||
35c817ccd0 | |||
77d68bc7bd | |||
6392a349ce | |||
4489dd24a8 | |||
d374648ce3 | |||
d611e7d50e | |||
25d6d21617 | |||
74b4096570 | |||
eca55be4fb | |||
71372c4d2f | |||
a0693d466c | |||
14d2456c35 | |||
c8bdf0790f | |||
0b8a5cb4bb | |||
8f98d5a8f8 | |||
b83a2c1a00 | |||
5a4d4ad736 | |||
5bc6dccbbd | |||
42ee300e92 | |||
582f5103d9 | |||
abef859925 | |||
6eb79c28d1 | |||
84a096561a | |||
9a1f105869 | |||
677f2c6ca9 | |||
508230e91b | |||
9cab515e58 | |||
514036898f | |||
19415f2554 | |||
710a29a1e0 | |||
c36c34cf9e | |||
e910c224da | |||
ea95453975 | |||
61ea398612 | |||
64e1d3a975 | |||
50fc7327f2 | |||
71edae4a0f | |||
0dd8ed9171 | |||
d568559f01 | |||
1e290542bb | |||
245304f593 | |||
be441dc176 | |||
da1a0249d7 | |||
d07587885c | |||
376b45c199 | |||
b247366c4e | |||
7c383094d9 | |||
9721990507 | |||
452067ffca | |||
3ce5efc44b | |||
1e8c1a4c46 | |||
b53ec1b247 | |||
4ccfbe4e5a | |||
7698c051aa | |||
1950f09bde | |||
e41b03eb30 | |||
98545f30aa | |||
81873d97f8 | |||
cda56ca129 | |||
ab5e0703da | |||
f370ef38c4 | |||
1119a2e185 | |||
9d7ac3d99f | |||
0732e66da9 | |||
e56e2f4c18 | |||
23d9649aec | |||
738a245c3e | |||
78d73720a2 | |||
e59282fe20 | |||
9785b15ed2 | |||
8c94a3d177 | |||
5bd8aa489b | |||
e71c2937de | |||
3d6c58df53 | |||
34c090a31d | |||
762421b355 | |||
b7f3d180aa | |||
71f8cc9dd2 | |||
3c7bc6fd42 | |||
af60844aea | |||
c4c13dd235 | |||
ba4f0186dd | |||
a5c09e4c11 | |||
c7818714ac | |||
cec3d74497 | |||
10b226418c | |||
c843085a28 | |||
101c5a275f | |||
acf4b0981e | |||
98c0908185 | |||
ead3701f5b | |||
0349b0a735 | |||
11cad9fb20 | |||
7f44fec0a5 | |||
d4c8a2058d | |||
d73e63bd70 | |||
48655c2e12 | |||
d0d5518ea8 | |||
822e75f7c2 | |||
08b6b4ec4e | |||
3253e3f315 | |||
e58e54c2db | |||
0a7dc10dd3 | |||
3914aec72f | |||
9b63fc758e | |||
d3130ace30 | |||
daa09a5fbb | |||
a249dadfb0 | |||
64e9f1f3a2 | |||
9110097e11 | |||
ac48b58184 | |||
8f5fb47082 | |||
a58382d3ff | |||
5ef8e3cf29 | |||
6544014ced | |||
3fcb3e2ed3 | |||
caebc9347f | |||
1f257c5875 | |||
e2a3de71ca | |||
57a0134b0c | |||
d9b18ec853 | |||
6c14415664 | |||
567b3985ab | |||
45561d552e | |||
fbd5bd8f37 | |||
048beb752d | |||
87621b6345 | |||
ff14dfc0fc | |||
c624831717 | |||
c697a003d1 | |||
6bdd7a1609 | |||
50a195fe59 | |||
738016952f | |||
209aa25d27 | |||
1279c935e2 | |||
28e5a8031c | |||
f4844e2c0c | |||
ef3a13fa63 | |||
699f769385 | |||
2548b657d8 | |||
02d19dafb2 | |||
78009d9d07 | |||
2aa7ddf1a8 | |||
3c142efecf | |||
23b3e3c84d | |||
8b8600fdab | |||
1938a12222 | |||
4c11ef5d20 | |||
6ac40e2cc5 | |||
5625e059e1 | |||
11767bec0e | |||
7a92bf974d | |||
fc46e9c9a0 | |||
7a752d0795 | |||
0cff53785b | |||
4ad885001a | |||
a0dec909e7 | |||
2a660b19a7 | |||
8992c44c41 | |||
53fd8fe6ea | |||
0059d16731 | |||
18bc344cf5 | |||
e04f4b3f20 | |||
5e389a0970 | |||
1141459607 | |||
02659df6ba | |||
14bd424d2a | |||
7c76b7db04 | |||
a7553eae28 | |||
5cc50bb979 | |||
932eae7343 | |||
604f122819 | |||
d6a7630fe2 | |||
fc4b03ee74 | |||
e9c7610cb7 | |||
3c3a5aa503 | |||
6d3dc83c5d | |||
89512d4e05 | |||
b1d71136b0 | |||
8cf47f2425 | |||
c75b403bb7 | |||
ae284610cf | |||
5a7d33330a | |||
12a9a1001e | |||
97a1af39f7 | |||
6832435326 | |||
62bb94c50b | |||
eeb7e12b9f | |||
f796537712 | |||
469446a02b | |||
b24ef50f7b | |||
f6466214c6 | |||
9c4d32b5b8 | |||
50be709e91 | |||
2e060f856d | |||
c9a2401983 | |||
ce58790fc0 | |||
7f3e04cbc4 | |||
3fb346fe29 | |||
36213dba7d | |||
65817144ac | |||
82432195a8 | |||
77b81e7361 | |||
83f925ccc9 | |||
39208eeb9a | |||
f32d1022bd | |||
ee9447de01 | |||
dcfc24501b | |||
e65e723e03 | |||
94e30002e7 | |||
37603272be | |||
4263519479 | |||
db302ff18b | |||
cbde30e9d4 | |||
c0fd8f4e15 | |||
d39e9ea11c | |||
5b64681867 | |||
0132657432 | |||
aac7c7d75d | |||
bd239d7e3d | |||
da1f2f3c17 | |||
7374af51d1 | |||
38fa2fe0b1 | |||
5a0cc43ee1 | |||
f08a3fedf6 | |||
5cf3426834 | |||
96736309a7 | |||
42ece199c8 | |||
54d01fec43 | |||
f8d717d195 | |||
c6db05c5ae | |||
6f78b67f03 | |||
a5af81506f | |||
087bc6daeb | |||
f18dbb0b40 | |||
6cbd0f1faf | |||
dcd9cd638b | |||
350530f664 | |||
dabce05ec6 | |||
993bf03af9 | |||
2508008b53 | |||
a0012c9e82 | |||
c63956b8ec | |||
6965797286 | |||
5a74cffa0f | |||
f21ff8bac8 | |||
5d932398df | |||
5532fc1102 | |||
60d66ebc0d | |||
29853549c3 | |||
d0b5cd64c3 | |||
cd4243b6ad | |||
cd2be88707 | |||
5b9d306cdf | |||
0fa47bb867 | |||
b22e890ec2 | |||
b6fa63abdf | |||
51a346bcbe | |||
fd9587d26e | |||
0e1d82dd9f | |||
be261b3e69 | |||
f6847b0314 | |||
eca6bdb85d | |||
a3bd1c71ca | |||
b19039ba8b | |||
94a4cc8415 | |||
2e4fda6d4c | |||
cd7e234445 | |||
a5e747af14 | |||
5060861545 | |||
992cf3dd25 | |||
1dee73cdde | |||
3aa7242925 | |||
4009f3a987 | |||
cfd451c6f3 | |||
8e07fbf636 | |||
dae249dc71 | |||
e194acdd79 | |||
287d430fcf | |||
d1d2fceed8 | |||
8cc39a3590 | |||
a57896a7ce | |||
35720304be | |||
09b2565b1b | |||
5b9335be10 | |||
9ce0617cda | |||
61ba214f19 | |||
bfe076748b | |||
070412b9c1 | |||
ccb21a745d | |||
87599de782 | |||
126d1f1cd1 | |||
7685893cdb | |||
f9f163e48f | |||
15ba6249fc | |||
f3799f94bf | |||
e77c431582 | |||
338daa1282 | |||
c616fcafe8 | |||
08fe1e2cd7 | |||
746a2a0ed0 | |||
d2787519e3 | |||
23d0cea3c9 | |||
530bd2b341 | |||
8adc2648f8 | |||
0c45918d54 | |||
288432843b | |||
684f4dd1c4 | |||
d8d89507b5 | |||
f1ef398909 | |||
66e8faaaa9 | |||
f17a3dde1a | |||
88ced831c1 | |||
cc1d6b33b1 | |||
2832cb643d | |||
cd377f3d99 | |||
0def6e3471 | |||
1148a2d0d1 | |||
38d9aedb26 | |||
1467776a3f | |||
f678731234 | |||
e04d2a6efa | |||
1136e887bd | |||
416020daef | |||
73a1b39446 | |||
253bbf3a5c | |||
782cffb130 | |||
a24352ddfd | |||
2f41663673 | |||
cdd1dd3d20 | |||
dea1dbfba4 | |||
988a32ced5 | |||
188a6f5ec5 | |||
aa4050d406 | |||
581097d58d | |||
dba3595c0a | |||
c159b872ef | |||
df74edeb45 | |||
dcf7d85cba | |||
8e953d9931 | |||
9f89bbd5ec | |||
6a6dd84b39 | |||
36ce9c1fb9 | |||
0581f6ec00 | |||
1a582d54e5 | |||
a3161b902e | |||
783f3b0957 | |||
8ff0161d58 | |||
9f7bcca91e | |||
891f6985ed | |||
98ffef26dc | |||
81179b4829 | |||
e7bc3e09a3 | |||
8f93cf5c55 | |||
dc0b2dda5e | |||
ed5d65b54f | |||
172d384bf2 | |||
1e30c3a941 | |||
a10a3f2fa7 | |||
2287534ec6 | |||
27d6d35893 | |||
13429d204d | |||
0d4f2da8db | |||
47fdbf3817 | |||
1d4a3c87f5 | |||
c18f6c2618 | |||
6e8f249b20 | |||
3ac568c40c | |||
90409f383a | |||
cc72f5dfd0 | |||
6d620f5e0c | |||
9d686ba523 | |||
9e5c4973eb | |||
70a67ca67d | |||
e43473faef | |||
38e7dd2b9e | |||
42ce48db39 | |||
445d4b7e59 | |||
05a3418f86 | |||
df46521658 | |||
d559d5a374 | |||
469b8ee022 | |||
385f7da77f | |||
90506479e7 | |||
b2a2b0fc21 | |||
7862416844 | |||
031946136b | |||
7b59e05600 | |||
f6050ab804 | |||
43e97a5aa2 | |||
f0cf9c2cdf | |||
3e0a3ec45f | |||
6865cd8d69 | |||
59b80cb01e | |||
d946be29b9 | |||
95322c11d9 | |||
76ca6adbc5 | |||
45aa579f68 | |||
9ddd7e0e3f | |||
6730b6a15a | |||
6e08be1d0b | |||
0b21441590 | |||
449a14d1d0 | |||
57495a794d | |||
7d0ae2939d | |||
7fa289316a | |||
0e8388d3ea | |||
caa8fea8e2 | |||
212e5d1a72 | |||
713952b9c7 | |||
20b8fc075b | |||
fc77f0bb96 | |||
2eb7d0d88c | |||
41493b1e3f | |||
f526bb2ecb | |||
4e37e12c06 | |||
d83ab141f6 | |||
11236dd545 | |||
bf8a154bec | |||
2b9ecd6eec | |||
3712a70115 | |||
e4f01a6825 | |||
3549cbb3a2 | |||
7c17697cae | |||
0e1d306b2e | |||
70c208ead7 | |||
2d25662b81 | |||
e12edca29a | |||
7e0663e4e0 | |||
4bd736e1a7 | |||
d39830a4dc | |||
d7c9f947ed | |||
84426631b4 | |||
2c9c2e139e | |||
a540bae7a9 | |||
891b568678 | |||
901360b902 | |||
c8295e1485 | |||
9cc8ebd351 | |||
3f6bfbd981 | |||
6fece5525e | |||
28b43ab137 | |||
f807d7cefb | |||
f240c5381a | |||
32281ddcb0 | |||
d23d44a3d5 | |||
dd4c260488 | |||
524d792308 | |||
649a0124d6 | |||
de4f88b4cb | |||
00c1c26bf8 | |||
f4e09634cc | |||
eb05cb4d11 | |||
ec8e8cb51c | |||
249cd2c766 | |||
7323833888 | |||
8904200d48 | |||
7c6a8dc5fc | |||
8bf3093a52 | |||
b2373220e5 | |||
ad79688c5f | |||
50c28dbf92 | |||
7c8cb33848 | |||
e5eb06c78b | |||
d6623d4b65 | |||
04e93d9e3b | |||
76e0381db8 | |||
d375b0e0a3 | |||
97d34b52d7 | |||
0fce34ec16 | |||
42af8ee059 | |||
ed4a70c618 | |||
d49c4d641a | |||
8263f3b171 | |||
0b692faddd | |||
62b17844b9 | |||
8a6544f7f9 | |||
9c1bef49e6 | |||
f9d7ad8e43 | |||
69898722cb | |||
687b357b2d | |||
3beee6da77 | |||
16a7e4ae68 | |||
def4ad645c | |||
ecce840eca | |||
273e3aed10 | |||
2a549d548a | |||
a83691d662 | |||
13296af491 | |||
706718ca2e | |||
a971fc8f36 | |||
0a5929cc85 | |||
2c24cb63a6 | |||
9bdfb04691 | |||
f4dc71bd85 | |||
cdbb35d87e | |||
a32c671ac9 | |||
528193e925 | |||
ac08a38db9 | |||
3e20edf10e | |||
be5032f49e | |||
8330e0e8ba | |||
df55fb1f14 | |||
d606018ddb | |||
20bcd4009b | |||
d6d2a53087 | |||
55e90c0c36 | |||
220804714b | |||
d41f413016 | |||
0ad698ffbf | |||
b670ba182e | |||
e40415cf16 | |||
204059c61a | |||
4cccdb89c0 | |||
b98a5de39b | |||
ef00ed6090 | |||
8acd503526 | |||
4bca8af499 | |||
4d7f39f819 | |||
37f865ab24 | |||
b133fa3b6e | |||
1e679e3cbd | |||
bd1acfd868 | |||
24dcc5eb37 | |||
99b2adcbe2 | |||
12df4c4af7 | |||
ed5a3e92ff | |||
5c35f3dbd1 | |||
afb23f09cf | |||
5a114fd840 | |||
9db58da8b7 | |||
54bbddec60 | |||
a1c54425f7 | |||
e22ba031f5 | |||
08ad02d2b0 | |||
1b758e4d6b | |||
5571142e25 | |||
3b9ac30efa | |||
39be4cd80b | |||
16286e3e2f | |||
bf18987369 | |||
e19e06aba7 | |||
33c18c36db | |||
1a589e2313 | |||
f64f226127 | |||
f47d905225 | |||
34a9419b89 | |||
1bb6e1911b | |||
1dcc6b2e10 | |||
a86f740995 | |||
d84cd978d4 | |||
e2ef242898 | |||
49acc388dd | |||
4e8941950c | |||
312732bdbe | |||
e6685436d8 | |||
5fa4f47bae | |||
4dbb47feb1 | |||
a93e11b797 | |||
0aad26d85e | |||
585c3015a5 | |||
b6209b3732 | |||
079f177cda | |||
ce49ba428b | |||
b5dae8e4f1 | |||
0403f008e3 | |||
96b378d5ba | |||
ff0617f41e | |||
9ea498585c | |||
aa2cb66ea2 | |||
420b1aa859 | |||
f2f6be5e99 | |||
e360726730 | |||
fd8fe4dd08 | |||
1e10e452aa | |||
ea37d8cef9 | |||
7734a9229e | |||
ca35e57eac | |||
369b6d2f67 | |||
0d8f70423a | |||
e5972efa41 | |||
2c7fba0a9c | |||
1ece4bb7df | |||
b219198576 | |||
ff210e824b | |||
95558a2965 | |||
4bcea7b31f | |||
1edc392194 | |||
599f78a4bd | |||
f772d49faf | |||
5fa62e40b1 | |||
ffdbe17037 | |||
fb22ea6a66 | |||
c27ee355e4 | |||
035833cb39 | |||
aa020d70c2 | |||
43b26ca188 | |||
7c506d2e9e | |||
b66543bb29 | |||
0f25a2b434 | |||
026b68c47b | |||
1775c8a6ff | |||
3c8cf0c53f | |||
acaf99cd05 | |||
e2f6114839 | |||
9861213ad6 | |||
f676e5528a | |||
118a81a5fe | |||
56bc55428f | |||
ef56122888 | |||
542bea37fb | |||
1d8e772f6c | |||
0339e737f0 | |||
a1e56fdbed | |||
8908803532 | |||
13ac2cb125 | |||
2fe7889912 | |||
e2eedefc65 | |||
fd03c64346 | |||
fa877b573a | |||
63fe2977da | |||
de2771d126 | |||
37bdda0464 | |||
b4d9d56af4 | |||
9e4ebfd4f6 | |||
c7167190a6 | |||
9e53ae7035 | |||
3b8fe02080 | |||
437efe795a | |||
2d7e3da2cd | |||
d2c4e60115 | |||
2b50f6e0f8 | |||
214868777f | |||
4384008f81 | |||
86a25e64cd | |||
677581bb0f | |||
f2511a39ae | |||
f5d4618702 | |||
4094dcdf88 | |||
3386ea2345 | |||
e2618ab7c1 | |||
9f584e8cd9 | |||
3b4920011b | |||
e5f081586d | |||
0498d6fa89 | |||
1e8ea984d7 | |||
19ebdf31b9 | |||
6e9fce1c2d | |||
f07fc52cd0 | |||
c8581050ff | |||
b15cd4a82a | |||
95a98fb3e8 | |||
b050c11583 | |||
ceed66930e | |||
b13bb64c3b | |||
bb88d98ff8 | |||
465033b04a | |||
04d17ad56e | |||
d3dcc352da | |||
83481f9460 | |||
9bf8f79496 | |||
3823297958 | |||
17f0aad0f0 | |||
3374ada561 | |||
482697039b | |||
fa64c0d4a5 | |||
3561a1b775 | |||
2c6847bfa0 | |||
5d2330f04e | |||
6abe330303 | |||
436873a19a | |||
e7c95ebf5a | |||
a58800b901 | |||
8b17cac71c | |||
c490b9aa36 | |||
7e7ab8f541 | |||
c51f89b58e | |||
9da167dffd | |||
ce0b9dae59 | |||
7ce627c92e | |||
44bf5bf262 | |||
4fbcc37f84 | |||
fb221db8ae | |||
8b92a40e19 | |||
00d086f816 | |||
0d5a8f69e9 | |||
72058fdcbc | |||
b8bad5a227 | |||
274c8d7d3c | |||
f706e210ec | |||
e7770a7002 | |||
99fe0becd4 | |||
0eec622155 | |||
08691fcc97 | |||
db5d501715 | |||
00b1d16ac6 | |||
6b0950b03d | |||
858b5da24e | |||
1ac31361ca | |||
b6c5974b37 | |||
f24135f1ed | |||
55e9297202 | |||
800d43b846 | |||
cb23fe2aba | |||
7c0704b30c | |||
3671d7eb8a | |||
bd58094dbc | |||
b5c19a58f6 | |||
d5dff8960c | |||
e673dc6dbe | |||
d1d5e7c02a | |||
a0e6b98ce8 | |||
d0ea8f8433 | |||
b0492ba642 | |||
4b83b2696e | |||
88d9fba4c7 | |||
7b02847cd6 | |||
f369bf6b80 | |||
a6d6ac2413 | |||
8a44b572fc | |||
781123a906 | |||
553d9f5cfc | |||
1b1e630461 | |||
9a9e92724f | |||
57204c7917 | |||
578b1f4b94 | |||
c7b4a729a9 | |||
48171dc4ad | |||
da42afe32f | |||
f88910755b | |||
d176c59ea2 | |||
b2bee5c32a | |||
2692ef788b | |||
69b4977036 | |||
b95cd8968d | |||
67cbeeb395 | |||
e7fc1ef49e | |||
5fda7861fa | |||
80705aca61 | |||
db2eb75205 | |||
710566be93 | |||
3827b912c7 | |||
345c1deb58 | |||
3f2f232fc5 | |||
49c6f7245e | |||
bfc33150f4 | |||
6dea693441 | |||
3b9517ae73 | |||
842cd9dec3 | |||
4b4effe343 | |||
c3bb0a3421 | |||
878a80de7f | |||
f7e1397d98 | |||
e90fa623d9 | |||
9829c5eb95 | |||
3f23f40a56 | |||
cd2cae720b | |||
65b4141cd3 | |||
58c7a0f8fe | |||
9a2f2f1ee9 | |||
c983e2c5b1 | |||
2eb88d31a4 | |||
0fb68cbbfa | |||
064cd3315c | |||
cc3bf762ec | |||
29bbe0aebe | |||
33ce5829c3 | |||
a05bd3e477 | |||
9ed4bfbca8 | |||
67b6298895 | |||
3122790295 | |||
5aa089d1b2 | |||
b0a2160c3a | |||
4f343e791a | |||
7db87ec74b | |||
8679f3d757 | |||
65bafe7192 | |||
49b3c9e0a0 | |||
e244f85c0b | |||
cc151388a1 | |||
5f0a252fae | |||
d8fb4a8e19 | |||
5e53d337db | |||
b91000fc9e | |||
ce3cd71dc0 | |||
c283487d94 | |||
fe74c68c42 | |||
a521bfdfd8 | |||
d7b6b810d1 | |||
7028c9b59d | |||
891f067051 | |||
939721e2cb | |||
6226e38451 | |||
64435284ce | |||
cf70fe0c9e | |||
7218afdd8e | |||
0627336466 | |||
2b9ad9acb6 | |||
17d364c8a0 | |||
6ccfc2df56 | |||
26d27d9121 | |||
7832daf969 | |||
860bce8a80 | |||
eb61134bed | |||
c5d4e8d0c7 | |||
201287f60f | |||
d0d0405676 | |||
42f992303e | |||
e79a4faf10 | |||
2863d6205b | |||
624f0da6c0 | |||
c3423d81d0 | |||
fc1a52b1c6 | |||
05825a888e | |||
bc6c5d6be2 | |||
6bf9855342 | |||
0db7b39e62 | |||
49c9b68e4e | |||
d40b670388 | |||
01f0af64da | |||
31f7404272 | |||
cb4a20ba6d | |||
8c841a068a | |||
f3fb1d3411 | |||
22452da2a7 | |||
cd165b18f0 | |||
7515e1edb5 | |||
a49384f23c | |||
9b39900c30 | |||
8817c66e98 | |||
2038f86016 | |||
b8b0ba004b | |||
41165c0e68 | |||
30e4e7340e | |||
aa95728c35 | |||
b262c5478c | |||
ef43a4f82e | |||
8bc0b646f0 | |||
65bee44d6d | |||
7d585059e7 | |||
d08504a667 | |||
08f2a35b9b | |||
8e64b13bc0 | |||
983abf359c | |||
233112c9b6 | |||
37dbccb674 | |||
c8524ad363 | |||
30435ee1f5 | |||
ac322253ca | |||
05bb4252bf | |||
e5326e797e | |||
ca203d413f | |||
a1e5a2e607 | |||
674fbc39f8 | |||
948a83ef9f | |||
2b0cfe1ab5 | |||
6b6aa23645 | |||
4231c49839 | |||
ef2dc98773 | |||
984faca4e8 | |||
70ad97d739 | |||
1ab2a0cce9 | |||
c19b6fb260 | |||
dbdd9dbbde | |||
a3416b1571 | |||
e12b71773d | |||
f576c87e3a | |||
c5e231a711 | |||
57334a44c1 | |||
523859f37c | |||
0894f8cf7a | |||
d8234e58a4 | |||
f6a6df7279 | |||
b0d590fef4 | |||
f8bc9b54da | |||
60c8121c1d | |||
124ec8d297 | |||
e9ed056913 | |||
99b0860835 | |||
25b435060c | |||
ba1b04be1e | |||
2ccf5323c2 | |||
891aadaaca | |||
2e07261f57 | |||
5178a0cbba | |||
8d5fded4d8 | |||
8e85b9cbf3 | |||
d4da9b805a | |||
ae4f770dad | |||
cbe38ff905 | |||
9c2e27a026 | |||
644bdd220e | |||
93a9e2daf3 | |||
b2896c79c6 | |||
8c0d247126 | |||
39dc0cca37 | |||
7f0fe3b7d2 | |||
2f209414ef | |||
ccb156c704 | |||
8a2f2e1792 | |||
79490e75be | |||
e8b576fb9f | |||
d96b27b603 | |||
c8d94e88a7 | |||
f3a23e51fa | |||
7e022a09cc | |||
b6e51a5cd6 | |||
a8f6ce5475 | |||
c96efdcb36 | |||
55ef73ed57 | |||
4b3deaf28b | |||
d8264390d2 | |||
0071e537f3 | |||
5efd936e1e | |||
c8c004d568 | |||
a9972fe559 | |||
1f7f9fa9ec | |||
a9d0cad485 | |||
f85b0d421a | |||
88384c89f3 | |||
22cfd595ef | |||
e235c02e1e | |||
02548197e8 | |||
c2ba6e4503 | |||
7f017aa724 | |||
d51719fbd9 | |||
1392a6dba7 | |||
7413ca9589 | |||
2b1e56331d | |||
cc5e69816f | |||
c59e07581d | |||
c15053d1f8 | |||
5939727b66 | |||
3ceb679465 | |||
8f188194c1 | |||
760d4991f3 | |||
613ab3ba2a | |||
9477967c54 | |||
388f4ae302 | |||
f1fbea96f6 | |||
f0aaee2044 | |||
ac7d210b6b | |||
659db7e421 | |||
cd84339bcc | |||
01d5537244 | |||
ab8fb271f7 | |||
58a18ea50b | |||
574de9ff4c | |||
9d8458bb6d | |||
b22145d0c4 | |||
99e623ef0b | |||
7a20cc2f58 | |||
8290bb3374 | |||
a3932d7f00 | |||
8082dd43bc | |||
642a756b66 | |||
f6c44a83bc | |||
b92da08ae8 | |||
499f078c37 | |||
92669e65ee | |||
7b82ef22be | |||
3ce808688f | |||
cc301c18d5 | |||
db7c990346 | |||
7c99027c31 | |||
5cb0012c83 | |||
a09cfd57a4 | |||
62d9729629 | |||
ed16281737 | |||
4d9a463297 | |||
e13fdfb2ce | |||
73cb587266 | |||
48388b9eaa | |||
61e46a636c | |||
dede2e9764 | |||
c9c7e4777e | |||
67ae54c957 | |||
14c359700b | |||
c11b8883e0 | |||
adae07d013 | |||
1c7b6a5e05 | |||
fbeba570e6 | |||
c3b2fee074 | |||
e2442f7471 | |||
b33bb0943a | |||
58fe2f2c76 | |||
664f603a31 | |||
b17afc10a2 | |||
74f7576313 | |||
e8d0ffa8b4 | |||
ceb2d99732 | |||
822a3e505a | |||
7b0ab778e3 | |||
744910ad1b | |||
7fdc7e01a5 | |||
c7c622377a | |||
ae990ce8dc | |||
7ab2e1d184 | |||
c21b78b297 | |||
94a7102d3a | |||
fce7a0c78c | |||
98b27d0c64 | |||
2d0b90b423 | |||
070ccae4dd | |||
4620d31e2a | |||
16953b5cfa | |||
cfccadcdc4 | |||
67533cf7c3 | |||
8a10f3f22f | |||
c87210820c | |||
66791a5dad | |||
ee9b2522a3 | |||
df5c7eef39 | |||
ccbb0d37b3 | |||
66f123fb66 | |||
87b599f4a8 | |||
6238df88a2 | |||
38d74f0ad5 | |||
25443918c4 | |||
8035968516 | |||
f9bf0bd90e | |||
0df37d0fa1 | |||
fbb131da73 | |||
942f8d0ec9 | |||
64fa11d204 | |||
3ad5316dd1 | |||
f8e0e9ab1f | |||
10af76a50c | |||
2fafb9f2fb | |||
4de38fe40a | |||
74df3e2491 | |||
8e41a59e2e | |||
17729ce856 | |||
cfd7b906cb | |||
a1f7de2bc3 | |||
f2b3f01759 | |||
3eaf5560be | |||
c66633ccc5 | |||
a2f911dbb1 | |||
060579b73a | |||
09c26fed20 | |||
3e9e7e1750 | |||
94548d2284 | |||
4ec4e5b394 | |||
15c920a612 | |||
e7871b2c76 | |||
644efa2905 | |||
7e9b6fe0aa | |||
b8abf27b86 | |||
e0ff20dd37 | |||
0af42727f5 | |||
b0036759fa | |||
b4b26d4207 | |||
cb7ada2e78 | |||
6e5143681c | |||
8142422257 | |||
0f03226656 | |||
297e9e3cf5 | |||
39b7f48870 | |||
b9bc81544a | |||
7d9eed0ed5 | |||
1398d8d5a6 | |||
6bc874088f | |||
3ec1baee65 | |||
374f661027 | |||
7ab11c3da9 | |||
cc2f3afdf8 | |||
9a5882a290 | |||
a033364d55 | |||
bc3ce26e0e | |||
ebea44029e | |||
be6bc155eb | |||
d0bbef74ef | |||
a282ae22af | |||
c83e8e1e62 | |||
452ec28761 | |||
8a78637719 | |||
1fdb75068d | |||
230c135d4e | |||
bf544af690 | |||
e7ab8be0cd | |||
b1822f2602 | |||
f4a74a3405 | |||
73da639654 | |||
f2a1456e94 | |||
c75abda571 | |||
1aec670c43 | |||
77695d75bb | |||
3dec452a8a | |||
97f5ce52d1 | |||
540de896e3 | |||
dcfccb2a0d | |||
ac5b0a3b34 | |||
8f854ee83a | |||
bd312607a3 | |||
99f2abfd71 | |||
132ecc0580 | |||
5157a56803 | |||
33281b04e7 | |||
a9404fe33f | |||
95bdb47f01 | |||
ebf624772a | |||
b33a6addcc | |||
1e4fb1f6fe | |||
287828fe0b | |||
dc311b978e | |||
bccaf93f8b | |||
61a84e15ea | |||
f7bdb6555d | |||
4183bc35b2 | |||
4700800770 | |||
9de74cce92 | |||
125a59df91 | |||
eae4a9e1f8 | |||
20f009e927 | |||
78d9fa280c | |||
45bb85cd8f | |||
16551643b3 | |||
5245ed2262 | |||
9e91b15b74 | |||
b5c2646360 | |||
8cd7f3438f | |||
e0ff431169 | |||
a8ff64f704 | |||
9c105098dd | |||
9af6395e92 | |||
670316f997 | |||
4cf02a32a7 | |||
6b3a9b9dc0 | |||
d544a5a947 | |||
973b0ac488 | |||
baff2ce80f | |||
8a7fed5dfb | |||
a962359993 | |||
5b45fc5921 | |||
c8d3d813ff | |||
8eafa90105 | |||
8e2ee30c47 | |||
19afe50efa | |||
8f519e7959 | |||
293ff9d586 | |||
2109d37298 | |||
fb31a3bf2e | |||
68fa95beb3 | |||
942245b985 | |||
6e25fde883 | |||
46955be305 | |||
b89d10025d | |||
edb33cba0c | |||
783e5fa42f | |||
9c31196610 | |||
ca765b5ebb | |||
3f65f534aa | |||
1fc328b2ea | |||
1e93146b49 | |||
36fea4ba7b | |||
18a1a19deb | |||
1d52e1f41b | |||
f0ec7635ab | |||
158d8a181e | |||
f66c0a5d98 | |||
a609b08c0a | |||
e63c9ec05e | |||
4936322dbc | |||
9baee07c94 | |||
03ecf6e695 | |||
2b1b9f816c | |||
1b55df5848 | |||
7bec9e3804 | |||
06cb695cd7 | |||
c08f4f5845 | |||
c71fc74248 | |||
0b52d342f6 | |||
a5acd32f56 | |||
a7e45319c3 | |||
e18caef4f6 | |||
149b7d9ee8 | |||
d13592aea0 | |||
59d4b0aadb | |||
96c9fa0ccc | |||
7cdd0abfd5 | |||
74ef58e310 | |||
897fb9c2e4 | |||
ff1f6af7e9 | |||
9aefe7a040 | |||
17bb51756f | |||
5044bb0332 | |||
b4ca95a9fa | |||
f097f780af | |||
99be294726 | |||
7adb7cf7f6 | |||
e36e5f4fc9 | |||
1e503a586d | |||
6488400fbf | |||
e423e0a0f1 | |||
ad1750b53d | |||
e909d5f5c2 | |||
6e6480c952 | |||
ff5c7b155c | |||
123d97bfb8 | |||
dd0a8c200c | |||
272a43be11 | |||
63677bb1f9 | |||
780a78c825 | |||
c29af4aeba | |||
48e6e3ac45 | |||
74a984d75f | |||
b55ea6409d | |||
68b3849d51 | |||
ed7917e619 | |||
5e56d3bf36 | |||
e2dfac08c0 | |||
c8173eb9ec | |||
832c784a70 | |||
61b0a3775b | |||
5f50964176 | |||
428b88a82a | |||
46ac559003 | |||
caba176c87 | |||
f37e7c5240 | |||
252742ce20 | |||
3f3f03f715 | |||
4df1ad35b3 | |||
4e87c6af02 | |||
fc277b736a | |||
278f4fd08e | |||
df86816e7d | |||
d8059cab6b | |||
d1a2a3eee5 | |||
7856f09799 | |||
461e717157 | |||
8ee11fecc4 | |||
36020c41df | |||
6444bc6a71 | |||
a67d86c6e2 | |||
924f3025f9 | |||
9690bb4b9c | |||
5d5ee85928 | |||
820621baa2 | |||
75d2881302 | |||
95b641198e | |||
6b40189045 | |||
df379dfcf4 | |||
4721617fd6 | |||
b82ff2d7e7 | |||
efa2052896 | |||
52cbd650b7 | |||
4cb1d756f7 | |||
84161d7c9d | |||
c8c5ec254a | |||
1a0b491ed6 | |||
3a4226a28b | |||
1a47a5a739 | |||
760416c1a0 | |||
5955dd4e25 | |||
e0f9aa3508 | |||
b31dff6bee | |||
1b3f971330 | |||
abf61ecc8f | |||
71bf2d8826 | |||
52bfd1fc3d | |||
a8d96967c4 | |||
f7a400878a | |||
e1f18f6212 | |||
9705ccee67 | |||
7151651ea9 | |||
0d7ecd4327 | |||
50530c144e | |||
45f00e45be | |||
e969afc627 | |||
f094908f54 | |||
f3617bd83b | |||
3bfd88aabb | |||
d47ef88fcd | |||
b24639d011 | |||
2ae4ca91b4 | |||
e9d968e060 | |||
1652831f1d | |||
39c4bb7a49 | |||
6cb07a9131 | |||
e76ad2980f | |||
af5fd8c819 | |||
3b3df4e3cb | |||
c124576a4d | |||
659037eef5 | |||
500a378fdf | |||
4f3c417753 | |||
113fc168ab | |||
0ba49eacc9 | |||
bbd9441fc6 | |||
22454ce60b | |||
5036cb54cc | |||
2eeb07d164 | |||
ca6ac09dcc | |||
eadd378f6c | |||
7b36afd5f1 | |||
f677427f68 | |||
132ad08885 | |||
d3e173b6e6 | |||
3f2a317af0 | |||
892513708b | |||
733c8e4c34 | |||
80f175daac | |||
c5e0b29a22 | |||
bec9b307db | |||
aca63d4986 | |||
bae398a9a4 | |||
0d001c09c3 | |||
cd259fe118 | |||
d7b707a71c | |||
17228d27e5 | |||
10df5ad0ac | |||
7338568125 | |||
4adca18337 | |||
b6f5e1635c | |||
0e59a59169 | |||
6b45deaf97 | |||
e72d4a96bf | |||
b79adc01fa | |||
790d717543 | |||
b1ebd62c78 | |||
fcc349467f | |||
cc55e5c6d8 | |||
a51d4227b6 | |||
742aed4f2e | |||
d3d0682310 | |||
53012ff41c | |||
dd734a01dc | |||
2053731ebc | |||
a3b863d312 | |||
7cb0658b00 | |||
96c76a8333 | |||
925cfba424 | |||
f63318a20f | |||
f5d4912ca8 | |||
642cf8b5ff | |||
0612aa2b65 | |||
3937764ac5 | |||
ed603dcba2 | |||
41d2e7d6b6 | |||
73d02f3a80 | |||
e1183be22e | |||
2971b5b315 | |||
65a3a9773d | |||
8b6a4e5759 | |||
07df1e3034 | |||
09c95b7ea7 | |||
a6fe8ae0af | |||
dc2c46e23c | |||
0f476a289f | |||
ae3f058ff0 | |||
1315021388 | |||
ccb231e4f4 | |||
aad485128e | |||
54bb9f4b55 | |||
af823d6486 | |||
487a87df02 | |||
b14fead592 | |||
ebf2c8caa5 | |||
84855737b3 | |||
7a608d1346 | |||
3e418ecb6e | |||
89769c836f | |||
7c8470b1dc | |||
81bab528b2 | |||
d6beac5235 | |||
a949b40d11 | |||
7ca22cd552 | |||
30586e634d | |||
2b6fe347ae | |||
f97409dd2d | |||
c384367f17 | |||
eea1c6606c | |||
8f4f45c524 | |||
db2392b778 | |||
ce842648ae | |||
ad1c4bf202 | |||
5969b7cdbc | |||
6013d20aef | |||
dfb3bd8e33 | |||
d6c2db9620 | |||
00dc8a0ad5 | |||
9246f21f2a | |||
2237319ebb | |||
6fa95008bc | |||
3789a56225 | |||
0a2d9af2a1 | |||
2b7a627181 | |||
f697752b52 | |||
914426d887 | |||
302e717790 | |||
27928fbc94 | |||
253056b932 | |||
1d1d0d9b6f | |||
c7887abb64 | |||
47525f0dd6 | |||
5ac5d91c6b | |||
322b5a736b | |||
907c054142 | |||
7b6d51a9d0 | |||
d3eba93c7d | |||
866e22355c | |||
fe084b9866 | |||
5f7e3025d9 | |||
13b8bc1a89 | |||
054cec8a5d | |||
8dc326e1f1 | |||
81dd1aea82 | |||
5b2cb426be | |||
5fa19f2801 | |||
4f5acb8f52 | |||
cf71c53559 | |||
80c98f4d0c | |||
73f8ab3aa8 | |||
da372335bf | |||
0af9f664db | |||
995eb0cd79 | |||
9f07965876 | |||
8a4cdd56d4 | |||
3252523823 | |||
2628f9f61b | |||
0d217e15d5 | |||
520c85c7b7 | |||
82d70e0720 | |||
054976c390 | |||
da8e03e18a | |||
4a80dbdd10 | |||
013a1731d5 | |||
e664024853 | |||
495f3b9a68 | |||
98a6963911 | |||
c204efaaab | |||
0f13137616 | |||
864056fcaa | |||
5c0830f628 | |||
e96a2dd681 | |||
f45332e1ab | |||
5508e30854 | |||
3e14d63a0a | |||
eddfddccb2 | |||
c067ef0216 | |||
f7d9019b8c | |||
519678192f | |||
c3083a77d4 | |||
891ab3951b | |||
11251c77ca | |||
71e22d9263 | |||
3095d96715 | |||
198946231c | |||
b2f0b6f2b4 | |||
d9c70c7b8c | |||
7ae61e7393 | |||
984ae35948 | |||
0d6cddda4d | |||
18e031d346 | |||
c0332ad98b | |||
7f6aaa5314 | |||
14aa5fe521 | |||
9199967022 | |||
04c92c8470 | |||
00b22e37df | |||
aaa810c64a | |||
b57b2073ac | |||
771a9e9cd2 | |||
cc48f4499a | |||
3e2f2ddb56 | |||
0ca6df6f09 | |||
37a379f959 | |||
625d6c2ed7 | |||
c2edb3e22f | |||
fedbd54325 | |||
134d2bd766 | |||
9eb2cd7327 | |||
c0347c80b2 | |||
d9ff84e39e | |||
7256e6d203 | |||
c083fd895c | |||
0cd7a3d216 | |||
aa4fc44a80 | |||
f07d49e877 | |||
45be91ff48 | |||
c657b3d072 | |||
5dfb3ded17 | |||
0104e99caa | |||
e16593c9b1 | |||
1cc69df0f4 | |||
2db576f52b | |||
421edce623 | |||
549b83504f | |||
d10ebd1a68 | |||
4e3d921f1a | |||
1d6e1ec61c | |||
db3cc11195 | |||
d64efa6a68 | |||
7b5905bda6 | |||
f5ba5ffe80 | |||
0113c4f834 | |||
1c2ed83960 | |||
7a236b11b8 | |||
a0328bbcf8 | |||
46e58b434a | |||
7955f8a7cb | |||
263fd37590 | |||
ba37bf13d6 | |||
b59d71546b |
148
.clang-format
Normal file
148
.clang-format
Normal file
@ -0,0 +1,148 @@
|
||||
---
|
||||
Language: Cpp
|
||||
# BasedOnStyle: Google
|
||||
AccessModifierOffset: -1
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: true
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: true
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: false
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterClass: false
|
||||
AfterControlStatement: false
|
||||
AfterEnum: false
|
||||
AfterFunction: false
|
||||
AfterNamespace: false
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 80
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '^<ext/.*\.h>'
|
||||
Priority: 2
|
||||
- Regex: '^<.*\.h>'
|
||||
Priority: 1
|
||||
- Regex: '^<.*'
|
||||
Priority: 2
|
||||
- Regex: '.*'
|
||||
Priority: 3
|
||||
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: BeforeHash
|
||||
IndentWidth: 2
|
||||
IndentWrappedFunctionNames: false
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
ObjCBinPackProtocolList: Never
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 1
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 200
|
||||
PointerAlignment: Right
|
||||
RawStringFormats:
|
||||
- Language: Cpp
|
||||
Delimiters:
|
||||
- cc
|
||||
- CC
|
||||
- cpp
|
||||
- Cpp
|
||||
- CPP
|
||||
- 'c++'
|
||||
- 'C++'
|
||||
CanonicalDelimiter: ''
|
||||
BasedOnStyle: google
|
||||
- Language: TextProto
|
||||
Delimiters:
|
||||
- pb
|
||||
- PB
|
||||
- proto
|
||||
- PROTO
|
||||
EnclosingFunctions:
|
||||
- EqualsProto
|
||||
- EquivToProto
|
||||
- PARSE_PARTIAL_TEXT_PROTO
|
||||
- PARSE_TEST_PROTO
|
||||
- PARSE_TEXT_PROTO
|
||||
- ParseTextOrDie
|
||||
- ParseTextProtoOrDie
|
||||
CanonicalDelimiter: ''
|
||||
BasedOnStyle: google
|
||||
ReflowComments: true
|
||||
SortIncludes: false
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 2
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Auto
|
||||
TabWidth: 8
|
||||
UseTab: Never
|
||||
...
|
||||
|
122
.custom-format.py
Executable file
122
.custom-format.py
Executable file
@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# american fuzzy lop++ - custom code formatter
|
||||
# --------------------------------------------
|
||||
#
|
||||
# Written and maintaned by Andrea Fioraldi <andreafioraldi@gmail.com>
|
||||
#
|
||||
# Copyright 2015, 2016, 2017 Google Inc. All rights reserved.
|
||||
# Copyright 2019-2020 AFLplusplus Project. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
|
||||
# string_re = re.compile('(\\"(\\\\.|[^"\\\\])*\\")') # future use
|
||||
|
||||
with open(".clang-format") as f:
|
||||
fmt = f.read()
|
||||
|
||||
CLANG_FORMAT_BIN = os.getenv("CLANG_FORMAT_BIN")
|
||||
if CLANG_FORMAT_BIN is None:
|
||||
o = 0
|
||||
try:
|
||||
p = subprocess.Popen(["clang-format-10", "--version"], stdout=subprocess.PIPE)
|
||||
o, _ = p.communicate()
|
||||
o = str(o, "utf-8")
|
||||
o = o[len("clang-format version "):].strip()
|
||||
o = o[:o.find(".")]
|
||||
o = int(o)
|
||||
except:
|
||||
print ("clang-format-10 is needed. Aborted.")
|
||||
exit(1)
|
||||
#if o < 7:
|
||||
# if subprocess.call(['which', 'clang-format-7'], stdout=subprocess.PIPE) == 0:
|
||||
# CLANG_FORMAT_BIN = 'clang-format-7'
|
||||
# elif subprocess.call(['which', 'clang-format-8'], stdout=subprocess.PIPE) == 0:
|
||||
# CLANG_FORMAT_BIN = 'clang-format-8'
|
||||
# elif subprocess.call(['which', 'clang-format-9'], stdout=subprocess.PIPE) == 0:
|
||||
# CLANG_FORMAT_BIN = 'clang-format-9'
|
||||
# elif subprocess.call(['which', 'clang-format-10'], stdout=subprocess.PIPE) == 0:
|
||||
# CLANG_FORMAT_BIN = 'clang-format-10'
|
||||
# else:
|
||||
# print ("clang-format 7 or above is needed. Aborted.")
|
||||
# exit(1)
|
||||
else:
|
||||
CLANG_FORMAT_BIN = 'clang-format-10'
|
||||
|
||||
COLUMN_LIMIT = 80
|
||||
for line in fmt.split("\n"):
|
||||
line = line.split(":")
|
||||
if line[0].strip() == "ColumnLimit":
|
||||
COLUMN_LIMIT = int(line[1].strip())
|
||||
|
||||
|
||||
def custom_format(filename):
|
||||
p = subprocess.Popen([CLANG_FORMAT_BIN, filename], stdout=subprocess.PIPE)
|
||||
src, _ = p.communicate()
|
||||
src = str(src, "utf-8")
|
||||
|
||||
in_define = False
|
||||
last_line = None
|
||||
out = ""
|
||||
|
||||
for line in src.split("\n"):
|
||||
if line.lstrip().startswith("#"):
|
||||
if line[line.find("#")+1:].lstrip().startswith("define"):
|
||||
in_define = True
|
||||
|
||||
if "/*" in line and not line.strip().startswith("/*") and line.endswith("*/") and len(line) < (COLUMN_LIMIT-2):
|
||||
cmt_start = line.rfind("/*")
|
||||
line = line[:cmt_start] + " " * (COLUMN_LIMIT-2 - len(line)) + line[cmt_start:]
|
||||
|
||||
define_padding = 0
|
||||
if last_line is not None and in_define and last_line.endswith("\\"):
|
||||
last_line = last_line[:-1]
|
||||
define_padding = max(0, len(last_line[last_line.rfind("\n")+1:]))
|
||||
|
||||
if last_line is not None and last_line.strip().endswith("{") and line.strip() != "":
|
||||
line = (" " * define_padding + "\\" if in_define else "") + "\n" + line
|
||||
elif last_line is not None and last_line.strip().startswith("}") and line.strip() != "":
|
||||
line = (" " * define_padding + "\\" if in_define else "") + "\n" + line
|
||||
elif line.strip().startswith("}") and last_line is not None and last_line.strip() != "":
|
||||
line = (" " * define_padding + "\\" if in_define else "") + "\n" + line
|
||||
|
||||
if not line.endswith("\\"):
|
||||
in_define = False
|
||||
|
||||
out += line + "\n"
|
||||
last_line = line
|
||||
|
||||
return (out)
|
||||
|
||||
args = sys.argv[1:]
|
||||
if len(args) == 0:
|
||||
print ("Usage: ./format.py [-i] <filename>")
|
||||
print ()
|
||||
print (" The -i option, if specified, let the script to modify in-place")
|
||||
print (" the source files. By default the results are written to stdout.")
|
||||
print()
|
||||
exit(1)
|
||||
|
||||
in_place = False
|
||||
if args[0] == "-i":
|
||||
in_place = True
|
||||
args = args[1:]
|
||||
|
||||
for filename in args:
|
||||
code = custom_format(filename)
|
||||
if in_place:
|
||||
with open(filename, "w") as f:
|
||||
f.write(code)
|
||||
else:
|
||||
print(code)
|
||||
|
57
.gitignore
vendored
Normal file
57
.gitignore
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
.test
|
||||
.test2
|
||||
*.o
|
||||
*.so
|
||||
*.pyc
|
||||
afl-analyze
|
||||
afl-as
|
||||
afl-clang
|
||||
afl-clang++
|
||||
afl-clang-fast
|
||||
afl-clang-fast++
|
||||
afl-clang-lto
|
||||
afl-clang-lto++
|
||||
afl-fuzz
|
||||
afl-g++
|
||||
afl-gcc
|
||||
afl-gcc-fast
|
||||
afl-g++-fast
|
||||
afl-gotcpu
|
||||
afl-ld
|
||||
afl-ld-lto
|
||||
afl-qemu-trace
|
||||
afl-showmap
|
||||
afl-tmin
|
||||
afl-analyze.8
|
||||
afl-as.8
|
||||
afl-clang-fast++.8
|
||||
afl-clang-fast.8
|
||||
afl-clang-lto.8
|
||||
afl-clang-lto++.8
|
||||
afl-cmin.8
|
||||
afl-cmin.bash.8
|
||||
afl-fuzz.8
|
||||
afl-gcc.8
|
||||
afl-gcc-fast.8
|
||||
afl-g++-fast.8
|
||||
afl-gotcpu.8
|
||||
afl-plot.8
|
||||
afl-showmap.8
|
||||
afl-system-config.8
|
||||
afl-tmin.8
|
||||
afl-whatsup.8
|
||||
qemu_mode/libcompcov/compcovtest
|
||||
as
|
||||
ld
|
||||
qemu_mode/qemu-*
|
||||
unicorn_mode/samples/*/\.test-*
|
||||
unicorn_mode/samples/*/output/
|
||||
unicorn_mode/unicornafl
|
||||
core\.*
|
||||
test/unittests/unit_maybe_alloc
|
||||
test/unittests/unit_preallocable
|
||||
test/unittests/unit_list
|
||||
test/unittests/unit_rand
|
||||
test/unittests/unit_hash
|
||||
examples/afl_network_proxy/afl-network-server
|
||||
examples/afl_network_proxy/afl-network-client
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "unicorn_mode/unicornafl"]
|
||||
path = unicorn_mode/unicornafl
|
||||
url = https://github.com/AFLplusplus/unicornafl.git
|
58
.travis.yml
Normal file
58
.travis.yml
Normal file
@ -0,0 +1,58 @@
|
||||
language: c
|
||||
|
||||
sudo: required
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
|
||||
matrix:
|
||||
include:
|
||||
# - os: linux # focal errors every run with a timeout while installing packages
|
||||
# dist: focal
|
||||
# env: NAME="focal-amd64" MODERN="yes" GCC="9"
|
||||
- os: linux
|
||||
dist: bionic
|
||||
env: NAME="bionic-amd64" MODERN="yes" GCC="7"
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: NAME="xenial-amd64" MODERN="no" GCC="5" EXTRA="libtool-bin clang-6.0"
|
||||
- os: linux
|
||||
dist: trusty
|
||||
env: NAME="trusty-amd64" MODERN="no" GCC="4.8"
|
||||
# - os: linux # until travis can fix this!
|
||||
# dist: xenial
|
||||
# arch: arm64
|
||||
# env: NAME="xenial-arm64" MODERN="no" GCC="5" EXTRA="libtool-bin clang-6.0" AFL_NO_X86="1" CPU_TARGET="aarch64"
|
||||
# - os: osx
|
||||
# osx_image: xcode11.2
|
||||
# env: NAME="osx" HOMEBREW_NO_ANALYTICS="1" LINK="http://releases.llvm.org/9.0.0/" NAME="clang+llvm-9.0.0-x86_64-darwin-apple"
|
||||
|
||||
jobs:
|
||||
allow_failures:
|
||||
- os: osx
|
||||
- arch: arm64
|
||||
|
||||
env:
|
||||
- AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_NO_UI=1
|
||||
# - AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_NO_UI=1 AFL_EXIT_WHEN_DONE=1
|
||||
# TODO: test AFL_BENCH_UNTIL_CRASH once we have a target that crashes
|
||||
# - AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_NO_UI=1 AFL_BENCH_JUST_ONE=1
|
||||
|
||||
before_install:
|
||||
# export LLVM_DIR=${TRAVIS_BUILD_DIR}/${LLVM_PACKAGE}
|
||||
- echo Testing on $NAME
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then wget "$LINK""$NAME".tar.xz ; export LLVM_CONFIG=`pwd`/"$NAME" ; tar xJf "$NAME".tar.xz ; fi
|
||||
- if [ "$MODERN" = "yes" ]; then sudo apt update ; sudo apt upgrade ; sudo apt install -y git libtool libtool-bin automake bison libglib2.0-0 build-essential clang gcc-"$GCC" gcc-"$GCC"-plugin-dev libc++-"$GCC"-dev findutils libcmocka-dev python3-setuptools ; fi
|
||||
- if [ "$MODERN" = "no" ]; then sudo apt update ; sudo apt install -y git libtool $EXTRA libpixman-1-dev automake bison libglib2.0 build-essential gcc-"$GCC" gcc-"$GCC"-plugin-dev libc++-dev findutils libcmocka-dev python3-setuptools ; fi
|
||||
|
||||
script:
|
||||
- gcc -v
|
||||
- clang -v
|
||||
- sudo -E ./afl-system-config
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then export LLVM_CONFIG=`pwd`/"$NAME" ; make source-only ASAN_BUILD=1 ; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" -a "$TRAVIS_CPU_ARCH" = "amd64" ]; then make distrib ASAN_BUILD=1 ; fi
|
||||
- if [ "$TRAVIS_CPU_ARCH" = "arm64" ] ; then echo DEBUG ; find / -name llvm-config.h 2>/dev/null; apt-cache search clang | grep clang- ; apt-cache search llvm | grep llvm- ; dpkg -l | egrep 'clang|llvm'; echo DEBUG ; export LLVM_CONFIG=llvm-config-6.0 ; make ASAN_BUILD=1 ; cd qemu_mode && sh ./build_qemu_support.sh ; cd .. ; fi
|
||||
- make tests
|
||||
# - travis_terminate 0
|
141
Android.bp
Normal file
141
Android.bp
Normal file
@ -0,0 +1,141 @@
|
||||
cc_defaults {
|
||||
name: "afl-defaults",
|
||||
|
||||
cflags: [
|
||||
"-funroll-loops",
|
||||
"-Wno-pointer-sign",
|
||||
"-Wno-pointer-arith",
|
||||
"-Wno-sign-compare",
|
||||
"-Wno-unused-parameter",
|
||||
"-Wno-unused-function",
|
||||
"-Wno-format",
|
||||
"-Wno-user-defined-warnings",
|
||||
"-DUSE_TRACE_PC=1",
|
||||
"-DBIN_PATH=\"out/host/linux-x86/bin\"",
|
||||
"-DDOC_PATH=\"out/host/linux-x86/shared/doc/afl\"",
|
||||
"-D__USE_GNU",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "afl-fuzz",
|
||||
static_executable: true,
|
||||
host_supported: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"afl-fuzz.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "afl-showmap",
|
||||
static_executable: true,
|
||||
host_supported: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"afl-showmap.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "afl-tmin",
|
||||
static_executable: true,
|
||||
host_supported: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"afl-tmin.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "afl-analyze",
|
||||
static_executable: true,
|
||||
host_supported: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"afl-analyze.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "afl-gotcpu",
|
||||
static_executable: true,
|
||||
host_supported: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"afl-gotcpu.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary_host {
|
||||
name: "afl-clang-fast",
|
||||
static_executable: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
cflags: [
|
||||
"-D__ANDROID__",
|
||||
"-DAFL_PATH=\"out/host/linux-x86/lib64\"",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"llvm_mode/afl-clang-fast.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_binary_host {
|
||||
name: "afl-clang-fast++",
|
||||
static_executable: true,
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
cflags: [
|
||||
"-D__ANDROID__",
|
||||
"-DAFL_PATH=\"out/host/linux-x86/lib64\"",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"llvm_mode/afl-clang-fast.c",
|
||||
],
|
||||
}
|
||||
|
||||
cc_library_static {
|
||||
name: "afl-llvm-rt",
|
||||
compile_multilib: "both",
|
||||
vendor_available: true,
|
||||
host_supported: true,
|
||||
recovery_available: true,
|
||||
sdk_version: "9",
|
||||
|
||||
defaults: [
|
||||
"afl-defaults",
|
||||
],
|
||||
|
||||
srcs: [
|
||||
"llvm_mode/afl-llvm-rt.o.c",
|
||||
],
|
||||
}
|
1
Android.mk
Symbolic link
1
Android.mk
Symbolic link
@ -0,0 +1 @@
|
||||
Makefile
|
22
CONTRIBUTING.md
Normal file
22
CONTRIBUTING.md
Normal file
@ -0,0 +1,22 @@
|
||||
# How to submit a Pull Request to AFLplusplus
|
||||
|
||||
Each modified source file, before merging, must be formatted.
|
||||
|
||||
```
|
||||
make code-format
|
||||
```
|
||||
|
||||
This should be fine if you modified one of the files already present in the
|
||||
project, or added a file in a directory we already format, otherwise run:
|
||||
|
||||
```
|
||||
./.custom-format.py -i file-that-you-have-created.c
|
||||
```
|
||||
|
||||
Regarding the coding style, please follow the AFL style.
|
||||
No camel case at all and use the AFL's macros wherever possible
|
||||
(e.g. WARNF, FATAL, MAP_SIZE, ...).
|
||||
|
||||
Remember that AFLplusplus has to build and run on many platforms, so
|
||||
generalize your Makefiles (or your patches to our pre-existing Makefiles)
|
||||
to be as much generic as possible.
|
1
Changelog.md
Symbolic link
1
Changelog.md
Symbolic link
@ -0,0 +1 @@
|
||||
docs/Changelog.md
|
62
Dockerfile
Normal file
62
Dockerfile
Normal file
@ -0,0 +1,62 @@
|
||||
#
|
||||
# This Dockerfile for AFLplusplus uses Ubuntu 20.04 focal and
|
||||
# installs LLVM 11 from llvm.org for afl-clang-lto support :-)
|
||||
# It also installs gcc/g++ 10 from the Ubuntu development platform
|
||||
# has focal has gcc-10 but not g++-10 ...
|
||||
#
|
||||
|
||||
FROM ubuntu:20.04
|
||||
MAINTAINER afl++ team <afl@aflplus.plus>
|
||||
LABEL "about"="AFLplusplus docker image"
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update && apt-get upgrade -y && \
|
||||
apt-get -y install --no-install-suggests --no-install-recommends \
|
||||
automake \
|
||||
bison flex \
|
||||
build-essential \
|
||||
git \
|
||||
python3 python3-dev python3-setuptools python-is-python3 \
|
||||
libtool libtool-bin \
|
||||
libglib2.0-dev \
|
||||
wget vim jupp nano \
|
||||
apt-utils apt-transport-https ca-certificates gnupg dialog \
|
||||
libpixman-1-dev
|
||||
|
||||
RUN echo deb http://apt.llvm.org/focal/ llvm-toolchain-focal main >> /etc/apt/sources.list && \
|
||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
|
||||
|
||||
RUN echo deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal main >> /etc/apt/sources.list && \
|
||||
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1E9377A2BA9EF27F
|
||||
|
||||
RUN apt-get update && apt-get upgrade -y
|
||||
|
||||
RUN apt-get install -y gcc-10 g++-10 gcc-10-plugin-dev gcc-10-multilib \
|
||||
libc++-10-dev gdb lcov
|
||||
|
||||
RUN apt-get install -y clang-11 clang-tools-11 libc++1-11 libc++-11-dev \
|
||||
libc++abi1-11 libc++abi-11-dev libclang1-11 libclang-11-dev \
|
||||
libclang-common-11-dev libclang-cpp11 libclang-cpp11-dev liblld-11 \
|
||||
liblld-11-dev liblldb-11 liblldb-11-dev libllvm11 libomp-11-dev \
|
||||
libomp5-11 lld-11 lldb-11 llvm-11 llvm-11-dev llvm-11-runtime llvm-11-tools
|
||||
|
||||
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 0
|
||||
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 0
|
||||
|
||||
RUN rm -rf /var/cache/apt/archives/*
|
||||
|
||||
ARG CC=gcc-10
|
||||
ARG CXX=g++-10
|
||||
ARG LLVM_CONFIG=llvm-config-11
|
||||
|
||||
RUN git clone https://github.com/AFLplusplus/AFLplusplus
|
||||
RUN cd AFLplusplus && export REAL_CXX=g++-10 && make distrib && \
|
||||
make install && make clean
|
||||
|
||||
RUN git clone https://github.com/vanhauser-thc/afl-cov afl-cov
|
||||
RUN cd afl-cov && make install
|
||||
|
||||
RUN echo 'alias joe="jupp --wordwrap"' >> ~/.bashrc
|
||||
|
||||
ENV AFL_SKIP_CPUFREQ=1
|
601
GNUmakefile
Normal file
601
GNUmakefile
Normal file
@ -0,0 +1,601 @@
|
||||
#
|
||||
# american fuzzy lop++ - makefile
|
||||
# -----------------------------
|
||||
#
|
||||
# Originally written by Michal Zalewski
|
||||
#
|
||||
# Copyright 2013, 2014, 2015, 2016, 2017 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
|
||||
# For Heiko:
|
||||
#TEST_MMAP=1
|
||||
# the hash character is treated differently in different make versions
|
||||
# so use a variable for '#'
|
||||
HASH=\#
|
||||
|
||||
PREFIX ?= /usr/local
|
||||
BIN_PATH = $(PREFIX)/bin
|
||||
HELPER_PATH = $(PREFIX)/lib/afl
|
||||
DOC_PATH = $(PREFIX)/share/doc/afl
|
||||
MISC_PATH = $(PREFIX)/share/afl
|
||||
MAN_PATH = $(PREFIX)/man/man8
|
||||
|
||||
PROGNAME = afl
|
||||
VERSION = $(shell grep '^$(HASH)define VERSION ' ../config.h | cut -d '"' -f2)
|
||||
|
||||
# PROGS intentionally omit afl-as, which gets installed elsewhere.
|
||||
|
||||
PROGS = afl-gcc afl-fuzz afl-showmap afl-tmin afl-gotcpu afl-analyze
|
||||
SH_PROGS = afl-plot afl-cmin afl-cmin.bash afl-whatsup afl-system-config
|
||||
MANPAGES=$(foreach p, $(PROGS) $(SH_PROGS), $(p).8) afl-as.8
|
||||
ASAN_OPTIONS=detect_leaks=0
|
||||
|
||||
ifeq "$(findstring android, $(shell $(CC) --version 2>/dev/null))" ""
|
||||
ifeq "$(shell echo 'int main() {return 0; }' | $(CC) $(CFLAGS) -Werror -x c - -flto=full -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
CFLAGS_FLTO ?= -flto=full
|
||||
else
|
||||
ifeq "$(shell echo 'int main() {return 0; }' | $(CC) $(CFLAGS) -Werror -x c - -flto=thin -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
CFLAGS_FLTO ?= -flto=thin
|
||||
else
|
||||
ifeq "$(shell echo 'int main() {return 0; }' | $(CC) $(CFLAGS) -Werror -x c - -flto -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
CFLAGS_FLTO ?= -flto
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq "$(shell echo 'int main() {return 0; }' | $(CC) -fno-move-loop-invariants -fdisable-tree-cunrolli -x c - -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
SPECIAL_PERFORMANCE += -fno-move-loop-invariants -fdisable-tree-cunrolli
|
||||
endif
|
||||
|
||||
ifneq "$(shell uname)" "Darwin"
|
||||
ifeq "$(shell echo 'int main() {return 0; }' | $(CC) $(CFLAGS) -Werror -x c - -march=native -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
#CFLAGS_OPT += -march=native
|
||||
SPECIAL_PERFORMANCE += -march=native
|
||||
endif
|
||||
# OS X does not like _FORTIFY_SOURCE=2
|
||||
CFLAGS_OPT += -D_FORTIFY_SOURCE=2
|
||||
endif
|
||||
|
||||
ifeq "$(shell uname)" "SunOS"
|
||||
CFLAGS_OPT += -Wno-format-truncation
|
||||
LDFLAGS=-lkstat
|
||||
endif
|
||||
|
||||
ifdef STATIC
|
||||
$(info Compiling static version of binaries, disabling python though)
|
||||
# Disable python for static compilation to simplify things
|
||||
PYTHON_OK=0
|
||||
PYFLAGS=
|
||||
PYTHON_INCLUDE=/
|
||||
|
||||
CFLAGS_OPT += -static
|
||||
LDFLAGS += -lm -lpthread -lz -lutil
|
||||
endif
|
||||
|
||||
ifdef PROFILING
|
||||
$(info Compiling with profiling information, for analysis: gprof ./afl-fuzz gmon.out > prof.txt)
|
||||
CFLAGS_OPT += -pg -DPROFILING=1
|
||||
LDFLAGS += -pg
|
||||
endif
|
||||
|
||||
ifneq "$(shell uname -m)" "x86_64"
|
||||
ifneq "$(patsubst i%86,i386,$(shell uname -m))" "i386"
|
||||
ifneq "$(shell uname -m)" "amd64"
|
||||
ifneq "$(shell uname -m)" "i86pc"
|
||||
AFL_NO_X86=1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS ?= -O3 -funroll-loops $(CFLAGS_OPT)
|
||||
override CFLAGS += -Wall -g -Wno-pointer-sign -Wmissing-declarations\
|
||||
-I include/ -DAFL_PATH=\"$(HELPER_PATH)\" \
|
||||
-DBIN_PATH=\"$(BIN_PATH)\" -DDOC_PATH=\"$(DOC_PATH)\"
|
||||
|
||||
ifeq "$(shell uname -s)" "FreeBSD"
|
||||
override CFLAGS += -I /usr/local/include/
|
||||
LDFLAGS += -L /usr/local/lib/
|
||||
endif
|
||||
|
||||
ifeq "$(shell uname -s)" "DragonFly"
|
||||
override CFLAGS += -I /usr/local/include/
|
||||
LDFLAGS += -L /usr/local/lib/
|
||||
endif
|
||||
|
||||
ifeq "$(shell uname -s)" "OpenBSD"
|
||||
override CFLAGS += -I /usr/local/include/ -mno-retpoline
|
||||
LDFLAGS += -Wl,-z,notext -L /usr/local/lib/
|
||||
endif
|
||||
|
||||
ifeq "$(shell uname -s)" "NetBSD"
|
||||
override CFLAGS += -I /usr/pkg/include/
|
||||
LDFLAGS += -L /usr/pkg/lib/
|
||||
endif
|
||||
|
||||
ifeq "$(shell uname -s)" "Haiku"
|
||||
SHMAT_OK=0
|
||||
override CFLAGS += -DUSEMMAP=1 -Wno-error=format -fPIC
|
||||
LDFLAGS += -Wno-deprecated-declarations -lgnu
|
||||
SPECIAL_PERFORMANCE += -DUSEMMAP=1
|
||||
endif
|
||||
|
||||
AFL_FUZZ_FILES = $(wildcard src/afl-fuzz*.c)
|
||||
|
||||
ifneq "$(shell command -v python3m 2>/dev/null)" ""
|
||||
ifneq "$(shell command -v python3m-config 2>/dev/null)" ""
|
||||
PYTHON_INCLUDE ?= $(shell python3m-config --includes)
|
||||
PYTHON_VERSION ?= $(strip $(shell python3m --version 2>&1))
|
||||
# Starting with python3.8, we need to pass the `embed` flag. Earlier versions didn't know this flag.
|
||||
ifeq "$(shell python3m-config --embed --libs 2>/dev/null | grep -q lpython && echo 1 )" "1"
|
||||
PYTHON_LIB ?= $(shell python3m-config --libs --embed --ldflags)
|
||||
else
|
||||
PYTHON_LIB ?= $(shell python3m-config --ldflags)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq "$(PYTHON_INCLUDE)" ""
|
||||
ifneq "$(shell command -v python3 2>/dev/null)" ""
|
||||
ifneq "$(shell command -v python3-config 2>/dev/null)" ""
|
||||
PYTHON_INCLUDE ?= $(shell python3-config --includes)
|
||||
PYTHON_VERSION ?= $(strip $(shell python3 --version 2>&1))
|
||||
# Starting with python3.8, we need to pass the `embed` flag. Earier versions didn't know this flag.
|
||||
ifeq "$(shell python3-config --embed --libs 2>/dev/null | grep -q lpython && echo 1 )" "1"
|
||||
PYTHON_LIB ?= $(shell python3-config --libs --embed --ldflags)
|
||||
else
|
||||
PYTHON_LIB ?= $(shell python3-config --ldflags)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq "$(PYTHON_INCLUDE)" ""
|
||||
ifneq "$(shell command -v python 2>/dev/null)" ""
|
||||
ifneq "$(shell command -v python-config 2>/dev/null)" ""
|
||||
PYTHON_INCLUDE ?= $(shell python-config --includes)
|
||||
PYTHON_LIB ?= $(shell python-config --ldflags)
|
||||
PYTHON_VERSION ?= $(strip $(shell python --version 2>&1))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Old Ubuntu and others dont have python/python3-config so we hardcode 3.7
|
||||
ifeq "$(PYTHON_INCLUDE)" ""
|
||||
ifneq "$(shell command -v python3.7 2>/dev/null)" ""
|
||||
ifneq "$(shell command -v python3.7-config 2>/dev/null)" ""
|
||||
PYTHON_INCLUDE ?= $(shell python3.7-config --includes)
|
||||
PYTHON_LIB ?= $(shell python3.7-config --ldflags)
|
||||
PYTHON_VERSION ?= $(strip $(shell python3.7 --version 2>&1))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Old Ubuntu and others dont have python/python2-config so we hardcode 2.7
|
||||
ifeq "$(PYTHON_INCLUDE)" ""
|
||||
ifneq "$(shell command -v python2.7 2>/dev/null)" ""
|
||||
ifneq "$(shell command -v python2.7-config 2>/dev/null)" ""
|
||||
PYTHON_INCLUDE ?= $(shell python2.7-config --includes)
|
||||
PYTHON_LIB ?= $(shell python2.7-config --ldflags)
|
||||
PYTHON_VERSION ?= $(strip $(shell python2.7 --version 2>&1))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef SOURCE_DATE_EPOCH
|
||||
BUILD_DATE ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "+%Y-%m-%d" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "+%Y-%m-%d" 2>/dev/null || date -u "+%Y-%m-%d")
|
||||
else
|
||||
BUILD_DATE ?= $(shell date "+%Y-%m-%d")
|
||||
endif
|
||||
|
||||
ifneq "$(filter Linux GNU%,$(shell uname))" ""
|
||||
LDFLAGS += -ldl
|
||||
endif
|
||||
|
||||
ifneq "$(findstring FreeBSD, $(shell uname))" ""
|
||||
override CFLAGS += -pthread
|
||||
LDFLAGS += -lpthread
|
||||
endif
|
||||
|
||||
ifneq "$(findstring NetBSD, $(shell uname))" ""
|
||||
override CFLAGS += -pthread
|
||||
LDFLAGS += -lpthread
|
||||
endif
|
||||
|
||||
ifeq "$(findstring clang, $(shell $(CC) --version 2>/dev/null))" ""
|
||||
TEST_CC = afl-gcc
|
||||
else
|
||||
TEST_CC = afl-clang
|
||||
endif
|
||||
|
||||
COMM_HDR = include/alloc-inl.h include/config.h include/debug.h include/types.h
|
||||
|
||||
ifeq "$(shell echo '$(HASH)include <Python.h>@int main() {return 0; }' | tr @ '\n' | $(CC) $(CFLAGS) -x c - -o .test $(PYTHON_INCLUDE) $(LDFLAGS) $(PYTHON_LIB) 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
|
||||
PYTHON_OK=1
|
||||
PYFLAGS=-DUSE_PYTHON $(PYTHON_INCLUDE) $(LDFLAGS) $(PYTHON_LIB) -DPYTHON_VERSION="\"$(PYTHON_VERSION)\""
|
||||
else
|
||||
PYTHON_OK=0
|
||||
PYFLAGS=
|
||||
endif
|
||||
|
||||
ifdef NO_PYTHON
|
||||
PYTHON_OK=0
|
||||
PYFLAGS=
|
||||
endif
|
||||
|
||||
IN_REPO=0
|
||||
ifeq "$(shell command -v git >/dev/null && git status >/dev/null 2>&1 && echo 1 || echo 0)" "1"
|
||||
IN_REPO=1
|
||||
endif
|
||||
ifeq "$(shell command -v svn >/dev/null && svn proplist . 2>/dev/null && echo 1 || echo 0)" "1"
|
||||
IN_REPO=1
|
||||
endif
|
||||
|
||||
ifeq "$(shell echo 'int main() { return 0;}' | $(CC) $(CFLAGS) -fsanitize=address -x c - -o .test2 2>/dev/null && echo 1 || echo 0 ; rm -f .test2 )" "1"
|
||||
ASAN_CFLAGS=-fsanitize=address -fstack-protector-all -fno-omit-frame-pointer
|
||||
ASAN_LDFLAGS=-fsanitize=address -fstack-protector-all -fno-omit-frame-pointer
|
||||
endif
|
||||
|
||||
ifdef ASAN_BUILD
|
||||
$(info Compiling ASAN version of binaries)
|
||||
override CFLAGS+=$(ASAN_CFLAGS)
|
||||
LDFLAGS+=$(ASAN_LDFLAGS)
|
||||
endif
|
||||
|
||||
ifeq "$(shell echo '$(HASH)include <sys/ipc.h>@$(HASH)include <sys/shm.h>@int main() { int _id = shmget(IPC_PRIVATE, 65536, IPC_CREAT | IPC_EXCL | 0600); shmctl(_id, IPC_RMID, 0); return 0;}' | tr @ '\n' | $(CC) $(CFLAGS) -x c - -o .test2 2>/dev/null && echo 1 || echo 0 ; rm -f .test2 )" "1"
|
||||
SHMAT_OK=1
|
||||
else
|
||||
SHMAT_OK=0
|
||||
override CFLAGS+=-DUSEMMAP=1
|
||||
LDFLAGS += -Wno-deprecated-declarations -lrt
|
||||
endif
|
||||
|
||||
ifdef TEST_MMAP
|
||||
SHMAT_OK=0
|
||||
override CFLAGS += -DUSEMMAP=1
|
||||
LDFLAGS += -Wno-deprecated-declarations -lrt
|
||||
endif
|
||||
|
||||
all: test_x86 test_shm test_python ready $(PROGS) afl-as test_build all_done
|
||||
|
||||
man: $(MANPAGES)
|
||||
|
||||
tests: source-only
|
||||
@cd test ; ./test.sh
|
||||
@rm -f test/errors
|
||||
|
||||
performance-tests: performance-test
|
||||
test-performance: performance-test
|
||||
|
||||
performance-test: source-only
|
||||
@cd test ; ./test-performance.sh
|
||||
|
||||
|
||||
# hint: make targets are also listed in the top level README.md
|
||||
help:
|
||||
@echo "HELP --- the following make targets exist:"
|
||||
@echo "=========================================="
|
||||
@echo "all: just the main afl++ binaries"
|
||||
@echo "binary-only: everything for binary-only fuzzing: qemu_mode, unicorn_mode, libdislocator, libtokencap"
|
||||
@echo "source-only: everything for source code fuzzing: llvm_mode, gcc_plugin, libdislocator, libtokencap"
|
||||
@echo "distrib: everything (for both binary-only and source code fuzzing)"
|
||||
@echo "man: creates simple man pages from the help option of the programs"
|
||||
@echo "install: installs everything you have compiled with the build option above"
|
||||
@echo "clean: cleans everything compiled (not downloads when on a checkout)"
|
||||
@echo "deepclean: cleans everything including downloads"
|
||||
@echo "code-format: format the code, do this before you commit and send a PR please!"
|
||||
@echo "tests: this runs the test framework. It is more catered for the developers, but if you run into problems this helps pinpointing the problem"
|
||||
@echo "unit: perform unit tests (based on cmocka and GNU linker)"
|
||||
@echo "document: creates afl-fuzz-document which will only do one run and save all manipulated inputs into out/queue/mutations"
|
||||
@echo "help: shows these build options :-)"
|
||||
@echo "=========================================="
|
||||
@echo "Recommended: \"distrib\" or \"source-only\", then \"install\""
|
||||
@echo
|
||||
@echo Known build environment options:
|
||||
@echo "=========================================="
|
||||
@echo STATIC - compile AFL++ static
|
||||
@echo ASAN_BUILD - compiles with memory sanitizer for debug purposes
|
||||
@echo PROFILING - compile afl-fuzz with profiling information
|
||||
@echo AFL_NO_X86 - if compiling on non-intel/amd platforms
|
||||
@echo "=========================================="
|
||||
@echo e.g.: make ASAN_BUILD=1
|
||||
|
||||
ifndef AFL_NO_X86
|
||||
|
||||
test_x86:
|
||||
@echo "[*] Checking for the default compiler cc..."
|
||||
@type $(CC) >/dev/null || ( echo; echo "Oops, looks like there is no compiler '"$(CC)"' in your path."; echo; echo "Don't panic! You can restart with '"$(_)" CC=<yourCcompiler>'."; echo; exit 1 )
|
||||
@echo "[*] Testing the PATH environment variable..."
|
||||
@test "$${PATH}" != "$${PATH#.:}" && { echo "Please remove current directory '.' from PATH to avoid recursion of 'as', thanks!"; echo; exit 1; } || :
|
||||
@echo "[*] Checking for the ability to compile x86 code..."
|
||||
@echo 'main() { __asm__("xorb %al, %al"); }' | $(CC) $(CFLAGS) -w -x c - -o .test1 || ( echo; echo "Oops, looks like your compiler can't generate x86 code."; echo; echo "Don't panic! You can use the LLVM or QEMU mode, but see docs/INSTALL first."; echo "(To ignore this error, set AFL_NO_X86=1 and try again.)"; echo; exit 1 )
|
||||
@rm -f .test1
|
||||
|
||||
else
|
||||
|
||||
test_x86:
|
||||
@echo "[!] Note: skipping x86 compilation checks (AFL_NO_X86 set)."
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ifeq "$(SHMAT_OK)" "1"
|
||||
|
||||
test_shm:
|
||||
@echo "[+] shmat seems to be working."
|
||||
@rm -f .test2
|
||||
|
||||
else
|
||||
|
||||
test_shm:
|
||||
@echo "[-] shmat seems not to be working, switching to mmap implementation"
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ifeq "$(PYTHON_OK)" "1"
|
||||
|
||||
test_python:
|
||||
@rm -f .test 2> /dev/null
|
||||
@echo "[+] $(PYTHON_VERSION) support seems to be working."
|
||||
|
||||
else
|
||||
|
||||
test_python:
|
||||
@echo "[-] You seem to need to install the package python3-dev, python2-dev or python-dev (and perhaps python[23]-apt), but it is optional so we continue"
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ready:
|
||||
@echo "[+] Everything seems to be working, ready to compile."
|
||||
|
||||
afl-gcc: src/afl-gcc.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) src/$@.c -o $@ $(LDFLAGS)
|
||||
set -e; for i in afl-g++ afl-clang afl-clang++; do ln -sf afl-gcc $$i; done
|
||||
|
||||
afl-as: src/afl-as.c include/afl-as.h $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) src/$@.c -o $@ $(LDFLAGS)
|
||||
ln -sf afl-as as
|
||||
|
||||
src/afl-performance.o : $(COMM_HDR) src/afl-performance.c include/hash.h
|
||||
$(CC) -Iinclude $(SPECIAL_PERFORMANCE) -O3 -fno-unroll-loops -c src/afl-performance.c -o src/afl-performance.o
|
||||
|
||||
src/afl-common.o : $(COMM_HDR) src/afl-common.c include/common.h
|
||||
$(CC) $(CFLAGS) $(CFLAGS_FLTO) -c src/afl-common.c -o src/afl-common.o
|
||||
|
||||
src/afl-forkserver.o : $(COMM_HDR) src/afl-forkserver.c include/forkserver.h
|
||||
$(CC) $(CFLAGS) $(CFLAGS_FLTO) -c src/afl-forkserver.c -o src/afl-forkserver.o
|
||||
|
||||
src/afl-sharedmem.o : $(COMM_HDR) src/afl-sharedmem.c include/sharedmem.h
|
||||
$(CC) $(CFLAGS) $(CFLAGS_FLTO) -c src/afl-sharedmem.c -o src/afl-sharedmem.o
|
||||
|
||||
afl-fuzz: $(COMM_HDR) include/afl-fuzz.h $(AFL_FUZZ_FILES) src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o src/afl-performance.o | test_x86
|
||||
$(CC) $(CFLAGS) $(COMPILE_STATIC) $(CFLAGS_FLTO) $(AFL_FUZZ_FILES) src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o src/afl-performance.o -o $@ $(PYFLAGS) $(LDFLAGS)
|
||||
|
||||
afl-showmap: src/afl-showmap.c src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $(COMPILE_STATIC) $(CFLAGS_FLTO) src/$@.c src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o -o $@ $(LDFLAGS)
|
||||
|
||||
afl-tmin: src/afl-tmin.c src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o src/afl-performance.o $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $(COMPILE_STATIC) $(CFLAGS_FLTO) src/$@.c src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.o src/afl-performance.o -o $@ $(LDFLAGS)
|
||||
|
||||
afl-analyze: src/afl-analyze.c src/afl-common.o src/afl-sharedmem.o src/afl-performance.o $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $(COMPILE_STATIC) $(CFLAGS_FLTO) src/$@.c src/afl-common.o src/afl-sharedmem.o src/afl-performance.o -o $@ $(LDFLAGS)
|
||||
|
||||
afl-gotcpu: src/afl-gotcpu.c src/afl-common.o $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $(COMPILE_STATIC) $(CFLAGS_FLTO) src/$@.c src/afl-common.o -o $@ $(LDFLAGS)
|
||||
|
||||
|
||||
# document all mutations and only do one run (use with only one input file!)
|
||||
document: $(COMM_HDR) include/afl-fuzz.h $(AFL_FUZZ_FILES) src/afl-common.o src/afl-sharedmem.o src/afl-performance.o | test_x86
|
||||
$(CC) -D_DEBUG=\"1\" -D_AFL_DOCUMENT_MUTATIONS $(CFLAGS) $(CFLAGS_FLTO) $(AFL_FUZZ_FILES) src/afl-common.o src/afl-sharedmem.o src/afl-forkserver.c src/afl-performance.o -o afl-fuzz-document $(PYFLAGS) $(LDFLAGS)
|
||||
|
||||
test/unittests/unit_maybe_alloc.o : $(COMM_HDR) include/alloc-inl.h test/unittests/unit_maybe_alloc.c $(AFL_FUZZ_FILES)
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -c test/unittests/unit_maybe_alloc.c -o test/unittests/unit_maybe_alloc.o
|
||||
|
||||
unit_maybe_alloc: test/unittests/unit_maybe_alloc.o
|
||||
@$(CC) $(CFLAGS) -Wl,--wrap=exit -Wl,--wrap=printf test/unittests/unit_maybe_alloc.o -o test/unittests/unit_maybe_alloc $(LDFLAGS) $(ASAN_LDFLAGS) -lcmocka
|
||||
./test/unittests/unit_maybe_alloc
|
||||
|
||||
test/unittests/unit_hash.o : $(COMM_HDR) include/alloc-inl.h test/unittests/unit_hash.c $(AFL_FUZZ_FILES) src/afl-performance.o
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -c test/unittests/unit_hash.c -o test/unittests/unit_hash.o
|
||||
|
||||
unit_hash: test/unittests/unit_hash.o src/afl-performance.o
|
||||
@$(CC) $(CFLAGS) -Wl,--wrap=exit -Wl,--wrap=printf $^ -o test/unittests/unit_hash $(LDFLAGS) $(ASAN_LDFLAGS) -lcmocka
|
||||
./test/unittests/unit_hash
|
||||
|
||||
test/unittests/unit_rand.o : $(COMM_HDR) include/alloc-inl.h test/unittests/unit_rand.c $(AFL_FUZZ_FILES) src/afl-performance.o
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -c test/unittests/unit_rand.c -o test/unittests/unit_rand.o
|
||||
|
||||
unit_rand: test/unittests/unit_rand.o src/afl-common.o src/afl-performance.o
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -Wl,--wrap=exit -Wl,--wrap=printf $^ -o test/unittests/unit_rand $(LDFLAGS) $(ASAN_LDFLAGS) -lcmocka
|
||||
./test/unittests/unit_rand
|
||||
|
||||
test/unittests/unit_list.o : $(COMM_HDR) include/list.h test/unittests/unit_list.c $(AFL_FUZZ_FILES)
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -c test/unittests/unit_list.c -o test/unittests/unit_list.o
|
||||
|
||||
unit_list: test/unittests/unit_list.o
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -Wl,--wrap=exit -Wl,--wrap=printf test/unittests/unit_list.o -o test/unittests/unit_list $(LDFLAGS) $(ASAN_LDFLAGS) -lcmocka
|
||||
./test/unittests/unit_list
|
||||
|
||||
test/unittests/unit_preallocable.o : $(COMM_HDR) include/alloc-inl.h test/unittests/unit_preallocable.c $(AFL_FUZZ_FILES)
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -c test/unittests/unit_preallocable.c -o test/unittests/unit_preallocable.o
|
||||
|
||||
unit_preallocable: test/unittests/unit_preallocable.o
|
||||
@$(CC) $(CFLAGS) $(ASAN_CFLAGS) -Wl,--wrap=exit -Wl,--wrap=printf test/unittests/unit_preallocable.o -o test/unittests/unit_preallocable $(LDFLAGS) $(ASAN_LDFLAGS) -lcmocka
|
||||
./test/unittests/unit_preallocable
|
||||
|
||||
unit_clean:
|
||||
@rm -f ./test/unittests/unit_preallocable ./test/unittests/unit_list ./test/unittests/unit_maybe_alloc test/unittests/*.o
|
||||
|
||||
ifneq "$(shell uname)" "Darwin"
|
||||
|
||||
unit: unit_maybe_alloc unit_preallocable unit_list unit_clean unit_rand unit_hash
|
||||
|
||||
else
|
||||
|
||||
unit:
|
||||
@echo [-] unit tests are skipped on Darwin \(lacks GNU linker feature --wrap\)
|
||||
|
||||
endif
|
||||
|
||||
code-format:
|
||||
./.custom-format.py -i src/*.c
|
||||
./.custom-format.py -i include/*.h
|
||||
./.custom-format.py -i libdislocator/*.c
|
||||
./.custom-format.py -i libtokencap/*.c
|
||||
./.custom-format.py -i llvm_mode/*.c
|
||||
./.custom-format.py -i llvm_mode/*.h
|
||||
./.custom-format.py -i llvm_mode/*.cc
|
||||
./.custom-format.py -i gcc_plugin/*.c
|
||||
#./.custom-format.py -i gcc_plugin/*.h
|
||||
./.custom-format.py -i gcc_plugin/*.cc
|
||||
./.custom-format.py -i custom_mutators/*/*.c
|
||||
./.custom-format.py -i custom_mutators/*/*.h
|
||||
./.custom-format.py -i examples/*/*.c
|
||||
./.custom-format.py -i examples/*/*.h
|
||||
./.custom-format.py -i test/*.c
|
||||
./.custom-format.py -i qemu_mode/patches/*.h
|
||||
./.custom-format.py -i qemu_mode/libcompcov/*.c
|
||||
./.custom-format.py -i qemu_mode/libcompcov/*.cc
|
||||
./.custom-format.py -i qemu_mode/libcompcov/*.h
|
||||
./.custom-format.py -i qbdi_mode/*.c
|
||||
./.custom-format.py -i qbdi_mode/*.cpp
|
||||
./.custom-format.py -i *.h
|
||||
./.custom-format.py -i *.c
|
||||
|
||||
|
||||
ifndef AFL_NO_X86
|
||||
|
||||
test_build: afl-gcc afl-as afl-showmap
|
||||
@echo "[*] Testing the CC wrapper and instrumentation output..."
|
||||
@unset AFL_USE_ASAN AFL_USE_MSAN AFL_CC; AFL_DEBUG=1 AFL_INST_RATIO=100 AFL_PATH=. ./$(TEST_CC) $(CFLAGS) test-instr.c -o test-instr $(LDFLAGS) 2>&1 | grep 'afl-as' >/dev/null || (echo "Oops, afl-as did not get called from "$(TEST_CC)". This is normally achieved by "$(CC)" honoring the -B option."; exit 1 )
|
||||
ASAN_OPTIONS=detect_leaks=0 ./afl-showmap -m none -q -o .test-instr0 ./test-instr < /dev/null
|
||||
echo 1 | ASAN_OPTIONS=detect_leaks=0 ./afl-showmap -m none -q -o .test-instr1 ./test-instr
|
||||
@rm -f test-instr
|
||||
@cmp -s .test-instr0 .test-instr1; DR="$$?"; rm -f .test-instr0 .test-instr1; if [ "$$DR" = "0" ]; then echo; echo "Oops, the instrumentation does not seem to be behaving correctly!"; echo; echo "Please post to https://github.com/AFLplusplus/AFLplusplus/issues to troubleshoot the issue."; echo; exit 1; fi
|
||||
@echo "[+] All right, the instrumentation seems to be working!"
|
||||
|
||||
else
|
||||
|
||||
test_build: afl-gcc afl-as afl-showmap
|
||||
@echo "[!] Note: skipping build tests (you may need to use LLVM or QEMU mode)."
|
||||
|
||||
endif
|
||||
|
||||
|
||||
all_done: test_build
|
||||
@if [ ! "`type clang 2>/dev/null`" = "" ]; then echo "[+] LLVM users: see llvm_mode/README.md for a faster alternative to afl-gcc."; fi
|
||||
@echo "[+] All done! Be sure to review the README.md - it's pretty short and useful."
|
||||
@if [ "`uname`" = "Darwin" ]; then printf "\nWARNING: Fuzzing on MacOS X is slow because of the unusually high overhead of\nfork() on this OS. Consider using Linux or *BSD. You can also use VirtualBox\n(virtualbox.org) to put AFL inside a Linux or *BSD VM.\n\n"; fi
|
||||
@! tty <&1 >/dev/null || printf "\033[0;30mNOTE: If you can read this, your terminal probably uses white background.\nThis will make the UI hard to read. See docs/status_screen.md for advice.\033[0m\n" 2>/dev/null
|
||||
|
||||
.NOTPARALLEL: clean all
|
||||
|
||||
clean:
|
||||
rm -f $(PROGS) libradamsa.so afl-fuzz-document afl-as as afl-g++ afl-clang afl-clang++ *.o src/*.o *~ a.out core core.[1-9][0-9]* *.stackdump .test .test1 .test2 test-instr .test-instr0 .test-instr1 afl-qemu-trace afl-gcc-fast afl-gcc-pass.so afl-gcc-rt.o afl-g++-fast ld *.so *.8 test/unittests/*.o test/unittests/unit_maybe_alloc test/unittests/preallocable .afl-*
|
||||
rm -rf out_dir qemu_mode/qemu-3.1.1 *.dSYM */*.dSYM
|
||||
-$(MAKE) -C llvm_mode clean
|
||||
-$(MAKE) -C gcc_plugin clean
|
||||
$(MAKE) -C libdislocator clean
|
||||
$(MAKE) -C libtokencap clean
|
||||
$(MAKE) -C examples/afl_network_proxy clean
|
||||
$(MAKE) -C examples/socket_fuzzing clean
|
||||
$(MAKE) -C examples/argv_fuzzing clean
|
||||
$(MAKE) -C qemu_mode/unsigaction clean
|
||||
$(MAKE) -C qemu_mode/libcompcov clean
|
||||
rm -rf qemu_mode/qemu-3.1.1
|
||||
ifeq "$(IN_REPO)" "1"
|
||||
test -d unicorn_mode/unicornafl && $(MAKE) -C unicorn_mode/unicornafl clean || true
|
||||
else
|
||||
rm -rf qemu_mode/qemu-3.1.1.tar.xz
|
||||
rm -rf unicorn_mode/unicornafl
|
||||
endif
|
||||
|
||||
deepclean: clean
|
||||
rm -rf qemu_mode/qemu-3.1.1.tar.xz
|
||||
rm -rf unicorn_mode/unicornafl
|
||||
git reset --hard >/dev/null 2>&1 || true
|
||||
|
||||
distrib: all
|
||||
-$(MAKE) -C llvm_mode
|
||||
-$(MAKE) -C gcc_plugin
|
||||
$(MAKE) -C libdislocator
|
||||
$(MAKE) -C libtokencap
|
||||
$(MAKE) -C examples/afl_network_proxy
|
||||
$(MAKE) -C examples/socket_fuzzing
|
||||
$(MAKE) -C examples/argv_fuzzing
|
||||
-cd qemu_mode && sh ./build_qemu_support.sh
|
||||
cd unicorn_mode && unset CFLAGS && sh ./build_unicorn_support.sh
|
||||
|
||||
binary-only: all
|
||||
$(MAKE) -C libdislocator
|
||||
$(MAKE) -C libtokencap
|
||||
$(MAKE) -C examples/afl_network_proxy
|
||||
$(MAKE) -C examples/socket_fuzzing
|
||||
$(MAKE) -C examples/argv_fuzzing
|
||||
-cd qemu_mode && sh ./build_qemu_support.sh
|
||||
cd unicorn_mode && unset CFLAGS && sh ./build_unicorn_support.sh
|
||||
|
||||
source-only: all
|
||||
-$(MAKE) -C llvm_mode
|
||||
-$(MAKE) -C gcc_plugin
|
||||
$(MAKE) -C libdislocator
|
||||
$(MAKE) -C libtokencap
|
||||
#$(MAKE) -C examples/afl_network_proxy
|
||||
#$(MAKE) -C examples/socket_fuzzing
|
||||
#$(MAKE) -C examples/argv_fuzzing
|
||||
|
||||
%.8: %
|
||||
@echo .TH $* 8 $(BUILD_DATE) "afl++" > $@
|
||||
@echo .SH NAME >> $@
|
||||
@echo .B $* >> $@
|
||||
@echo >> $@
|
||||
@echo .SH SYNOPSIS >> $@
|
||||
@./$* -h 2>&1 | head -n 3 | tail -n 1 | sed 's/^\.\///' >> $@
|
||||
@echo >> $@
|
||||
@echo .SH OPTIONS >> $@
|
||||
@echo .nf >> $@
|
||||
@./$* -hh 2>&1 | tail -n +4 >> $@
|
||||
@echo >> $@
|
||||
@echo .SH AUTHOR >> $@
|
||||
@echo "afl++ was written by Michal \"lcamtuf\" Zalewski and is maintained by Marc \"van Hauser\" Heuse <mh@mh-sec.de>, Heiko \"hexcoder-\" Eissfeldt <heiko.eissfeldt@hexco.de>, Andrea Fioraldi <andreafioraldi@gmail.com> and Dominik Maier <domenukk@gmail.com>" >> $@
|
||||
@echo The homepage of afl++ is: https://github.com/AFLplusplus/AFLplusplus >> $@
|
||||
@echo >> $@
|
||||
@echo .SH LICENSE >> $@
|
||||
@echo Apache License Version 2.0, January 2004 >> $@
|
||||
|
||||
install: all $(MANPAGES)
|
||||
install -d -m 755 $${DESTDIR}$(BIN_PATH) $${DESTDIR}$(HELPER_PATH) $${DESTDIR}$(DOC_PATH) $${DESTDIR}$(MISC_PATH)
|
||||
rm -f $${DESTDIR}$(BIN_PATH)/afl-plot.sh
|
||||
install -m 755 $(PROGS) $(SH_PROGS) $${DESTDIR}$(BIN_PATH)
|
||||
rm -f $${DESTDIR}$(BIN_PATH)/afl-as
|
||||
if [ -f afl-qemu-trace ]; then install -m 755 afl-qemu-trace $${DESTDIR}$(BIN_PATH); fi
|
||||
if [ -f afl-gcc-fast ]; then set e; install -m 755 afl-gcc-fast $${DESTDIR}$(BIN_PATH); ln -sf afl-gcc-fast $${DESTDIR}$(BIN_PATH)/afl-g++-fast; install -m 755 afl-gcc-pass.so afl-gcc-rt.o $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f afl-clang-fast ]; then $(MAKE) -C llvm_mode install; fi
|
||||
if [ -f libdislocator.so ]; then set -e; install -m 755 libdislocator.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f libtokencap.so ]; then set -e; install -m 755 libtokencap.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f libcompcov.so ]; then set -e; install -m 755 libcompcov.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f afl-fuzz-document ]; then set -e; install -m 755 afl-fuzz-document $${DESTDIR}$(BIN_PATH); fi
|
||||
if [ -f socketfuzz32.so -o -f socketfuzz64.so ]; then $(MAKE) -C examples/socket_fuzzing install; fi
|
||||
if [ -f argvfuzz32.so -o -f argvfuzz64.so ]; then $(MAKE) -C examples/argv_fuzzing install; fi
|
||||
if [ -f examples/afl_network_proxy/afl-network-server ]; then $(MAKE) -C examples/afl_network_proxy install; fi
|
||||
|
||||
set -e; ln -sf afl-gcc $${DESTDIR}$(BIN_PATH)/afl-g++
|
||||
set -e; if [ -f afl-clang-fast ] ; then ln -sf afl-clang-fast $${DESTDIR}$(BIN_PATH)/afl-clang ; ln -sf afl-clang-fast $${DESTDIR}$(BIN_PATH)/afl-clang++ ; else ln -sf afl-gcc $${DESTDIR}$(BIN_PATH)/afl-clang ; ln -sf afl-gcc $${DESTDIR}$(BIN_PATH)/afl-clang++; fi
|
||||
|
||||
mkdir -m 0755 -p ${DESTDIR}$(MAN_PATH)
|
||||
install -m0644 *.8 ${DESTDIR}$(MAN_PATH)
|
||||
|
||||
install -m 755 afl-as $${DESTDIR}$(HELPER_PATH)
|
||||
ln -sf afl-as $${DESTDIR}$(HELPER_PATH)/as
|
||||
install -m 644 docs/*.md $${DESTDIR}$(DOC_PATH)
|
||||
cp -r testcases/ $${DESTDIR}$(MISC_PATH)
|
||||
cp -r dictionaries/ $${DESTDIR}$(MISC_PATH)
|
171
Makefile
171
Makefile
@ -1,157 +1,42 @@
|
||||
#
|
||||
# american fuzzy lop - makefile
|
||||
# -----------------------------
|
||||
#
|
||||
# Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
#
|
||||
# Copyright 2013, 2014, 2015, 2016, 2017 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
all:
|
||||
@echo trying to use GNU make...
|
||||
@gmake all || echo please install GNUmake
|
||||
|
||||
PROGNAME = afl
|
||||
VERSION = $(shell grep '^\#define VERSION ' config.h | cut -d '"' -f2)
|
||||
source-only:
|
||||
@gmake source-only
|
||||
|
||||
PREFIX ?= /usr/local
|
||||
BIN_PATH = $(PREFIX)/bin
|
||||
HELPER_PATH = $(PREFIX)/lib/afl
|
||||
DOC_PATH = $(PREFIX)/share/doc/afl
|
||||
MISC_PATH = $(PREFIX)/share/afl
|
||||
binary-only:
|
||||
@gmake binary-only
|
||||
|
||||
# PROGS intentionally omit afl-as, which gets installed elsewhere.
|
||||
distrib:
|
||||
@gmake distrib
|
||||
|
||||
PROGS = afl-gcc afl-fuzz afl-showmap afl-tmin afl-gotcpu afl-analyze
|
||||
SH_PROGS = afl-plot afl-cmin afl-whatsup afl-system-config
|
||||
man:
|
||||
@gmake man
|
||||
|
||||
CFLAGS ?= -O3 -funroll-loops
|
||||
CFLAGS += -Wall -D_FORTIFY_SOURCE=2 -g -Wno-pointer-sign \
|
||||
-DAFL_PATH=\"$(HELPER_PATH)\" -DDOC_PATH=\"$(DOC_PATH)\" \
|
||||
-DBIN_PATH=\"$(BIN_PATH)\"
|
||||
install:
|
||||
@gmake install
|
||||
|
||||
ifneq "$(filter Linux GNU%,$(shell uname))" ""
|
||||
LDFLAGS += -ldl
|
||||
endif
|
||||
document:
|
||||
@gmake document
|
||||
|
||||
ifeq "$(findstring clang, $(shell $(CC) --version 2>/dev/null))" ""
|
||||
TEST_CC = afl-gcc
|
||||
else
|
||||
TEST_CC = afl-clang
|
||||
endif
|
||||
deepclean:
|
||||
@gmake deepclean
|
||||
|
||||
COMM_HDR = alloc-inl.h config.h debug.h types.h
|
||||
code-format:
|
||||
@gmake code-format
|
||||
|
||||
all: test_x86 $(PROGS) afl-as test_build all_done
|
||||
help:
|
||||
@gmake help
|
||||
|
||||
ifndef AFL_NO_X86
|
||||
tests:
|
||||
@gmake tests
|
||||
|
||||
test_x86:
|
||||
@echo "[*] Checking for the ability to compile x86 code..."
|
||||
@echo 'main() { __asm__("xorb %al, %al"); }' | $(CC) -w -x c - -o .test || ( echo; echo "Oops, looks like your compiler can't generate x86 code."; echo; echo "Don't panic! You can use the LLVM or QEMU mode, but see docs/INSTALL first."; echo "(To ignore this error, set AFL_NO_X86=1 and try again.)"; echo; exit 1 )
|
||||
@rm -f .test
|
||||
@echo "[+] Everything seems to be working, ready to compile."
|
||||
unit:
|
||||
@gmake unit
|
||||
|
||||
else
|
||||
|
||||
test_x86:
|
||||
@echo "[!] Note: skipping x86 compilation checks (AFL_NO_X86 set)."
|
||||
|
||||
endif
|
||||
|
||||
afl-gcc: afl-gcc.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
set -e; for i in afl-g++ afl-clang afl-clang++; do ln -sf afl-gcc $$i; done
|
||||
|
||||
afl-as: afl-as.c afl-as.h $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
ln -sf afl-as as
|
||||
|
||||
afl-fuzz: afl-fuzz.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
|
||||
afl-showmap: afl-showmap.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
|
||||
afl-tmin: afl-tmin.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
|
||||
afl-analyze: afl-analyze.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
|
||||
afl-gotcpu: afl-gotcpu.c $(COMM_HDR) | test_x86
|
||||
$(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS)
|
||||
|
||||
ifndef AFL_NO_X86
|
||||
|
||||
test_build: afl-gcc afl-as afl-showmap
|
||||
@echo "[*] Testing the CC wrapper and instrumentation output..."
|
||||
unset AFL_USE_ASAN AFL_USE_MSAN; AFL_QUIET=1 AFL_INST_RATIO=100 AFL_PATH=. ./$(TEST_CC) $(CFLAGS) test-instr.c -o test-instr $(LDFLAGS)
|
||||
echo 0 | ./afl-showmap -m none -q -o .test-instr0 ./test-instr
|
||||
echo 1 | ./afl-showmap -m none -q -o .test-instr1 ./test-instr
|
||||
@rm -f test-instr
|
||||
@cmp -s .test-instr0 .test-instr1; DR="$$?"; rm -f .test-instr0 .test-instr1; if [ "$$DR" = "0" ]; then echo; echo "Oops, the instrumentation does not seem to be behaving correctly!"; echo; echo "Please ping <lcamtuf@google.com> to troubleshoot the issue."; echo; exit 1; fi
|
||||
@echo "[+] All right, the instrumentation seems to be working!"
|
||||
|
||||
else
|
||||
|
||||
test_build: afl-gcc afl-as afl-showmap
|
||||
@echo "[!] Note: skipping build tests (you may need to use LLVM or QEMU mode)."
|
||||
|
||||
endif
|
||||
|
||||
all_done: test_build
|
||||
@if [ ! "`which clang 2>/dev/null`" = "" ]; then echo "[+] LLVM users: see llvm_mode/README.llvm for a faster alternative to afl-gcc."; fi
|
||||
@echo "[+] All done! Be sure to review README - it's pretty short and useful."
|
||||
@if [ "`uname`" = "Darwin" ]; then printf "\nWARNING: Fuzzing on MacOS X is slow because of the unusually high overhead of\nfork() on this OS. Consider using Linux or *BSD. You can also use VirtualBox\n(virtualbox.org) to put AFL inside a Linux or *BSD VM.\n\n"; fi
|
||||
@! tty <&1 >/dev/null || printf "\033[0;30mNOTE: If you can read this, your terminal probably uses white background.\nThis will make the UI hard to read. See docs/status_screen.txt for advice.\033[0m\n" 2>/dev/null
|
||||
|
||||
.NOTPARALLEL: clean
|
||||
unit_clean:
|
||||
@gmake unit_clean
|
||||
|
||||
clean:
|
||||
rm -f $(PROGS) afl-as as afl-g++ afl-clang afl-clang++ *.o *~ a.out core core.[1-9][0-9]* *.stackdump test .test test-instr .test-instr0 .test-instr1 qemu_mode/qemu-2.10.0.tar.bz2 afl-qemu-trace
|
||||
rm -rf out_dir qemu_mode/qemu-2.10.0
|
||||
$(MAKE) -C llvm_mode clean
|
||||
$(MAKE) -C libdislocator clean
|
||||
$(MAKE) -C libtokencap clean
|
||||
|
||||
install: all
|
||||
mkdir -p -m 755 $${DESTDIR}$(BIN_PATH) $${DESTDIR}$(HELPER_PATH) $${DESTDIR}$(DOC_PATH) $${DESTDIR}$(MISC_PATH)
|
||||
rm -f $${DESTDIR}$(BIN_PATH)/afl-plot.sh
|
||||
install -m 755 $(PROGS) $(SH_PROGS) $${DESTDIR}$(BIN_PATH)
|
||||
rm -f $${DESTDIR}$(BIN_PATH)/afl-as
|
||||
if [ -f afl-qemu-trace ]; then install -m 755 afl-qemu-trace $${DESTDIR}$(BIN_PATH); fi
|
||||
ifndef AFL_TRACE_PC
|
||||
if [ -f afl-clang-fast -a -f afl-llvm-pass.so -a -f afl-llvm-rt.o ]; then set -e; install -m 755 afl-clang-fast $${DESTDIR}$(BIN_PATH); ln -sf afl-clang-fast $${DESTDIR}$(BIN_PATH)/afl-clang-fast++; install -m 755 afl-llvm-pass.so afl-llvm-rt.o $${DESTDIR}$(HELPER_PATH); fi
|
||||
else
|
||||
if [ -f afl-clang-fast -a -f afl-llvm-rt.o ]; then set -e; install -m 755 afl-clang-fast $${DESTDIR}$(BIN_PATH); ln -sf afl-clang-fast $${DESTDIR}$(BIN_PATH)/afl-clang-fast++; install -m 755 afl-llvm-rt.o $${DESTDIR}$(HELPER_PATH); fi
|
||||
endif
|
||||
if [ -f afl-llvm-rt-32.o ]; then set -e; install -m 755 afl-llvm-rt-32.o $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f afl-llvm-rt-64.o ]; then set -e; install -m 755 afl-llvm-rt-64.o $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f compare-transform-pass.so ]; then set -e; install -m 755 compare-transform-pass.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f split-compares-pass.so ]; then set -e; install -m 755 split-compares-pass.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
if [ -f split-switches-pass.so ]; then set -e; install -m 755 split-switches-pass.so $${DESTDIR}$(HELPER_PATH); fi
|
||||
|
||||
set -e; for i in afl-g++ afl-clang afl-clang++; do ln -sf afl-gcc $${DESTDIR}$(BIN_PATH)/$$i; done
|
||||
install -m 755 afl-as $${DESTDIR}$(HELPER_PATH)
|
||||
ln -sf afl-as $${DESTDIR}$(HELPER_PATH)/as
|
||||
install -m 644 docs/README docs/ChangeLog docs/*.txt $${DESTDIR}$(DOC_PATH)
|
||||
cp -r testcases/ $${DESTDIR}$(MISC_PATH)
|
||||
cp -r dictionaries/ $${DESTDIR}$(MISC_PATH)
|
||||
|
||||
publish: clean
|
||||
test "`basename $$PWD`" = "afl" || exit 1
|
||||
test -f ~/www/afl/releases/$(PROGNAME)-$(VERSION).tgz; if [ "$$?" = "0" ]; then echo; echo "Change program version in config.h, mmkay?"; echo; exit 1; fi
|
||||
cd ..; rm -rf $(PROGNAME)-$(VERSION); cp -pr $(PROGNAME) $(PROGNAME)-$(VERSION); \
|
||||
tar -cvz -f ~/www/afl/releases/$(PROGNAME)-$(VERSION).tgz $(PROGNAME)-$(VERSION)
|
||||
chmod 644 ~/www/afl/releases/$(PROGNAME)-$(VERSION).tgz
|
||||
( cd ~/www/afl/releases/; ln -s -f $(PROGNAME)-$(VERSION).tgz $(PROGNAME)-latest.tgz )
|
||||
cat docs/README >~/www/afl/README.txt
|
||||
cat docs/status_screen.txt >~/www/afl/status_screen.txt
|
||||
cat docs/historical_notes.txt >~/www/afl/historical_notes.txt
|
||||
cat docs/technical_details.txt >~/www/afl/technical_details.txt
|
||||
cat docs/ChangeLog >~/www/afl/ChangeLog.txt
|
||||
cat docs/QuickStartGuide.txt >~/www/afl/QuickStartGuide.txt
|
||||
echo -n "$(VERSION)" >~/www/afl/version.txt
|
||||
@gmake clean
|
||||
|
1
QuickStartGuide.md
Symbolic link
1
QuickStartGuide.md
Symbolic link
@ -0,0 +1 @@
|
||||
docs/QuickStartGuide.md
|
@ -1 +0,0 @@
|
||||
docs/QuickStartGuide.txt
|
763
README.md
Normal file
763
README.md
Normal file
@ -0,0 +1,763 @@
|
||||
# american fuzzy lop plus plus (afl++)
|
||||
|
||||
<img align="right" src="https://raw.githubusercontent.com/andreafioraldi/AFLplusplus-website/master/static/logo_256x256.png" alt="AFL++ Logo">
|
||||
|
||||

|
||||
|
||||
Release Version: [2.66c](https://github.com/AFLplusplus/AFLplusplus/releases)
|
||||
|
||||
Github Version: 2.66d
|
||||
|
||||
includes all necessary/interesting changes from Google's afl 2.56b
|
||||
|
||||
Originally developed by Michal "lcamtuf" Zalewski.
|
||||
|
||||
Repository: [https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
afl++ is maintained by:
|
||||
* Marc "van Hauser" Heuse <mh@mh-sec.de>,
|
||||
* Heiko "hexcoder-" Eißfeldt <heiko.eissfeldt@hexco.de>,
|
||||
* Andrea Fioraldi <andreafioraldi@gmail.com> and
|
||||
* Dominik Maier <mail@dmnk.co>.
|
||||
|
||||
Note that although afl now has a Google afl repository [https://github.com/Google/afl](https://github.com/Google/afl),
|
||||
it is unlikely to receive any notable enhancements: [https://twitter.com/Dor3s/status/1154737061787660288](https://twitter.com/Dor3s/status/1154737061787660288)
|
||||
|
||||
## The enhancements compared to the original stock afl
|
||||
|
||||
Many improvements were made over the official afl release - which did not
|
||||
get any feature improvements since November 2017.
|
||||
|
||||
Among other changes afl++ has a more performant llvm_mode, supports
|
||||
llvm up to version 11, QEMU 3.1, more speed and crashfixes for QEMU,
|
||||
better *BSD and Android support and much, much more.
|
||||
|
||||
Additionally the following features and patches have been integrated:
|
||||
|
||||
* AFLfast's power schedules by Marcel Böhme: [https://github.com/mboehme/aflfast](https://github.com/mboehme/aflfast)
|
||||
|
||||
* The new excellent MOpt mutator: [https://github.com/puppet-meteor/MOpt-AFL](https://github.com/puppet-meteor/MOpt-AFL)
|
||||
|
||||
* InsTrim, a very effective CFG llvm_mode instrumentation implementation for large targets: [https://github.com/csienslab/instrim](https://github.com/csienslab/instrim)
|
||||
|
||||
* C. Holler's afl-fuzz Python mutator module and llvm_mode instrument file support: [https://github.com/choller/afl](https://github.com/choller/afl)
|
||||
|
||||
* Custom mutator by a library (instead of Python) by kyakdan
|
||||
|
||||
* Unicorn mode which allows fuzzing of binaries from completely different platforms (integration provided by domenukk)
|
||||
|
||||
* LAF-Intel or CompCov support for llvm_mode, qemu_mode and unicorn_mode
|
||||
|
||||
* NeverZero patch for afl-gcc, llvm_mode, qemu_mode and unicorn_mode which prevents a wrapping map value to zero, increases coverage
|
||||
|
||||
* Persistent mode and deferred forkserver for qemu_mode
|
||||
|
||||
* Win32 PE binary-only fuzzing with QEMU and Wine
|
||||
|
||||
* Radamsa mutator (as a custom mutator).
|
||||
|
||||
* QBDI mode to fuzz android native libraries via QBDI framework
|
||||
|
||||
* The new CmpLog instrumentation for LLVM and QEMU inspired by [Redqueen](https://www.syssec.ruhr-uni-bochum.de/media/emma/veroeffentlichungen/2018/12/17/NDSS19-Redqueen.pdf)
|
||||
|
||||
* LLVM mode Ngram coverage by Adrian Herrera [https://github.com/adrianherrera/afl-ngram-pass](https://github.com/adrianherrera/afl-ngram-pass)
|
||||
|
||||
A more thorough list is available in the [PATCHES](docs/PATCHES.md) file.
|
||||
|
||||
| Feature/Instrumentation | afl-gcc | llvm_mode | gcc_plugin | qemu_mode | unicorn_mode |
|
||||
| ----------------------- |:-------:|:---------:|:----------:|:----------------:|:------------:|
|
||||
| NeverZero | x | x(1) | (2) | x | x |
|
||||
| Persistent mode | | x | x | x86[_64]/arm[64] | x |
|
||||
| LAF-Intel / CompCov | | x | | x86[_64]/arm[64] | x86[_64]/arm |
|
||||
| CmpLog | | x | | x86[_64]/arm[64] | |
|
||||
| Instrument file list | | x | x | (x)(3) | |
|
||||
| Non-colliding coverage | | x(4) | | (x)(5) | |
|
||||
| InsTrim | | x | | | |
|
||||
| Ngram prev_loc coverage | | x(6) | | | |
|
||||
| Context coverage | | x | | | |
|
||||
| Snapshot LKM support | | x | | (x)(5) | |
|
||||
|
||||
neverZero:
|
||||
|
||||
(1) default for LLVM >= 9.0, env var for older version due an efficiency bug in llvm <= 8
|
||||
|
||||
(2) GCC creates non-performant code, hence it is disabled in gcc_plugin
|
||||
|
||||
(3) partially via AFL_CODE_START/AFL_CODE_END
|
||||
|
||||
(4) Only for LLVM >= 11 and not all targets compile
|
||||
|
||||
(5) upcoming, development in the branch
|
||||
|
||||
(6) not compatible with LTO instrumentation and needs at least LLVM >= 4.1
|
||||
|
||||
So all in all this is the best-of afl that is currently out there :-)
|
||||
|
||||
For new versions and additional information, check out:
|
||||
[https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
To compare notes with other users or get notified about major new features,
|
||||
send a mail to <afl-users+subscribe@googlegroups.com>.
|
||||
|
||||
See [docs/QuickStartGuide.md](docs/QuickStartGuide.md) if you don't have time to
|
||||
read this file.
|
||||
|
||||
## Branches
|
||||
|
||||
The following branches exist:
|
||||
|
||||
* [master/trunk](https://github.com/AFLplusplus/AFLplusplus/) : stable state of afl++ - it is synced from dev from time to
|
||||
time when we are satisfied with it's stability
|
||||
* [dev](https://github.com/AFLplusplus/AFLplusplus/tree/dev) : development state of afl++ - bleeding edge and you might catch a
|
||||
checkout which does not compile or has a bug. *We only accept PRs in dev!!*
|
||||
* (any other) : experimental branches to work on specific features or testing
|
||||
new functionality or changes.
|
||||
|
||||
For releases, please see the [Releases](https://github.com/AFLplusplus/AFLplusplus/releases) tab.
|
||||
|
||||
## Google Summer of Code 2020 (and any other students and enthusiast developers)
|
||||
|
||||
We are happy to be part of [Google Summer of Code 2020](https://summerofcode.withgoogle.com/organizations/5100744400699392/)! :-)
|
||||
|
||||
We have several ideas we would like to see in AFL++ to make it even better.
|
||||
However, we already work on so many things that we do not have the time for
|
||||
all the big ideas.
|
||||
|
||||
This can be your way to support and contribute to AFL++ - extend it to
|
||||
something cool.
|
||||
|
||||
We have an idea list in [docs/ideas.md](docs/ideas.md).
|
||||
|
||||
For everyone who wants to contribute (and send pull requests) please read
|
||||
[CONTRIBUTING.md](CONTRIBUTING.md) before your submit.
|
||||
|
||||
## Building and installing afl++
|
||||
|
||||
An easy way to install afl++ with everything compiled is available via docker:
|
||||
You can use the [Dockerfile](Dockerfile) (which has gcc-10 and clang-11 -
|
||||
hence afl-clang-lto is available!) or just pull directly from the docker hub:
|
||||
```shell
|
||||
docker pull aflplusplus/aflplusplus
|
||||
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
|
||||
```
|
||||
This container is automatically generated when a push to master happens.
|
||||
You will find your target source code in /src in the container.
|
||||
|
||||
If you want to build afl++ yourself you have many options.
|
||||
The easiest is to build and install everything:
|
||||
|
||||
```shell
|
||||
sudo apt install build-essential libtool-bin python3-dev automake flex bison libglib2.0-dev libpixman-1-dev clang python3-setuptools llvm
|
||||
make distrib
|
||||
sudo make install
|
||||
```
|
||||
It is recommended to install the newest available gcc and clang and llvm-dev
|
||||
possible in your distribution!
|
||||
|
||||
Note that "make distrib" also builds llvm_mode, qemu_mode, unicorn_mode and
|
||||
more. If you just want plain afl then do "make all", however compiling and
|
||||
using at least llvm_mode is highly recommended for much better results -
|
||||
hence in this case
|
||||
|
||||
```shell
|
||||
make source-only
|
||||
```
|
||||
is what you should choose.
|
||||
|
||||
These build targets exist:
|
||||
|
||||
* all: just the main afl++ binaries
|
||||
* binary-only: everything for binary-only fuzzing: qemu_mode, unicorn_mode, libdislocator, libtokencap
|
||||
* source-only: everything for source code fuzzing: llvm_mode, libdislocator, libtokencap
|
||||
* distrib: everything (for both binary-only and source code fuzzing)
|
||||
* man: creates simple man pages from the help option of the programs
|
||||
* install: installs everything you have compiled with the build options above
|
||||
* clean: cleans everything compiled, not downloads (unless not on a checkout)
|
||||
* deepclean: cleans everything including downloads
|
||||
* code-format: format the code, do this before you commit and send a PR please!
|
||||
* tests: runs test cases to ensure that all features are still working as they should
|
||||
* unit: perform unit tests (based on cmocka)
|
||||
* help: shows these build options
|
||||
|
||||
[Unless you are on Mac OS X](https://developer.apple.com/library/archive/qa/qa1118/_index.html) you can also build statically linked versions of the
|
||||
afl++ binaries by passing the STATIC=1 argument to make:
|
||||
|
||||
```shell
|
||||
make all STATIC=1
|
||||
```
|
||||
|
||||
These build options exist:
|
||||
|
||||
* STATIC - compile AFL++ static
|
||||
* ASAN_BUILD - compiles with memory sanitizer for debug purposes
|
||||
* PROFILING - compile with profiling information (gprof)
|
||||
* NO_PYTHON - disable python support
|
||||
* AFL_NO_X86 - if compiling on non-intel/amd platforms
|
||||
* LLVM_CONFIG - if your distro doesn't use the standard name for llvm-config (e.g. Debian)
|
||||
|
||||
e.g.: make ASAN_BUILD=1
|
||||
|
||||
## Challenges of guided fuzzing
|
||||
|
||||
Fuzzing is one of the most powerful and proven strategies for identifying
|
||||
security issues in real-world software; it is responsible for the vast
|
||||
majority of remote code execution and privilege escalation bugs found to date
|
||||
in security-critical software.
|
||||
|
||||
Unfortunately, fuzzing is also relatively shallow; blind, random mutations
|
||||
make it very unlikely to reach certain code paths in the tested code, leaving
|
||||
some vulnerabilities firmly outside the reach of this technique.
|
||||
|
||||
There have been numerous attempts to solve this problem. One of the early
|
||||
approaches - pioneered by Tavis Ormandy - is corpus distillation. The method
|
||||
relies on coverage signals to select a subset of interesting seeds from a
|
||||
massive, high-quality corpus of candidate files, and then fuzz them by
|
||||
traditional means. The approach works exceptionally well but requires such
|
||||
a corpus to be readily available. In addition, block coverage measurements
|
||||
provide only a very simplistic understanding of the program state and are less
|
||||
useful for guiding the fuzzing effort in the long haul.
|
||||
|
||||
Other, more sophisticated research has focused on techniques such as program
|
||||
flow analysis ("concolic execution"), symbolic execution, or static analysis.
|
||||
All these methods are extremely promising in experimental settings, but tend
|
||||
to suffer from reliability and performance problems in practical uses - and
|
||||
currently do not offer a viable alternative to "dumb" fuzzing techniques.
|
||||
|
||||
|
||||
## The afl-fuzz approach
|
||||
|
||||
American Fuzzy Lop is a brute-force fuzzer coupled with an exceedingly simple
|
||||
but rock-solid instrumentation-guided genetic algorithm. It uses a modified
|
||||
form of edge coverage to effortlessly pick up subtle, local-scale changes to
|
||||
program control flow.
|
||||
|
||||
Simplifying a bit, the overall algorithm can be summed up as:
|
||||
|
||||
1) Load user-supplied initial test cases into the queue,
|
||||
|
||||
2) Take the next input file from the queue,
|
||||
|
||||
3) Attempt to trim the test case to the smallest size that doesn't alter
|
||||
the measured behavior of the program,
|
||||
|
||||
4) Repeatedly mutate the file using a balanced and well-researched variety
|
||||
of traditional fuzzing strategies,
|
||||
|
||||
5) If any of the generated mutations resulted in a new state transition
|
||||
recorded by the instrumentation, add mutated output as a new entry in the
|
||||
queue.
|
||||
|
||||
6) Go to 2.
|
||||
|
||||
The discovered test cases are also periodically culled to eliminate ones that
|
||||
have been obsoleted by newer, higher-coverage finds; and undergo several other
|
||||
instrumentation-driven effort minimization steps.
|
||||
|
||||
As a side result of the fuzzing process, the tool creates a small,
|
||||
self-contained corpus of interesting test cases. These are extremely useful
|
||||
for seeding other, labor- or resource-intensive testing regimes - for example,
|
||||
for stress-testing browsers, office applications, graphics suites, or
|
||||
closed-source tools.
|
||||
|
||||
The fuzzer is thoroughly tested to deliver out-of-the-box performance far
|
||||
superior to blind fuzzing or coverage-only tools.
|
||||
|
||||
|
||||
## Instrumenting programs for use with AFL
|
||||
|
||||
PLEASE NOTE: llvm_mode compilation with afl-clang-fast/afl-clang-fast++
|
||||
instead of afl-gcc/afl-g++ is much faster and has many cool features.
|
||||
See llvm_mode/ - however few code does not compile with llvm.
|
||||
We support llvm versions 3.4 to 11.
|
||||
|
||||
When source code is available, instrumentation can be injected by a companion
|
||||
tool that works as a drop-in replacement for gcc or clang in any standard build
|
||||
process for third-party code.
|
||||
|
||||
The instrumentation has a fairly modest performance impact; in conjunction with
|
||||
other optimizations implemented by afl-fuzz, most programs can be fuzzed as fast
|
||||
or even faster than possible with traditional tools.
|
||||
|
||||
The correct way to recompile the target program may vary depending on the
|
||||
specifics of the build process, but a nearly-universal approach would be:
|
||||
|
||||
```shell
|
||||
CC=/path/to/afl/afl-gcc ./configure
|
||||
make clean all
|
||||
```
|
||||
|
||||
For C++ programs, you'd would also want to set `CXX=/path/to/afl/afl-g++`.
|
||||
|
||||
The clang wrappers (afl-clang and afl-clang++) can be used in the same way;
|
||||
clang users may also opt to leverage a higher-performance instrumentation mode,
|
||||
as described in [llvm_mode/README.md](llvm_mode/README.md).
|
||||
Clang/LLVM has a much better performance and works with LLVM version 3.4 to 11.
|
||||
|
||||
Using the LAF Intel performance enhancements are also recommended, see
|
||||
[llvm_mode/README.laf-intel.md](llvm_mode/README.laf-intel.md)
|
||||
|
||||
Using partial instrumentation is also recommended, see
|
||||
[llvm_mode/README.instrument_file.md](llvm_mode/README.instrument_file.md)
|
||||
|
||||
When testing libraries, you need to find or write a simple program that reads
|
||||
data from stdin or from a file and passes it to the tested library. In such a
|
||||
case, it is essential to link this executable against a static version of the
|
||||
instrumented library or to make sure that the correct .so file is loaded at
|
||||
runtime (usually by setting `LD_LIBRARY_PATH`). The simplest option is a static
|
||||
build, usually possible via:
|
||||
|
||||
```shell
|
||||
CC=/path/to/afl/afl-gcc ./configure --disable-shared
|
||||
```
|
||||
|
||||
Setting `AFL_HARDEN=1` when calling 'make' will cause the CC wrapper to
|
||||
automatically enable code hardening options that make it easier to detect
|
||||
simple memory bugs. Libdislocator, a helper library included with AFL (see
|
||||
[libdislocator/README.md](libdislocator/README.md)) can help uncover heap corruption issues, too.
|
||||
|
||||
PS. ASAN users are advised to review [docs/notes_for_asan.md](docs/notes_for_asan.md)
|
||||
file for important caveats.
|
||||
|
||||
|
||||
## Instrumenting binary-only apps
|
||||
|
||||
When source code is *NOT* available, the fuzzer offers experimental support for
|
||||
fast, on-the-fly instrumentation of black-box binaries. This is accomplished
|
||||
with a version of QEMU running in the lesser-known "user space emulation" mode.
|
||||
|
||||
QEMU is a project separate from AFL, but you can conveniently build the
|
||||
feature by doing:
|
||||
|
||||
```shell
|
||||
cd qemu_mode
|
||||
./build_qemu_support.sh
|
||||
```
|
||||
|
||||
For additional instructions and caveats, see [qemu_mode/README.md](qemu_mode/README.md).
|
||||
|
||||
If possible you should use the persistent mode, see [qemu_mode/README.persistent.md](qemu_mode/README.persistent.md).
|
||||
|
||||
The mode is approximately 2-5x slower than compile-time instrumentation, is
|
||||
less conducive to parallelization, and may have some other quirks.
|
||||
|
||||
If [afl-dyninst](https://github.com/vanhauser-thc/afl-dyninst) works for
|
||||
your binary, then you can use afl-fuzz normally and it will have twice
|
||||
the speed compared to qemu_mode.
|
||||
|
||||
A more comprehensive description of these and other options can be found in
|
||||
[docs/binaryonly_fuzzing.md](docs/binaryonly_fuzzing.md)
|
||||
|
||||
## Good examples and writeups
|
||||
|
||||
Here are some good writeups to show how to effectively use AFL++:
|
||||
|
||||
* [https://aflplus.plus/docs/tutorials/libxml2_tutorial/](https://aflplus.plus/docs/tutorials/libxml2_tutorial/)
|
||||
* [https://bananamafia.dev/post/gb-fuzz/](https://bananamafia.dev/post/gb-fuzz/)
|
||||
* [https://securitylab.github.com/research/fuzzing-challenges-solutions-1](https://securitylab.github.com/research/fuzzing-challenges-solutions-1)
|
||||
* [https://securitylab.github.com/research/fuzzing-sockets-FTP](https://securitylab.github.com/research/fuzzing-sockets-FTP)
|
||||
|
||||
If you are interested in fuzzing structured data (where you define what the
|
||||
structure is), these two links have you covered:
|
||||
* [https://github.com/bruce30262/libprotobuf-mutator_fuzzing_learning/tree/master/4_libprotobuf_aflpp_custom_mutator](https://github.com/bruce30262/libprotobuf-mutator_fuzzing_learning/tree/master/4_libprotobuf_aflpp_custom_mutator)
|
||||
* [https://github.com/thebabush/afl-libprotobuf-mutator](https://github.com/thebabush/afl-libprotobuf-mutator)
|
||||
|
||||
If you find other good ones, please send them to us :-)
|
||||
|
||||
## Power schedules
|
||||
|
||||
The power schedules were copied from Marcel Böhme's excellent AFLfast
|
||||
implementation and expand on the ability to discover new paths and
|
||||
therefore may increase the code coverage.
|
||||
|
||||
The available schedules are:
|
||||
|
||||
- explore (default, original AFL)
|
||||
- exploit (original AFL)
|
||||
- fast (AFLfast)
|
||||
- coe (AFLfast)
|
||||
- quad (AFLfast)
|
||||
- lin (AFLfast)
|
||||
- rare (afl++ experimental)
|
||||
- mmopt (afl++ experimental)
|
||||
- seek (afl++ experimental)
|
||||
|
||||
In parallel mode (-M/-S, several instances with the shared queue), we suggest to
|
||||
run the main node using the explore or fast schedule (-p explore) and the secondary
|
||||
nodes with a combination of cut-off-exponential (-p coe), exponential (-p fast),
|
||||
explore (-p explore) and mmopt (-p mmopt) schedules. If a schedule does
|
||||
not perform well for a target, restart the secondary nodes with a different schedule.
|
||||
|
||||
In single mode, using -p fast is usually slightly more beneficial than the
|
||||
default explore mode.
|
||||
(We don't want to change the default behavior of afl, so "fast" has not been
|
||||
made the default mode).
|
||||
|
||||
More details can be found in the paper published at the 23rd ACM Conference on
|
||||
Computer and Communications Security [CCS'16](https://www.sigsac.org/ccs/CCS2016/accepted-papers/)
|
||||
|
||||
## Choosing initial test cases
|
||||
|
||||
To operate correctly, the fuzzer requires one or more starting file that
|
||||
contains a good example of the input data normally expected by the targeted
|
||||
application. There are two basic rules:
|
||||
|
||||
- Keep the files small. Under 1 kB is ideal, although not strictly necessary.
|
||||
For a discussion of why size matters, see [perf_tips.md](docs/perf_tips.md).
|
||||
|
||||
- Use multiple test cases only if they are functionally different from
|
||||
each other. There is no point in using fifty different vacation photos
|
||||
to fuzz an image library.
|
||||
|
||||
You can find many good examples of starting files in the testcases/ subdirectory
|
||||
that comes with this tool.
|
||||
|
||||
PS. If a large corpus of data is available for screening, you may want to use
|
||||
the afl-cmin utility to identify a subset of functionally distinct files that
|
||||
exercise different code paths in the target binary.
|
||||
|
||||
|
||||
## Fuzzing binaries
|
||||
|
||||
The fuzzing process itself is carried out by the afl-fuzz utility. This program
|
||||
requires a read-only directory with initial test cases, a separate place to
|
||||
store its findings, plus a path to the binary to test.
|
||||
|
||||
For target binaries that accept input directly from stdin, the usual syntax is:
|
||||
|
||||
```shell
|
||||
./afl-fuzz -i testcase_dir -o findings_dir /path/to/program [...params...]
|
||||
```
|
||||
|
||||
For programs that take input from a file, use '@@' to mark the location in
|
||||
the target's command line where the input file name should be placed. The
|
||||
fuzzer will substitute this for you:
|
||||
|
||||
```shell
|
||||
./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@
|
||||
```
|
||||
|
||||
You can also use the -f option to have the mutated data written to a specific
|
||||
file. This is useful if the program expects a particular file extension or so.
|
||||
|
||||
Non-instrumented binaries can be fuzzed in the QEMU mode (add -Q in the command
|
||||
line) or in a traditional, blind-fuzzer mode (specify -n).
|
||||
|
||||
You can use -t and -m to override the default timeout and memory limit for the
|
||||
executed process; rare examples of targets that may need these settings touched
|
||||
include compilers and video decoders.
|
||||
|
||||
Tips for optimizing fuzzing performance are discussed in [perf_tips.md](docs/perf_tips.md).
|
||||
|
||||
Note that afl-fuzz starts by performing an array of deterministic fuzzing
|
||||
steps, which can take several days, but tend to produce neat test cases. If you
|
||||
want quick & dirty results right away - akin to zzuf and other traditional
|
||||
fuzzers - add the -d option to the command line.
|
||||
|
||||
## Interpreting output
|
||||
|
||||
See the [docs/status_screen.md](docs/status_screen.md) file for information on
|
||||
how to interpret the displayed stats and monitor the health of the process. Be
|
||||
sure to consult this file especially if any UI elements are highlighted in red.
|
||||
|
||||
The fuzzing process will continue until you press Ctrl-C. At a minimum, you want
|
||||
to allow the fuzzer to complete one queue cycle, which may take anywhere from a
|
||||
couple of hours to a week or so.
|
||||
|
||||
There are three subdirectories created within the output directory and updated
|
||||
in real-time:
|
||||
|
||||
- queue/ - test cases for every distinctive execution path, plus all the
|
||||
starting files given by the user. This is the synthesized corpus
|
||||
mentioned in section 2.
|
||||
|
||||
Before using this corpus for any other purposes, you can shrink
|
||||
it to a smaller size using the afl-cmin tool. The tool will find
|
||||
a smaller subset of files offering equivalent edge coverage.
|
||||
|
||||
- crashes/ - unique test cases that cause the tested program to receive a
|
||||
fatal signal (e.g., SIGSEGV, SIGILL, SIGABRT). The entries are
|
||||
grouped by the received signal.
|
||||
|
||||
- hangs/ - unique test cases that cause the tested program to time out. The
|
||||
default time limit before something is classified as a hang is
|
||||
the larger of 1 second and the value of the -t parameter.
|
||||
The value can be fine-tuned by setting AFL_HANG_TMOUT, but this
|
||||
is rarely necessary.
|
||||
|
||||
Crashes and hangs are considered "unique" if the associated execution paths
|
||||
involve any state transitions not seen in previously-recorded faults. If a
|
||||
single bug can be reached in multiple ways, there will be some count inflation
|
||||
early in the process, but this should quickly taper off.
|
||||
|
||||
The file names for crashes and hangs are correlated with the parent, non-faulting
|
||||
queue entries. This should help with debugging.
|
||||
|
||||
When you can't reproduce a crash found by afl-fuzz, the most likely cause is
|
||||
that you are not setting the same memory limit as used by the tool. Try:
|
||||
|
||||
```shell
|
||||
LIMIT_MB=50
|
||||
( ulimit -Sv $[LIMIT_MB << 10]; /path/to/tested_binary ... )
|
||||
```
|
||||
|
||||
Change LIMIT_MB to match the -m parameter passed to afl-fuzz. On OpenBSD,
|
||||
also change -Sv to -Sd.
|
||||
|
||||
Any existing output directory can be also used to resume aborted jobs; try:
|
||||
|
||||
```shell
|
||||
./afl-fuzz -i- -o existing_output_dir [...etc...]
|
||||
```
|
||||
|
||||
If you have gnuplot installed, you can also generate some pretty graphs for any
|
||||
active fuzzing task using afl-plot. For an example of how this looks like,
|
||||
see [http://lcamtuf.coredump.cx/afl/plot/](http://lcamtuf.coredump.cx/afl/plot/).
|
||||
|
||||
## Parallelized fuzzing
|
||||
|
||||
Every instance of afl-fuzz takes up roughly one core. This means that on
|
||||
multi-core systems, parallelization is necessary to fully utilize the hardware.
|
||||
For tips on how to fuzz a common target on multiple cores or multiple networked
|
||||
machines, please refer to [docs/parallel_fuzzing.md](docs/parallel_fuzzing.md).
|
||||
|
||||
The parallel fuzzing mode also offers a simple way for interfacing AFL to other
|
||||
fuzzers, to symbolic or concolic execution engines, and so forth; again, see the
|
||||
last section of [docs/parallel_fuzzing.md](docs/parallel_fuzzing.md) for tips.
|
||||
|
||||
## Fuzzer dictionaries
|
||||
|
||||
By default, afl-fuzz mutation engine is optimized for compact data formats -
|
||||
say, images, multimedia, compressed data, regular expression syntax, or shell
|
||||
scripts. It is somewhat less suited for languages with particularly verbose and
|
||||
redundant verbiage - notably including HTML, SQL, or JavaScript.
|
||||
|
||||
To avoid the hassle of building syntax-aware tools, afl-fuzz provides a way to
|
||||
seed the fuzzing process with an optional dictionary of language keywords,
|
||||
magic headers, or other special tokens associated with the targeted data type
|
||||
-- and use that to reconstruct the underlying grammar on the go:
|
||||
|
||||
[http://lcamtuf.blogspot.com/2015/01/afl-fuzz-making-up-grammar-with.html](http://lcamtuf.blogspot.com/2015/01/afl-fuzz-making-up-grammar-with.html)
|
||||
|
||||
To use this feature, you first need to create a dictionary in one of the two
|
||||
formats discussed in [dictionaries/README.md](dictionaries/README.md);
|
||||
and then point the fuzzer to it via the -x option in the command line.
|
||||
|
||||
(Several common dictionaries are already provided in that subdirectory, too.)
|
||||
|
||||
There is no way to provide more structured descriptions of the underlying
|
||||
syntax, but the fuzzer will likely figure out some of this based on the
|
||||
instrumentation feedback alone. This actually works in practice, say:
|
||||
|
||||
[http://lcamtuf.blogspot.com/2015/04/finding-bugs-in-sqlite-easy-way.html](http://lcamtuf.blogspot.com/2015/04/finding-bugs-in-sqlite-easy-way.html)
|
||||
|
||||
PS. Even when no explicit dictionary is given, afl-fuzz will try to extract
|
||||
existing syntax tokens in the input corpus by watching the instrumentation
|
||||
very closely during deterministic byte flips. This works for some types of
|
||||
parsers and grammars but isn't nearly as good as the -x mode.
|
||||
|
||||
If a dictionary is really hard to come by, another option is to let AFL run
|
||||
for a while and then use the token capture library that comes as a companion
|
||||
utility with AFL. For that, see [libtokencap/README.md](libtokencap/README.tokencap.md).
|
||||
|
||||
## Crash triage
|
||||
|
||||
The coverage-based grouping of crashes usually produces a small data set that
|
||||
can be quickly triaged manually or with a very simple GDB or Valgrind script.
|
||||
Every crash is also traceable to its parent non-crashing test case in the
|
||||
queue, making it easier to diagnose faults.
|
||||
|
||||
Having said that, it's important to acknowledge that some fuzzing crashes can be
|
||||
difficult to quickly evaluate for exploitability without a lot of debugging and
|
||||
code analysis work. To assist with this task, afl-fuzz supports a very unique
|
||||
"crash exploration" mode enabled with the -C flag.
|
||||
|
||||
In this mode, the fuzzer takes one or more crashing test cases as the input
|
||||
and uses its feedback-driven fuzzing strategies to very quickly enumerate all
|
||||
code paths that can be reached in the program while keeping it in the
|
||||
crashing state.
|
||||
|
||||
Mutations that do not result in a crash are rejected; so are any changes that
|
||||
do not affect the execution path.
|
||||
|
||||
The output is a small corpus of files that can be very rapidly examined to see
|
||||
what degree of control the attacker has over the faulting address, or whether
|
||||
it is possible to get past an initial out-of-bounds read - and see what lies
|
||||
beneath.
|
||||
|
||||
Oh, one more thing: for test case minimization, give afl-tmin a try. The tool
|
||||
can be operated in a very simple way:
|
||||
|
||||
```shell
|
||||
./afl-tmin -i test_case -o minimized_result -- /path/to/program [...]
|
||||
```
|
||||
|
||||
The tool works with crashing and non-crashing test cases alike. In the crash
|
||||
mode, it will happily accept instrumented and non-instrumented binaries. In the
|
||||
non-crashing mode, the minimizer relies on standard AFL instrumentation to make
|
||||
the file simpler without altering the execution path.
|
||||
|
||||
The minimizer accepts the -m, -t, -f and @@ syntax in a manner compatible with
|
||||
afl-fuzz.
|
||||
|
||||
Another recent addition to AFL is the afl-analyze tool. It takes an input
|
||||
file, attempts to sequentially flip bytes, and observes the behavior of the
|
||||
tested program. It then color-codes the input based on which sections appear to
|
||||
be critical, and which are not; while not bulletproof, it can often offer quick
|
||||
insights into complex file formats. More info about its operation can be found
|
||||
near the end of [docs/technical_details.md](docs/technical_details.md).
|
||||
|
||||
## Going beyond crashes
|
||||
|
||||
Fuzzing is a wonderful and underutilized technique for discovering non-crashing
|
||||
design and implementation errors, too. Quite a few interesting bugs have been
|
||||
found by modifying the target programs to call abort() when say:
|
||||
|
||||
- Two bignum libraries produce different outputs when given the same
|
||||
fuzzer-generated input,
|
||||
|
||||
- An image library produces different outputs when asked to decode the same
|
||||
input image several times in a row,
|
||||
|
||||
- A serialization / deserialization library fails to produce stable outputs
|
||||
when iteratively serializing and deserializing fuzzer-supplied data,
|
||||
|
||||
- A compression library produces an output inconsistent with the input file
|
||||
when asked to compress and then decompress a particular blob.
|
||||
|
||||
Implementing these or similar sanity checks usually takes very little time;
|
||||
if you are the maintainer of a particular package, you can make this code
|
||||
conditional with `#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION` (a flag also
|
||||
shared with libfuzzer) or `#ifdef __AFL_COMPILER` (this one is just for AFL).
|
||||
|
||||
## Common-sense risks
|
||||
|
||||
Please keep in mind that, similarly to many other computationally-intensive
|
||||
tasks, fuzzing may put a strain on your hardware and on the OS. In particular:
|
||||
|
||||
- Your CPU will run hot and will need adequate cooling. In most cases, if
|
||||
cooling is insufficient or stops working properly, CPU speeds will be
|
||||
automatically throttled. That said, especially when fuzzing on less
|
||||
suitable hardware (laptops, smartphones, etc), it's not entirely impossible
|
||||
for something to blow up.
|
||||
|
||||
- Targeted programs may end up erratically grabbing gigabytes of memory or
|
||||
filling up disk space with junk files. AFL tries to enforce basic memory
|
||||
limits, but can't prevent each and every possible mishap. The bottom line
|
||||
is that you shouldn't be fuzzing on systems where the prospect of data loss
|
||||
is not an acceptable risk.
|
||||
|
||||
- Fuzzing involves billions of reads and writes to the filesystem. On modern
|
||||
systems, this will be usually heavily cached, resulting in fairly modest
|
||||
"physical" I/O - but there are many factors that may alter this equation.
|
||||
It is your responsibility to monitor for potential trouble; with very heavy
|
||||
I/O, the lifespan of many HDDs and SSDs may be reduced.
|
||||
|
||||
A good way to monitor disk I/O on Linux is the 'iostat' command:
|
||||
|
||||
```shell
|
||||
$ iostat -d 3 -x -k [...optional disk ID...]
|
||||
```
|
||||
|
||||
## Known limitations & areas for improvement
|
||||
|
||||
Here are some of the most important caveats for AFL:
|
||||
|
||||
- AFL detects faults by checking for the first spawned process dying due to
|
||||
a signal (SIGSEGV, SIGABRT, etc). Programs that install custom handlers for
|
||||
these signals may need to have the relevant code commented out. In the same
|
||||
vein, faults in child processes spawned by the fuzzed target may evade
|
||||
detection unless you manually add some code to catch that.
|
||||
|
||||
- As with any other brute-force tool, the fuzzer offers limited coverage if
|
||||
encryption, checksums, cryptographic signatures, or compression are used to
|
||||
wholly wrap the actual data format to be tested.
|
||||
|
||||
To work around this, you can comment out the relevant checks (see
|
||||
examples/libpng_no_checksum/ for inspiration); if this is not possible,
|
||||
you can also write a postprocessor, one of the hooks of custom mutators.
|
||||
See [docs/custom_mutators.md](docs/custom_mutators.md) on how to use
|
||||
`AFL_CUSTOM_MUTATOR_LIBRARY`
|
||||
|
||||
- There are some unfortunate trade-offs with ASAN and 64-bit binaries. This
|
||||
isn't due to any specific fault of afl-fuzz; see [docs/notes_for_asan.md](docs/notes_for_asan.md)
|
||||
for tips.
|
||||
|
||||
- There is no direct support for fuzzing network services, background
|
||||
daemons, or interactive apps that require UI interaction to work. You may
|
||||
need to make simple code changes to make them behave in a more traditional
|
||||
way. Preeny may offer a relatively simple option, too - see:
|
||||
[https://github.com/zardus/preeny](https://github.com/zardus/preeny)
|
||||
|
||||
Some useful tips for modifying network-based services can be also found at:
|
||||
[https://www.fastly.com/blog/how-to-fuzz-server-american-fuzzy-lop](https://www.fastly.com/blog/how-to-fuzz-server-american-fuzzy-lop)
|
||||
|
||||
- AFL doesn't output human-readable coverage data. If you want to monitor
|
||||
coverage, use afl-cov from Michael Rash: [https://github.com/mrash/afl-cov](https://github.com/mrash/afl-cov)
|
||||
|
||||
- Occasionally, sentient machines rise against their creators. If this
|
||||
happens to you, please consult [http://lcamtuf.coredump.cx/prep/](http://lcamtuf.coredump.cx/prep/).
|
||||
|
||||
Beyond this, see INSTALL for platform-specific tips.
|
||||
|
||||
## Special thanks
|
||||
|
||||
Many of the improvements to the original afl and afl++ wouldn't be possible
|
||||
without feedback, bug reports, or patches from:
|
||||
|
||||
```
|
||||
Jann Horn Hanno Boeck
|
||||
Felix Groebert Jakub Wilk
|
||||
Richard W. M. Jones Alexander Cherepanov
|
||||
Tom Ritter Hovik Manucharyan
|
||||
Sebastian Roschke Eberhard Mattes
|
||||
Padraig Brady Ben Laurie
|
||||
@dronesec Luca Barbato
|
||||
Tobias Ospelt Thomas Jarosch
|
||||
Martin Carpenter Mudge Zatko
|
||||
Joe Zbiciak Ryan Govostes
|
||||
Michael Rash William Robinet
|
||||
Jonathan Gray Filipe Cabecinhas
|
||||
Nico Weber Jodie Cunningham
|
||||
Andrew Griffiths Parker Thompson
|
||||
Jonathan Neuschaefer Tyler Nighswander
|
||||
Ben Nagy Samir Aguiar
|
||||
Aidan Thornton Aleksandar Nikolich
|
||||
Sam Hakim Laszlo Szekeres
|
||||
David A. Wheeler Turo Lamminen
|
||||
Andreas Stieger Richard Godbee
|
||||
Louis Dassy teor2345
|
||||
Alex Moneger Dmitry Vyukov
|
||||
Keegan McAllister Kostya Serebryany
|
||||
Richo Healey Martijn Bogaard
|
||||
rc0r Jonathan Foote
|
||||
Christian Holler Dominique Pelle
|
||||
Jacek Wielemborek Leo Barnes
|
||||
Jeremy Barnes Jeff Trull
|
||||
Guillaume Endignoux ilovezfs
|
||||
Daniel Godas-Lopez Franjo Ivancic
|
||||
Austin Seipp Daniel Komaromy
|
||||
Daniel Binderman Jonathan Metzman
|
||||
Vegard Nossum Jan Kneschke
|
||||
Kurt Roeckx Marcel Boehme
|
||||
Van-Thuan Pham Abhik Roychoudhury
|
||||
Joshua J. Drake Toby Hutton
|
||||
Rene Freingruber Sergey Davidoff
|
||||
Sami Liedes Craig Young
|
||||
Andrzej Jackowski Daniel Hodson
|
||||
Nathan Voss Dominik Maier
|
||||
Andrea Biondo Vincent Le Garrec
|
||||
Khaled Yakdan Kuang-che Wu
|
||||
Josephine Calliotte Konrad Welc
|
||||
```
|
||||
|
||||
Thank you!
|
||||
(For people sending pull requests - please add yourself to this list :-)
|
||||
|
||||
## Contact
|
||||
|
||||
Questions? Concerns? Bug reports? The contributors can be reached via
|
||||
[https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
There is also a mailing list for the afl project; to join, send a mail to
|
||||
<afl-users+subscribe@googlegroups.com>. Or, if you prefer to browse
|
||||
archives first, try: [https://groups.google.com/group/afl-users](https://groups.google.com/group/afl-users)
|
32
TODO.md
Normal file
32
TODO.md
Normal file
@ -0,0 +1,32 @@
|
||||
# TODO list for AFL++
|
||||
|
||||
## Roadmap 2.66+
|
||||
|
||||
- AFL_MAP_SIZE for qemu_mode and unicorn_mode
|
||||
- namespace for targets? e.g. network
|
||||
- learn from honggfuzz (mutations, maybe ptrace?)
|
||||
- CPU affinity for many cores? There seems to be an issue > 96 cores
|
||||
|
||||
## Further down the road
|
||||
|
||||
afl-fuzz:
|
||||
- ascii_only mode for mutation output - or use a custom mutator for this?
|
||||
- setting min_len/max_len/start_offset/end_offset limits for mutation output
|
||||
|
||||
llvm_mode:
|
||||
- LTO - imitate sancov
|
||||
|
||||
gcc_plugin:
|
||||
- (wait for submission then decide)
|
||||
- laf-intel
|
||||
- better instrumentation (seems to be better with gcc-9+)
|
||||
|
||||
qemu_mode:
|
||||
- update to 5.x (if the performance bug if gone)
|
||||
- non colliding instrumentation
|
||||
- rename qemu specific envs to AFL_QEMU (AFL_ENTRYPOINT, AFL_CODE_START/END,
|
||||
AFL_COMPCOV_LEVEL?)
|
||||
- add AFL_QEMU_EXITPOINT (maybe multiple?), maybe pointless as we have
|
||||
persistent mode
|
||||
- add/implement AFL_QEMU_INST_LIBLIST and AFL_QEMU_NOINST_PROGRAM
|
||||
- add/implement AFL_QEMU_INST_REGIONS as a list of _START/_END addresses
|
1073
afl-analyze.c
1073
afl-analyze.c
File diff suppressed because it is too large
Load Diff
894
afl-cmin
894
afl-cmin
@ -1,461 +1,509 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env sh
|
||||
export AFL_QUIET=1
|
||||
export ASAN_OPTIONS=detect_leaks=0
|
||||
THISPATH=`dirname ${0}`
|
||||
export PATH="${THISPATH}:$PATH"
|
||||
awk -f - -- ${@+"$@"} <<'EOF'
|
||||
#!/usr/bin/awk -f
|
||||
|
||||
# awk script to minimize a test corpus of input files
|
||||
#
|
||||
# american fuzzy lop - corpus minimization tool
|
||||
# ---------------------------------------------
|
||||
# based on afl-cmin bash script written by Michal Zalewski
|
||||
# rewritten by Heiko Eißfeldt (hexcoder-)
|
||||
# tested with:
|
||||
# gnu awk (x86 Linux)
|
||||
# bsd awk (x86 *BSD)
|
||||
# mawk (arm32 raspbian)
|
||||
#
|
||||
# Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
#
|
||||
# Copyright 2014, 2015 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# This tool tries to find the smallest subset of files in the input directory
|
||||
# that still trigger the full range of instrumentation data points seen in
|
||||
# the starting corpus. This has two uses:
|
||||
#
|
||||
# - Screening large corpora of input files before using them as a seed for
|
||||
# afl-fuzz. The tool will remove functionally redundant files and likely
|
||||
# leave you with a much smaller set.
|
||||
#
|
||||
# (In this case, you probably also want to consider running afl-tmin on
|
||||
# the individual files later on to reduce their size.)
|
||||
#
|
||||
# - Minimizing the corpus generated organically by afl-fuzz, perhaps when
|
||||
# planning to feed it to more resource-intensive tools. The tool achieves
|
||||
# this by removing all entries that used to trigger unique behaviors in the
|
||||
# past, but have been made obsolete by later finds.
|
||||
#
|
||||
# Note that the tool doesn't modify the files themselves. For that, you want
|
||||
# afl-tmin.
|
||||
#
|
||||
# This script must use bash because other shells may have hardcoded limits on
|
||||
# array sizes.
|
||||
# uses getopt.awk package from Arnold Robbins
|
||||
#
|
||||
# external tools used by this script:
|
||||
# test
|
||||
# grep
|
||||
# rm
|
||||
# mkdir
|
||||
# ln
|
||||
# cp
|
||||
# pwd
|
||||
# type
|
||||
# cd
|
||||
# find
|
||||
# stat
|
||||
# sort
|
||||
# cut
|
||||
# and afl-showmap from this project :-)
|
||||
|
||||
echo "corpus minimization tool for afl-fuzz by <lcamtuf@google.com>"
|
||||
echo
|
||||
# getopt.awk --- Do C library getopt(3) function in awk
|
||||
|
||||
#########
|
||||
# SETUP #
|
||||
#########
|
||||
# External variables:
|
||||
# Optind -- index in ARGV of first nonoption argument
|
||||
# Optarg -- string value of argument to current option
|
||||
# Opterr -- if nonzero, print our own diagnostic
|
||||
# Optopt -- current option letter
|
||||
|
||||
# Process command-line options...
|
||||
# Returns:
|
||||
# -1 at end of options
|
||||
# "?" for unrecognized option
|
||||
# <c> a character representing the current option
|
||||
|
||||
MEM_LIMIT=100
|
||||
TIMEOUT=none
|
||||
# Private Data:
|
||||
# _opti -- index in multiflag option, e.g., -abc
|
||||
|
||||
unset IN_DIR OUT_DIR STDIN_FILE EXTRA_PAR MEM_LIMIT_GIVEN \
|
||||
AFL_CMIN_CRASHES_ONLY AFL_CMIN_ALLOW_ANY QEMU_MODE
|
||||
function getopt(argc, argv, options, thisopt, i)
|
||||
{
|
||||
if (length(options) == 0) # no options given
|
||||
return -1
|
||||
|
||||
while getopts "+i:o:f:m:t:eQC" opt; do
|
||||
if (argv[Optind] == "--") { # all done
|
||||
Optind++
|
||||
_opti = 0
|
||||
return -1
|
||||
} else if (argv[Optind] !~ /^-[^:\t ]/) {
|
||||
_opti = 0
|
||||
return -1
|
||||
}
|
||||
if (_opti == 0)
|
||||
_opti = 2
|
||||
thisopt = substr(argv[Optind], _opti, 1)
|
||||
Optopt = thisopt
|
||||
i = index(options, thisopt)
|
||||
if (i == 0) {
|
||||
if (Opterr)
|
||||
printf("%c -- invalid option\n", thisopt) > "/dev/stderr"
|
||||
if (_opti >= length(argv[Optind])) {
|
||||
Optind++
|
||||
_opti = 0
|
||||
} else
|
||||
_opti++
|
||||
return "?"
|
||||
}
|
||||
if (substr(options, i + 1, 1) == ":") {
|
||||
# get option argument
|
||||
if (length(substr(argv[Optind], _opti + 1)) > 0)
|
||||
Optarg = substr(argv[Optind], _opti + 1)
|
||||
else
|
||||
Optarg = argv[++Optind]
|
||||
_opti = 0
|
||||
} else
|
||||
Optarg = ""
|
||||
if (_opti == 0 || _opti >= length(argv[Optind])) {
|
||||
Optind++
|
||||
_opti = 0
|
||||
} else
|
||||
_opti++
|
||||
return thisopt
|
||||
}
|
||||
|
||||
case "$opt" in
|
||||
function usage() {
|
||||
print \
|
||||
"afl-cmin [ options ] -- /path/to/target_app [ ... ]\n" \
|
||||
"\n" \
|
||||
"Required parameters:\n" \
|
||||
" -i dir - input directory with starting corpus\n" \
|
||||
" -o dir - output directory for minimized files\n" \
|
||||
"\n" \
|
||||
"Execution control settings:\n" \
|
||||
" -f file - location read by the fuzzed program (stdin)\n" \
|
||||
" -m megs - memory limit for child process ("mem_limit" MB)\n" \
|
||||
" -t msec - run time limit for child process (none)\n" \
|
||||
" -Q - use binary-only instrumentation (QEMU mode)\n" \
|
||||
" -U - use unicorn-based instrumentation (unicorn mode)\n" \
|
||||
"\n" \
|
||||
"Minimization settings:\n" \
|
||||
" -C - keep crashing inputs, reject everything else\n" \
|
||||
" -e - solve for edge coverage only, ignore hit counts\n" \
|
||||
"\n" \
|
||||
"For additional tips, please consult docs/README.md\n" \
|
||||
"\n" \
|
||||
"Environment variables used:\n" \
|
||||
"AFL_KEEP_TRACES: leave the temporary <out_dir>/.traces directory\n" \
|
||||
"AFL_PATH: path for the afl-showmap binary\n" \
|
||||
"AFL_SKIP_BIN_CHECK: skip check for target binary\n" \
|
||||
"AFL_ALLOW_TMP: allow unsafe use of input/output directories under {/var}/tmp\n"
|
||||
exit 1
|
||||
}
|
||||
|
||||
"i")
|
||||
IN_DIR="$OPTARG"
|
||||
;;
|
||||
function exists_and_is_executable(binarypath) {
|
||||
return 0 == system("test -f "binarypath" -a -x "binarypath)
|
||||
}
|
||||
|
||||
"o")
|
||||
OUT_DIR="$OPTARG"
|
||||
;;
|
||||
"f")
|
||||
STDIN_FILE="$OPTARG"
|
||||
;;
|
||||
"m")
|
||||
MEM_LIMIT="$OPTARG"
|
||||
MEM_LIMIT_GIVEN=1
|
||||
;;
|
||||
"t")
|
||||
TIMEOUT="$OPTARG"
|
||||
;;
|
||||
"e")
|
||||
EXTRA_PAR="$EXTRA_PAR -e"
|
||||
;;
|
||||
"C")
|
||||
export AFL_CMIN_CRASHES_ONLY=1
|
||||
;;
|
||||
"Q")
|
||||
EXTRA_PAR="$EXTRA_PAR -Q"
|
||||
test "$MEM_LIMIT_GIVEN" = "" && MEM_LIMIT=250
|
||||
QEMU_MODE=1
|
||||
;;
|
||||
"?")
|
||||
exit 1
|
||||
;;
|
||||
BEGIN {
|
||||
print "corpus minimization tool for afl++ (awk version)\n"
|
||||
|
||||
esac
|
||||
# defaults
|
||||
extra_par = ""
|
||||
# process options
|
||||
Opterr = 1 # default is to diagnose
|
||||
Optind = 1 # skip ARGV[0]
|
||||
while ((_go_c = getopt(ARGC, ARGV, "hi:o:f:m:t:eCQU?")) != -1) {
|
||||
if (_go_c == "i") {
|
||||
if (!Optarg) usage()
|
||||
if (in_dir) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
in_dir = Optarg
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "o") {
|
||||
if (!Optarg) usage()
|
||||
if (out_dir) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
out_dir = Optarg
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "f") {
|
||||
if (!Optarg) usage()
|
||||
if (stdin_file) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
stdin_file = Optarg
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "m") {
|
||||
if (!Optarg) usage()
|
||||
if (mem_limit) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
mem_limit = Optarg
|
||||
mem_limit_given = 1
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "t") {
|
||||
if (!Optarg) usage()
|
||||
if (timeout) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
timeout = Optarg
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "C") {
|
||||
ENVIRON["AFL_CMIN_CRASHES_ONLY"] = 1
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "e") {
|
||||
extra_par = extra_par " -e"
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "Q") {
|
||||
if (qemu_mode) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
extra_par = extra_par " -Q"
|
||||
if ( !mem_limit_given ) mem_limit = "250"
|
||||
qemu_mode = 1
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "U") {
|
||||
if (unicorn_mode) { print "Option "_go_c" is only allowed once" > "/dev/stderr"}
|
||||
extra_par = extra_par " -U"
|
||||
if ( !mem_limit_given ) mem_limit = "250"
|
||||
unicorn_mode = 1
|
||||
continue
|
||||
} else
|
||||
if (_go_c == "?") {
|
||||
exit 1
|
||||
} else
|
||||
usage()
|
||||
} # while options
|
||||
|
||||
done
|
||||
if (!mem_limit) mem_limit = 200
|
||||
if (!timeout) timeout = "none"
|
||||
|
||||
shift $((OPTIND-1))
|
||||
# get program args
|
||||
i = 0
|
||||
prog_args_string = ""
|
||||
for (; Optind < ARGC; Optind++) {
|
||||
prog_args[i++] = ARGV[Optind]
|
||||
if (i > 1)
|
||||
prog_args_string = prog_args_string" "ARGV[Optind]
|
||||
}
|
||||
|
||||
TARGET_BIN="$1"
|
||||
# sanity checks
|
||||
if (!prog_args[0] || !in_dir || !out_dir) usage()
|
||||
|
||||
if [ "$TARGET_BIN" = "" -o "$IN_DIR" = "" -o "$OUT_DIR" = "" ]; then
|
||||
target_bin = prog_args[0]
|
||||
|
||||
cat 1>&2 <<_EOF_
|
||||
Usage: $0 [ options ] -- /path/to/target_app [ ... ]
|
||||
# Do a sanity check to discourage the use of /tmp, since we can't really
|
||||
# handle this safely from an awk script.
|
||||
|
||||
Required parameters:
|
||||
if (!ENVIRON["AFL_ALLOW_TMP"]) {
|
||||
dirlist[0] = in_dir
|
||||
dirlist[1] = target_bin
|
||||
dirlist[2] = out_dir
|
||||
dirlist[3] = stdin_file
|
||||
"pwd" | getline dirlist[4] # current directory
|
||||
for (dirind in dirlist) {
|
||||
dir = dirlist[dirind]
|
||||
|
||||
-i dir - input directory with the starting corpus
|
||||
-o dir - output directory for minimized files
|
||||
if (dir ~ /^(\/var)?\/tmp/) {
|
||||
print "[-] Error: do not use this script in /tmp or /var/tmp." > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
delete dirlist
|
||||
}
|
||||
|
||||
Execution control settings:
|
||||
# If @@ is specified, but there's no -f, let's come up with a temporary input
|
||||
# file name.
|
||||
|
||||
-f file - location read by the fuzzed program (stdin)
|
||||
-m megs - memory limit for child process ($MEM_LIMIT MB)
|
||||
-t msec - run time limit for child process (none)
|
||||
-Q - use binary-only instrumentation (QEMU mode)
|
||||
trace_dir = out_dir "/.traces"
|
||||
|
||||
Minimization settings:
|
||||
if (!stdin_file) {
|
||||
found_atat = 0
|
||||
for (prog_args_ind in prog_args) {
|
||||
if ("@@" == prog_args[prog_args_ind]) {
|
||||
found_atat = 1
|
||||
break
|
||||
}
|
||||
}
|
||||
if (found_atat) {
|
||||
stdin_file = trace_dir "/.cur_input"
|
||||
}
|
||||
}
|
||||
|
||||
-C - keep crashing inputs, reject everything else
|
||||
-e - solve for edge coverage only, ignore hit counts
|
||||
# Check for obvious errors.
|
||||
|
||||
For additional tips, please consult docs/README.
|
||||
|
||||
_EOF_
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Do a sanity check to discourage the use of /tmp, since we can't really
|
||||
# handle this safely from a shell script.
|
||||
|
||||
if [ "$AFL_ALLOW_TMP" = "" ]; then
|
||||
|
||||
echo "$IN_DIR" | grep -qE '^(/var)?/tmp/'
|
||||
T1="$?"
|
||||
|
||||
echo "$TARGET_BIN" | grep -qE '^(/var)?/tmp/'
|
||||
T2="$?"
|
||||
|
||||
echo "$OUT_DIR" | grep -qE '^(/var)?/tmp/'
|
||||
T3="$?"
|
||||
|
||||
echo "$STDIN_FILE" | grep -qE '^(/var)?/tmp/'
|
||||
T4="$?"
|
||||
|
||||
echo "$PWD" | grep -qE '^(/var)?/tmp/'
|
||||
T5="$?"
|
||||
|
||||
if [ "$T1" = "0" -o "$T2" = "0" -o "$T3" = "0" -o "$T4" = "0" -o "$T5" = "0" ]; then
|
||||
echo "[-] Error: do not use this script in /tmp or /var/tmp." 1>&2
|
||||
if (mem_limit && mem_limit != "none" && mem_limit < 5) {
|
||||
print "[-] Error: dangerously low memory limit." > "/dev/stderr"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
# If @@ is specified, but there's no -f, let's come up with a temporary input
|
||||
# file name.
|
||||
|
||||
TRACE_DIR="$OUT_DIR/.traces"
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
if echo "$*" | grep -qF '@@'; then
|
||||
STDIN_FILE="$TRACE_DIR/.cur_input"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Check for obvious errors.
|
||||
|
||||
if [ ! "$MEM_LIMIT" = "none" ]; then
|
||||
|
||||
if [ "$MEM_LIMIT" -lt "5" ]; then
|
||||
echo "[-] Error: dangerously low memory limit." 1>&2
|
||||
if (timeout && timeout != "none" && timeout < 10) {
|
||||
print "[-] Error: dangerously low timeout." > "/dev/stderr"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fi
|
||||
if (target_bin && !exists_and_is_executable(target_bin)) {
|
||||
|
||||
if [ ! "$TIMEOUT" = "none" ]; then
|
||||
"command -v "target_bin" 2>/dev/null" | getline tnew
|
||||
if (!tnew || !exists_and_is_executable(tnew)) {
|
||||
print "[-] Error: binary '"target_bin"' not found or not executable." > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
target_bin = tnew
|
||||
}
|
||||
|
||||
if [ "$TIMEOUT" -lt "10" ]; then
|
||||
echo "[-] Error: dangerously low timeout." 1>&2
|
||||
if (!ENVIRON["AFL_SKIP_BIN_CHECK"] && !qemu_mode && !unicorn_mode) {
|
||||
if (0 != system( "grep -q __AFL_SHM_ID "target_bin )) {
|
||||
print "[-] Error: binary '"target_bin"' doesn't appear to be instrumented." > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
if (0 != system( "test -d "in_dir )) {
|
||||
print "[-] Error: directory '"in_dir"' not found." > "/dev/stderr"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fi
|
||||
if (0 == system( "test -d "in_dir"/queue" )) {
|
||||
in_dir = in_dir "/queue"
|
||||
}
|
||||
|
||||
if [ ! -f "$TARGET_BIN" -o ! -x "$TARGET_BIN" ]; then
|
||||
system("rm -rf "trace_dir" 2>/dev/null");
|
||||
system("rm "out_dir"/id[:_]* 2>/dev/null")
|
||||
|
||||
TNEW="`which "$TARGET_BIN" 2>/dev/null`"
|
||||
|
||||
if [ ! -f "$TNEW" -o ! -x "$TNEW" ]; then
|
||||
echo "[-] Error: binary '$TARGET_BIN' not found or not executable." 1>&2
|
||||
"ls "out_dir"/* 2>/dev/null | wc -l" | getline noofentries
|
||||
if (0 == system( "test -d "out_dir" -a "noofentries" -gt 0" )) {
|
||||
print "[-] Error: directory '"out_dir"' exists and is not empty - delete it first." > "/dev/stderr"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
TARGET_BIN="$TNEW"
|
||||
|
||||
fi
|
||||
|
||||
if [ "$AFL_SKIP_BIN_CHECK" = "" -a "$QEMU_MODE" = "" ]; then
|
||||
|
||||
if ! grep -qF "__AFL_SHM_ID" "$TARGET_BIN"; then
|
||||
echo "[-] Error: binary '$TARGET_BIN' doesn't appear to be instrumented." 1>&2
|
||||
# Check for the more efficient way to copy files...
|
||||
if (0 != system("mkdir -p -m 0700 "trace_dir)) {
|
||||
print "[-] Error: Cannot create directory "trace_dir > "/dev/stderr"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ ! -d "$IN_DIR" ]; then
|
||||
echo "[-] Error: directory '$IN_DIR' not found." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test -d "$IN_DIR/queue" && IN_DIR="$IN_DIR/queue"
|
||||
|
||||
find "$OUT_DIR" -name 'id[:_]*' -maxdepth 1 -exec rm -- {} \; 2>/dev/null
|
||||
rm -rf "$TRACE_DIR" 2>/dev/null
|
||||
|
||||
rmdir "$OUT_DIR" 2>/dev/null
|
||||
|
||||
if [ -d "$OUT_DIR" ]; then
|
||||
echo "[-] Error: directory '$OUT_DIR' exists and is not empty - delete it first." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -m 700 -p "$TRACE_DIR" || exit 1
|
||||
|
||||
if [ ! "$STDIN_FILE" = "" ]; then
|
||||
rm -f "$STDIN_FILE" || exit 1
|
||||
touch "$STDIN_FILE" || exit 1
|
||||
fi
|
||||
|
||||
if [ "$AFL_PATH" = "" ]; then
|
||||
SHOWMAP="${0%/afl-cmin}/afl-showmap"
|
||||
else
|
||||
SHOWMAP="$AFL_PATH/afl-showmap"
|
||||
fi
|
||||
|
||||
if [ ! -x "$SHOWMAP" ]; then
|
||||
echo "[-] Error: can't find 'afl-showmap' - please set AFL_PATH." 1>&2
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IN_COUNT=$((`ls -- "$IN_DIR" 2>/dev/null | wc -l`))
|
||||
|
||||
if [ "$IN_COUNT" = "0" ]; then
|
||||
echo "[+] Hmm, no inputs in the target directory. Nothing to be done."
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FIRST_FILE=`ls "$IN_DIR" | head -1`
|
||||
|
||||
# Make sure that we're not dealing with a directory.
|
||||
|
||||
if [ -d "$IN_DIR/$FIRST_FILE" ]; then
|
||||
echo "[-] Error: The target directory contains subdirectories - please fix." 1>&2
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for the more efficient way to copy files...
|
||||
|
||||
if ln "$IN_DIR/$FIRST_FILE" "$TRACE_DIR/.link_test" 2>/dev/null; then
|
||||
CP_TOOL=ln
|
||||
else
|
||||
CP_TOOL=cp
|
||||
fi
|
||||
|
||||
# Make sure that we can actually get anything out of afl-showmap before we
|
||||
# waste too much time.
|
||||
|
||||
echo "[*] Testing the target binary..."
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
AFL_CMIN_ALLOW_ANY=1 "$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/.run_test" -Z $EXTRA_PAR -- "$@" <"$IN_DIR/$FIRST_FILE"
|
||||
|
||||
else
|
||||
|
||||
cp "$IN_DIR/$FIRST_FILE" "$STDIN_FILE"
|
||||
AFL_CMIN_ALLOW_ANY=1 "$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/.run_test" -Z $EXTRA_PAR -A "$STDIN_FILE" -- "$@" </dev/null
|
||||
|
||||
fi
|
||||
|
||||
FIRST_COUNT=$((`grep -c . "$TRACE_DIR/.run_test"`))
|
||||
|
||||
if [ "$FIRST_COUNT" -gt "0" ]; then
|
||||
|
||||
echo "[+] OK, $FIRST_COUNT tuples recorded."
|
||||
|
||||
else
|
||||
|
||||
echo "[-] Error: no instrumentation output detected (perhaps crash or timeout)." 1>&2
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# Let's roll!
|
||||
|
||||
#############################
|
||||
# STEP 1: COLLECTING TRACES #
|
||||
#############################
|
||||
|
||||
echo "[*] Obtaining traces for input files in '$IN_DIR'..."
|
||||
|
||||
(
|
||||
|
||||
CUR=0
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
"$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/$fn" -Z $EXTRA_PAR -- "$@" <"$IN_DIR/$fn"
|
||||
|
||||
done < <(ls "$IN_DIR")
|
||||
|
||||
else
|
||||
|
||||
while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
cp "$IN_DIR/$fn" "$STDIN_FILE"
|
||||
|
||||
"$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/$fn" -Z $EXTRA_PAR -A "$STDIN_FILE" -- "$@" </dev/null
|
||||
|
||||
done < <(ls "$IN_DIR")
|
||||
|
||||
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
echo
|
||||
|
||||
##########################
|
||||
# STEP 2: SORTING TUPLES #
|
||||
##########################
|
||||
|
||||
# With this out of the way, we sort all tuples by popularity across all
|
||||
# datasets. The reasoning here is that we won't be able to avoid the files
|
||||
# that trigger unique tuples anyway, so we will want to start with them and
|
||||
# see what's left.
|
||||
|
||||
echo "[*] Sorting trace sets (this may take a while)..."
|
||||
|
||||
ls "$IN_DIR" | sed "s#^#$TRACE_DIR/#" | tr '\n' '\0' | xargs -0 -n 1 cat | \
|
||||
sort | uniq -c | sort -k 1,1 -n >"$TRACE_DIR/.all_uniq"
|
||||
|
||||
TUPLE_COUNT=$((`grep -c . "$TRACE_DIR/.all_uniq"`))
|
||||
|
||||
echo "[+] Found $TUPLE_COUNT unique tuples across $IN_COUNT files."
|
||||
|
||||
#####################################
|
||||
# STEP 3: SELECTING CANDIDATE FILES #
|
||||
#####################################
|
||||
|
||||
# The next step is to find the best candidate for each tuple. The "best"
|
||||
# part is understood simply as the smallest input that includes a particular
|
||||
# tuple in its trace. Empirical evidence suggests that this produces smaller
|
||||
# datasets than more involved algorithms that could be still pulled off in
|
||||
# a shell script.
|
||||
|
||||
echo "[*] Finding best candidates for each tuple..."
|
||||
|
||||
CUR=0
|
||||
|
||||
while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
sed "s#\$# $fn#" "$TRACE_DIR/$fn" >>"$TRACE_DIR/.candidate_list"
|
||||
|
||||
done < <(ls -rS "$IN_DIR")
|
||||
|
||||
echo
|
||||
|
||||
##############################
|
||||
# STEP 4: LOADING CANDIDATES #
|
||||
##############################
|
||||
|
||||
# At this point, we have a file of tuple-file pairs, sorted by file size
|
||||
# in ascending order (as a consequence of ls -rS). By doing sort keyed
|
||||
# only by tuple (-k 1,1) and configured to output only the first line for
|
||||
# every key (-s -u), we end up with the smallest file for each tuple.
|
||||
|
||||
echo "[*] Sorting candidate list (be patient)..."
|
||||
|
||||
sort -k1,1 -s -u "$TRACE_DIR/.candidate_list" | \
|
||||
sed 's/^/BEST_FILE[/;s/ /]="/;s/$/"/' >"$TRACE_DIR/.candidate_script"
|
||||
|
||||
if [ ! -s "$TRACE_DIR/.candidate_script" ]; then
|
||||
echo "[-] Error: no traces obtained from test cases, check syntax!" 1>&2
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# The sed command converted the sorted list to a shell script that populates
|
||||
# BEST_FILE[tuple]="fname". Let's load that!
|
||||
|
||||
. "$TRACE_DIR/.candidate_script"
|
||||
|
||||
##########################
|
||||
# STEP 5: WRITING OUTPUT #
|
||||
##########################
|
||||
|
||||
# The final trick is to grab the top pick for each tuple, unless said tuple is
|
||||
# already set due to the inclusion of an earlier candidate; and then put all
|
||||
# tuples associated with the newly-added file to the "already have" list. The
|
||||
# loop works from least popular tuples and toward the most common ones.
|
||||
|
||||
echo "[*] Processing candidates and writing output files..."
|
||||
|
||||
CUR=0
|
||||
|
||||
touch "$TRACE_DIR/.already_have"
|
||||
|
||||
while read -r cnt tuple; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing tuple $CUR/$TUPLE_COUNT... "
|
||||
|
||||
# If we already have this tuple, skip it.
|
||||
|
||||
grep -q "^$tuple\$" "$TRACE_DIR/.already_have" && continue
|
||||
|
||||
FN=${BEST_FILE[tuple]}
|
||||
|
||||
$CP_TOOL "$IN_DIR/$FN" "$OUT_DIR/$FN"
|
||||
|
||||
if [ "$((CUR % 5))" = "0" ]; then
|
||||
sort -u "$TRACE_DIR/$FN" "$TRACE_DIR/.already_have" >"$TRACE_DIR/.tmp"
|
||||
mv -f "$TRACE_DIR/.tmp" "$TRACE_DIR/.already_have"
|
||||
else
|
||||
cat "$TRACE_DIR/$FN" >>"$TRACE_DIR/.already_have"
|
||||
fi
|
||||
|
||||
done <"$TRACE_DIR/.all_uniq"
|
||||
|
||||
echo
|
||||
|
||||
OUT_COUNT=`ls -- "$OUT_DIR" | wc -l`
|
||||
|
||||
if [ "$OUT_COUNT" = "1" ]; then
|
||||
echo "[!] WARNING: All test cases had the same traces, check syntax!"
|
||||
fi
|
||||
|
||||
echo "[+] Narrowed down to $OUT_COUNT files, saved in '$OUT_DIR'."
|
||||
echo
|
||||
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
if (stdin_file) {
|
||||
# truncate input file
|
||||
printf "" > stdin_file
|
||||
close( stdin_file )
|
||||
}
|
||||
|
||||
if (!ENVIRON["AFL_PATH"]) {
|
||||
if (0 == system("test -f afl-cmin")) {
|
||||
showmap = "./afl-showmap"
|
||||
} else {
|
||||
"command -v afl-showmap 2>/dev/null" | getline showmap
|
||||
}
|
||||
} else {
|
||||
showmap = ENVIRON["AFL_PATH"] "/afl-showmap"
|
||||
}
|
||||
|
||||
if (!showmap || 0 != system("test -x "showmap )) {
|
||||
print "[-] Error: can't find 'afl-showmap' - please set AFL_PATH." > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# get list of input filenames sorted by size
|
||||
i = 0
|
||||
# yuck, gnu stat is option incompatible to bsd stat
|
||||
# we use a heuristic to differentiate between
|
||||
# GNU stat and other stats
|
||||
"stat --version 2>/dev/null" | getline statversion
|
||||
if (statversion ~ /GNU coreutils/) {
|
||||
stat_format = "-c '%s %n'" # GNU
|
||||
} else {
|
||||
stat_format = "-f '%z %N'" # *BSD, MacOS
|
||||
}
|
||||
cmdline = "cd "in_dir" && find . \\( ! -name . -a -type d -prune \\) -o -type f -exec stat "stat_format" \\{\\} \\; | sort -k1n -k2r"
|
||||
cmdline = "ls "in_dir" | (cd "in_dir" && xargs stat "stat_format") | sort -k1n -k2r"
|
||||
while (cmdline | getline) {
|
||||
sub(/^[0-9]+ (\.\/)?/,"",$0)
|
||||
infilesSmallToBig[i++] = $0
|
||||
}
|
||||
in_count = i
|
||||
|
||||
first_file = infilesSmallToBig[0]
|
||||
|
||||
# Make sure that we're not dealing with a directory.
|
||||
|
||||
if (0 == system("test -d "in_dir"/"first_file)) {
|
||||
print "[-] Error: The input directory contains subdirectories - please fix." > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (0 == system("ln "in_dir"/"first_file" "trace_dir"/.link_test")) {
|
||||
cp_tool = "ln"
|
||||
} else {
|
||||
cp_tool = "cp"
|
||||
}
|
||||
|
||||
# Make sure that we can actually get anything out of afl-showmap before we
|
||||
# waste too much time.
|
||||
|
||||
print "[*] Testing the target binary..."
|
||||
|
||||
if (!stdin_file) {
|
||||
system( "AFL_CMIN_ALLOW_ANY=1 \""showmap"\" -m "mem_limit" -t "timeout" -o \""trace_dir"/.run_test\" -Z "extra_par" -- \""target_bin"\" "prog_args_string" <\""in_dir"/"first_file"\"")
|
||||
} else {
|
||||
system("cp "in_dir"/"first_file" "stdin_file)
|
||||
system( "AFL_CMIN_ALLOW_ANY=1 \""showmap"\" -m "mem_limit" -t "timeout" -o \""trace_dir"/.run_test\" -Z "extra_par" -A \""stdin_file"\" -- \""target_bin"\" "prog_args_string" </dev/null")
|
||||
}
|
||||
|
||||
first_count = 0
|
||||
|
||||
runtest = trace_dir"/.run_test"
|
||||
while ((getline < runtest) > 0) {
|
||||
++first_count
|
||||
}
|
||||
|
||||
if (first_count) {
|
||||
print "[+] OK, "first_count" tuples recorded."
|
||||
} else {
|
||||
print "[-] Error: no instrumentation output detected (perhaps crash or timeout)." > "/dev/stderr"
|
||||
if (!ENVIRON["AFL_KEEP_TRACES"]) {
|
||||
system("rm -rf "trace_dir" 2>/dev/null")
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Let's roll!
|
||||
|
||||
#############################
|
||||
# STEP 1: Collecting traces #
|
||||
#############################
|
||||
|
||||
print "[*] Obtaining traces for "in_count" input files in '"in_dir"'."
|
||||
|
||||
cur = 0;
|
||||
if (!stdin_file) {
|
||||
print " Processing "in_count" files (forkserver mode)..."
|
||||
retval = system( "AFL_CMIN_ALLOW_ANY=1 \""showmap"\" -m "mem_limit" -t "timeout" -o \""trace_dir"\" -Z "extra_par" -i \""in_dir"\" -- \""target_bin"\" "prog_args_string)
|
||||
} else {
|
||||
print " Processing "in_count" files (forkserver mode)..."
|
||||
retval = system( "AFL_CMIN_ALLOW_ANY=1 \""showmap"\" -m "mem_limit" -t "timeout" -o \""trace_dir"\" -Z "extra_par" -i \""in_dir"\" -- \""target_bin"\" "prog_args_string" </dev/null")
|
||||
}
|
||||
|
||||
if (retval) {
|
||||
print "[!]Exit code != 0 received from afl-showmap, terminating..."
|
||||
|
||||
if (!ENVIRON["AFL_KEEP_TRACES"]) {
|
||||
system("rm -rf "trace_dir" 2>/dev/null")
|
||||
system("rmdir "out_dir)
|
||||
}
|
||||
exit retval
|
||||
}
|
||||
|
||||
#######################################################
|
||||
# STEP 2: register smallest input file for each tuple #
|
||||
# STEP 3: copy that file (at most once) #
|
||||
#######################################################
|
||||
|
||||
print "[*] Processing traces for input files in '"in_dir"'."
|
||||
|
||||
cur = 0
|
||||
out_count = 0
|
||||
tuple_count = 0
|
||||
|
||||
# from rare to frequent new tuples
|
||||
# get the best (smallest) file for it
|
||||
# and copy it
|
||||
while (cur < in_count) {
|
||||
fn = infilesSmallToBig[cur]
|
||||
++cur
|
||||
printf "\r Processing file "cur"/"in_count
|
||||
# create path for the trace file from afl-showmap
|
||||
tracefile_path = trace_dir"/"fn
|
||||
# gather all keys, and count them
|
||||
while ((getline line < tracefile_path) > 0) {
|
||||
key = line
|
||||
if (!(key in key_count)) {
|
||||
++tuple_count
|
||||
}
|
||||
++key_count[key]
|
||||
if (! (key in best_file)) {
|
||||
# this is the best file for this key
|
||||
best_file[key] = fn
|
||||
#printf "BEST_FILE[%d]=\"%s\"\n",key,fn | "sort -t'[' -k2 > "trace_dir"/.candidate_script"
|
||||
}
|
||||
#printf "%d %s\n",key,fn > trace_dir"/.candidate_list"
|
||||
}
|
||||
close(tracefile_path)
|
||||
}
|
||||
print ""
|
||||
|
||||
# sort keys
|
||||
sortedKeys = trace_dir"/.all_uniq"
|
||||
sortKeysCmd = "sort -k1n > "sortedKeys
|
||||
for (key in key_count) {
|
||||
printf "%7d %s\n",key_count[key],key | sortKeysCmd
|
||||
}
|
||||
close(sortKeysCmd)
|
||||
|
||||
# iterate over keys from rare to frequent and
|
||||
# copy best file
|
||||
while ((getline < sortedKeys) > 0) {
|
||||
|
||||
# split
|
||||
nrFields = split($0, field, / +/)
|
||||
#print nrFields" Felder: '"field[0]"', '"field[1]"', '"field[2]"', '"field[3]"'"
|
||||
key = field[nrFields]
|
||||
|
||||
++tcnt;
|
||||
printf "\r Processing tuple "tcnt"/"tuple_count" with count "key_count[key]"..."
|
||||
if (key in keyAlreadyKnown) {
|
||||
continue
|
||||
}
|
||||
|
||||
fn = best_file[key]
|
||||
# gather all tuples from the best file for this key
|
||||
tracedfn = trace_dir"/"fn
|
||||
while ((getline < tracedfn) > 0) {
|
||||
keyAlreadyKnown[$0] = ""
|
||||
}
|
||||
close(tracedfn)
|
||||
|
||||
# copy file unless already done
|
||||
if (! (fn in file_already_copied)) {
|
||||
system(cp_tool" "in_dir"/"fn" "out_dir"/"fn)
|
||||
file_already_copied[fn] = ""
|
||||
++out_count
|
||||
#printf "tuple nr %d (%d cnt=%d) -> %s\n",tcnt,key,key_count[key],fn > trace_dir"/.log"
|
||||
}
|
||||
}
|
||||
close(sortedKeys)
|
||||
print ""
|
||||
print "[+] Found "tuple_count" unique tuples across "in_count" files."
|
||||
|
||||
if (out_count == 1) {
|
||||
print "[!] WARNING: All test cases had the same traces, check syntax!"
|
||||
}
|
||||
print "[+] Narrowed down to "out_count" files, saved in '"out_dir"'."
|
||||
|
||||
if (!ENVIRON["AFL_KEEP_TRACES"]) {
|
||||
system("rm -rf "trace_dir" 2>/dev/null")
|
||||
}
|
||||
|
||||
exit 0
|
||||
}
|
||||
EOF
|
||||
|
477
afl-cmin.bash
Executable file
477
afl-cmin.bash
Executable file
@ -0,0 +1,477 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# american fuzzy lop++ - corpus minimization tool
|
||||
# ---------------------------------------------
|
||||
#
|
||||
# Originally written by Michal Zalewski
|
||||
#
|
||||
# Copyright 2014, 2015 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# This tool tries to find the smallest subset of files in the input directory
|
||||
# that still trigger the full range of instrumentation data points seen in
|
||||
# the starting corpus. This has two uses:
|
||||
#
|
||||
# - Screening large corpora of input files before using them as a seed for
|
||||
# afl-fuzz. The tool will remove functionally redundant files and likely
|
||||
# leave you with a much smaller set.
|
||||
#
|
||||
# (In this case, you probably also want to consider running afl-tmin on
|
||||
# the individual files later on to reduce their size.)
|
||||
#
|
||||
# - Minimizing the corpus generated organically by afl-fuzz, perhaps when
|
||||
# planning to feed it to more resource-intensive tools. The tool achieves
|
||||
# this by removing all entries that used to trigger unique behaviors in the
|
||||
# past, but have been made obsolete by later finds.
|
||||
#
|
||||
# Note that the tool doesn't modify the files themselves. For that, you want
|
||||
# afl-tmin.
|
||||
#
|
||||
# This script must use bash because other shells may have hardcoded limits on
|
||||
# array sizes.
|
||||
#
|
||||
|
||||
echo "corpus minimization tool for afl-fuzz by Michal Zalewski"
|
||||
echo
|
||||
|
||||
#########
|
||||
# SETUP #
|
||||
#########
|
||||
|
||||
# Process command-line options...
|
||||
|
||||
MEM_LIMIT=200
|
||||
TIMEOUT=none
|
||||
|
||||
unset IN_DIR OUT_DIR STDIN_FILE EXTRA_PAR MEM_LIMIT_GIVEN \
|
||||
AFL_CMIN_CRASHES_ONLY AFL_CMIN_ALLOW_ANY QEMU_MODE UNICORN_MODE
|
||||
|
||||
export AFL_QUIET=1
|
||||
|
||||
while getopts "+i:o:f:m:t:eQUCh" opt; do
|
||||
|
||||
case "$opt" in
|
||||
|
||||
"h")
|
||||
;;
|
||||
|
||||
"i")
|
||||
IN_DIR="$OPTARG"
|
||||
;;
|
||||
|
||||
"o")
|
||||
OUT_DIR="$OPTARG"
|
||||
;;
|
||||
"f")
|
||||
STDIN_FILE="$OPTARG"
|
||||
;;
|
||||
"m")
|
||||
MEM_LIMIT="$OPTARG"
|
||||
MEM_LIMIT_GIVEN=1
|
||||
;;
|
||||
"t")
|
||||
TIMEOUT="$OPTARG"
|
||||
;;
|
||||
"e")
|
||||
EXTRA_PAR="$EXTRA_PAR -e"
|
||||
;;
|
||||
"C")
|
||||
export AFL_CMIN_CRASHES_ONLY=1
|
||||
;;
|
||||
"Q")
|
||||
EXTRA_PAR="$EXTRA_PAR -Q"
|
||||
test "$MEM_LIMIT_GIVEN" = "" && MEM_LIMIT=250
|
||||
QEMU_MODE=1
|
||||
;;
|
||||
"U")
|
||||
EXTRA_PAR="$EXTRA_PAR -U"
|
||||
test "$MEM_LIMIT_GIVEN" = "" && MEM_LIMIT=250
|
||||
UNICORN_MODE=1
|
||||
;;
|
||||
"?")
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
TARGET_BIN="$1"
|
||||
|
||||
if [ "$TARGET_BIN" = "" -o "$IN_DIR" = "" -o "$OUT_DIR" = "" ]; then
|
||||
|
||||
cat 1>&2 <<_EOF_
|
||||
Usage: $0 [ options ] -- /path/to/target_app [ ... ]
|
||||
|
||||
Required parameters:
|
||||
|
||||
-i dir - input directory with the starting corpus
|
||||
-o dir - output directory for minimized files
|
||||
|
||||
Execution control settings:
|
||||
|
||||
-f file - location read by the fuzzed program (stdin)
|
||||
-m megs - memory limit for child process ($MEM_LIMIT MB)
|
||||
-t msec - run time limit for child process (none)
|
||||
-Q - use binary-only instrumentation (QEMU mode)
|
||||
-U - use unicorn-based instrumentation (Unicorn mode)
|
||||
|
||||
Minimization settings:
|
||||
|
||||
-C - keep crashing inputs, reject everything else
|
||||
-e - solve for edge coverage only, ignore hit counts
|
||||
|
||||
For additional tips, please consult docs/README.md.
|
||||
|
||||
Environment variables used:
|
||||
AFL_KEEP_TRACES: leave the temporary <out_dir>\.traces directory
|
||||
AFL_PATH: path for the afl-showmap binary
|
||||
AFL_SKIP_BIN_CHECK: skip check for target binary
|
||||
_EOF_
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Do a sanity check to discourage the use of /tmp, since we can't really
|
||||
# handle this safely from a shell script.
|
||||
|
||||
#if [ "$AFL_ALLOW_TMP" = "" ]; then
|
||||
#
|
||||
# echo "$IN_DIR" | grep -qE '^(/var)?/tmp/'
|
||||
# T1="$?"
|
||||
#
|
||||
# echo "$TARGET_BIN" | grep -qE '^(/var)?/tmp/'
|
||||
# T2="$?"
|
||||
#
|
||||
# echo "$OUT_DIR" | grep -qE '^(/var)?/tmp/'
|
||||
# T3="$?"
|
||||
#
|
||||
# echo "$STDIN_FILE" | grep -qE '^(/var)?/tmp/'
|
||||
# T4="$?"
|
||||
#
|
||||
# echo "$PWD" | grep -qE '^(/var)?/tmp/'
|
||||
# T5="$?"
|
||||
#
|
||||
# if [ "$T1" = "0" -o "$T2" = "0" -o "$T3" = "0" -o "$T4" = "0" -o "$T5" = "0" ]; then
|
||||
# echo "[-] Error: do not use this script in /tmp or /var/tmp." 1>&2
|
||||
# exit 1
|
||||
# fi
|
||||
#
|
||||
#fi
|
||||
|
||||
# If @@ is specified, but there's no -f, let's come up with a temporary input
|
||||
# file name.
|
||||
|
||||
TRACE_DIR="$OUT_DIR/.traces"
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
if echo "$*" | grep -qF '@@'; then
|
||||
STDIN_FILE="$TRACE_DIR/.cur_input"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Check for obvious errors.
|
||||
|
||||
if [ ! "$MEM_LIMIT" = "none" ]; then
|
||||
|
||||
if [ "$MEM_LIMIT" -lt "5" ]; then
|
||||
echo "[-] Error: dangerously low memory limit." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ ! "$TIMEOUT" = "none" ]; then
|
||||
|
||||
if [ "$TIMEOUT" -lt "10" ]; then
|
||||
echo "[-] Error: dangerously low timeout." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ ! -f "$TARGET_BIN" -o ! -x "$TARGET_BIN" ]; then
|
||||
|
||||
TNEW="`which "$TARGET_BIN" 2>/dev/null`"
|
||||
|
||||
if [ ! -f "$TNEW" -o ! -x "$TNEW" ]; then
|
||||
echo "[-] Error: binary '$TARGET_BIN' not found or not executable." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TARGET_BIN="$TNEW"
|
||||
|
||||
fi
|
||||
|
||||
if [ "$AFL_SKIP_BIN_CHECK" = "" -a "$QEMU_MODE" = "" -a "$UNICORN_MODE" = "" ]; then
|
||||
|
||||
if ! grep -qF "__AFL_SHM_ID" "$TARGET_BIN"; then
|
||||
echo "[-] Error: binary '$TARGET_BIN' doesn't appear to be instrumented." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ ! -d "$IN_DIR" ]; then
|
||||
echo "[-] Error: directory '$IN_DIR' not found." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test -d "$IN_DIR/queue" && IN_DIR="$IN_DIR/queue"
|
||||
|
||||
find "$OUT_DIR" -name 'id[:_]*' -maxdepth 1 -exec rm -- {} \; 2>/dev/null
|
||||
rm -rf "$TRACE_DIR" 2>/dev/null
|
||||
|
||||
rmdir "$OUT_DIR" 2>/dev/null
|
||||
|
||||
if [ -d "$OUT_DIR" ]; then
|
||||
echo "[-] Error: directory '$OUT_DIR' exists and is not empty - delete it first." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -m 700 -p "$TRACE_DIR" || exit 1
|
||||
|
||||
if [ ! "$STDIN_FILE" = "" ]; then
|
||||
rm -f "$STDIN_FILE" || exit 1
|
||||
touch "$STDIN_FILE" || exit 1
|
||||
fi
|
||||
|
||||
if [ "$AFL_PATH" = "" ]; then
|
||||
SHOWMAP="${0%/afl-cmin.bash}/afl-showmap"
|
||||
else
|
||||
SHOWMAP="$AFL_PATH/afl-showmap"
|
||||
fi
|
||||
|
||||
if [ ! -x "$SHOWMAP" ]; then
|
||||
echo "[-] Error: can't find 'afl-showmap' - please set AFL_PATH." 1>&2
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IN_COUNT=$((`ls -- "$IN_DIR" 2>/dev/null | wc -l`))
|
||||
|
||||
if [ "$IN_COUNT" = "0" ]; then
|
||||
echo "[+] Hmm, no inputs in the target directory. Nothing to be done."
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FIRST_FILE=`ls "$IN_DIR" | head -1`
|
||||
|
||||
# Make sure that we're not dealing with a directory.
|
||||
|
||||
if [ -d "$IN_DIR/$FIRST_FILE" ]; then
|
||||
echo "[-] Error: The target directory contains subdirectories - please fix." 1>&2
|
||||
rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for the more efficient way to copy files...
|
||||
|
||||
if ln "$IN_DIR/$FIRST_FILE" "$TRACE_DIR/.link_test" 2>/dev/null; then
|
||||
CP_TOOL=ln
|
||||
else
|
||||
CP_TOOL=cp
|
||||
fi
|
||||
|
||||
# Make sure that we can actually get anything out of afl-showmap before we
|
||||
# waste too much time.
|
||||
|
||||
echo "[*] Testing the target binary..."
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
AFL_CMIN_ALLOW_ANY=1 "$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/.run_test" -Z $EXTRA_PAR -- "$@" <"$IN_DIR/$FIRST_FILE"
|
||||
|
||||
else
|
||||
|
||||
cp "$IN_DIR/$FIRST_FILE" "$STDIN_FILE"
|
||||
AFL_CMIN_ALLOW_ANY=1 "$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/.run_test" -Z $EXTRA_PAR -A "$STDIN_FILE" -- "$@" </dev/null
|
||||
|
||||
fi
|
||||
|
||||
FIRST_COUNT=$((`grep -c . "$TRACE_DIR/.run_test"`))
|
||||
|
||||
if [ "$FIRST_COUNT" -gt "0" ]; then
|
||||
|
||||
echo "[+] OK, $FIRST_COUNT tuples recorded."
|
||||
|
||||
else
|
||||
|
||||
echo "[-] Error: no instrumentation output detected (perhaps crash or timeout)." 1>&2
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# Let's roll!
|
||||
|
||||
#############################
|
||||
# STEP 1: COLLECTING TRACES #
|
||||
#############################
|
||||
|
||||
echo "[*] Obtaining traces for input files in '$IN_DIR'..."
|
||||
|
||||
(
|
||||
|
||||
CUR=0
|
||||
|
||||
if [ "$STDIN_FILE" = "" ]; then
|
||||
|
||||
ls "$IN_DIR" | while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
"$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/$fn" -Z $EXTRA_PAR -- "$@" <"$IN_DIR/$fn"
|
||||
|
||||
done
|
||||
|
||||
else
|
||||
|
||||
ls "$IN_DIR" | while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
cp "$IN_DIR/$fn" "$STDIN_FILE"
|
||||
|
||||
"$SHOWMAP" -m "$MEM_LIMIT" -t "$TIMEOUT" -o "$TRACE_DIR/$fn" -Z $EXTRA_PAR -A "$STDIN_FILE" -- "$@" </dev/null
|
||||
|
||||
done
|
||||
|
||||
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
echo
|
||||
|
||||
##########################
|
||||
# STEP 2: SORTING TUPLES #
|
||||
##########################
|
||||
|
||||
# With this out of the way, we sort all tuples by popularity across all
|
||||
# datasets. The reasoning here is that we won't be able to avoid the files
|
||||
# that trigger unique tuples anyway, so we will want to start with them and
|
||||
# see what's left.
|
||||
|
||||
echo "[*] Sorting trace sets (this may take a while)..."
|
||||
|
||||
ls "$IN_DIR" | sed "s#^#$TRACE_DIR/#" | tr '\n' '\0' | xargs -0 -n 1 cat | \
|
||||
sort | uniq -c | sort -k 1,1 -n >"$TRACE_DIR/.all_uniq"
|
||||
|
||||
TUPLE_COUNT=$((`grep -c . "$TRACE_DIR/.all_uniq"`))
|
||||
|
||||
echo "[+] Found $TUPLE_COUNT unique tuples across $IN_COUNT files."
|
||||
|
||||
#####################################
|
||||
# STEP 3: SELECTING CANDIDATE FILES #
|
||||
#####################################
|
||||
|
||||
# The next step is to find the best candidate for each tuple. The "best"
|
||||
# part is understood simply as the smallest input that includes a particular
|
||||
# tuple in its trace. Empirical evidence suggests that this produces smaller
|
||||
# datasets than more involved algorithms that could be still pulled off in
|
||||
# a shell script.
|
||||
|
||||
echo "[*] Finding best candidates for each tuple..."
|
||||
|
||||
CUR=0
|
||||
|
||||
ls -rS "$IN_DIR" | while read -r fn; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing file $CUR/$IN_COUNT... "
|
||||
|
||||
sed "s#\$# $fn#" "$TRACE_DIR/$fn" >>"$TRACE_DIR/.candidate_list"
|
||||
|
||||
done
|
||||
|
||||
echo
|
||||
|
||||
##############################
|
||||
# STEP 4: LOADING CANDIDATES #
|
||||
##############################
|
||||
|
||||
# At this point, we have a file of tuple-file pairs, sorted by file size
|
||||
# in ascending order (as a consequence of ls -rS). By doing sort keyed
|
||||
# only by tuple (-k 1,1) and configured to output only the first line for
|
||||
# every key (-s -u), we end up with the smallest file for each tuple.
|
||||
|
||||
echo "[*] Sorting candidate list (be patient)..."
|
||||
|
||||
sort -k1,1 -s -u "$TRACE_DIR/.candidate_list" | \
|
||||
sed 's/^/BEST_FILE[/;s/ /]="/;s/$/"/' >"$TRACE_DIR/.candidate_script"
|
||||
|
||||
if [ ! -s "$TRACE_DIR/.candidate_script" ]; then
|
||||
echo "[-] Error: no traces obtained from test cases, check syntax!" 1>&2
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# The sed command converted the sorted list to a shell script that populates
|
||||
# BEST_FILE[tuple]="fname". Let's load that!
|
||||
|
||||
. "$TRACE_DIR/.candidate_script"
|
||||
|
||||
##########################
|
||||
# STEP 5: WRITING OUTPUT #
|
||||
##########################
|
||||
|
||||
# The final trick is to grab the top pick for each tuple, unless said tuple is
|
||||
# already set due to the inclusion of an earlier candidate; and then put all
|
||||
# tuples associated with the newly-added file to the "already have" list. The
|
||||
# loop works from least popular tuples and toward the most common ones.
|
||||
|
||||
echo "[*] Processing candidates and writing output files..."
|
||||
|
||||
CUR=0
|
||||
|
||||
touch "$TRACE_DIR/.already_have"
|
||||
|
||||
while read -r cnt tuple; do
|
||||
|
||||
CUR=$((CUR+1))
|
||||
printf "\\r Processing tuple $CUR/$TUPLE_COUNT with count $cnt... "
|
||||
|
||||
# If we already have this tuple, skip it.
|
||||
|
||||
grep -q "^$tuple\$" "$TRACE_DIR/.already_have" && continue
|
||||
|
||||
FN=${BEST_FILE[tuple]}
|
||||
|
||||
# echo "tuple nr $CUR ($tuple cnt=$cnt) -> $FN" >> "$TRACE_DIR/.log"
|
||||
$CP_TOOL "$IN_DIR/$FN" "$OUT_DIR/$FN"
|
||||
|
||||
if [ "$((CUR % 5))" = "0" ]; then
|
||||
sort -u "$TRACE_DIR/$FN" "$TRACE_DIR/.already_have" >"$TRACE_DIR/.tmp"
|
||||
mv -f "$TRACE_DIR/.tmp" "$TRACE_DIR/.already_have"
|
||||
else
|
||||
cat "$TRACE_DIR/$FN" >>"$TRACE_DIR/.already_have"
|
||||
fi
|
||||
|
||||
done <"$TRACE_DIR/.all_uniq"
|
||||
|
||||
echo
|
||||
|
||||
OUT_COUNT=`ls -- "$OUT_DIR" | wc -l`
|
||||
|
||||
if [ "$OUT_COUNT" = "1" ]; then
|
||||
echo "[!] WARNING: All test cases had the same traces, check syntax!"
|
||||
fi
|
||||
|
||||
echo "[+] Narrowed down to $OUT_COUNT files, saved in '$OUT_DIR'."
|
||||
echo
|
||||
|
||||
test "$AFL_KEEP_TRACES" = "" && rm -rf "$TRACE_DIR"
|
||||
|
||||
exit 0
|
8271
afl-fuzz.c
8271
afl-fuzz.c
File diff suppressed because it is too large
Load Diff
338
afl-gcc.c
338
afl-gcc.c
@ -1,338 +0,0 @@
|
||||
/*
|
||||
american fuzzy lop - wrapper for GCC and clang
|
||||
----------------------------------------------
|
||||
|
||||
Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
|
||||
Copyright 2013, 2014, 2015 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
This program is a drop-in replacement for GCC or clang. The most common way
|
||||
of using it is to pass the path to afl-gcc or afl-clang via CC when invoking
|
||||
./configure.
|
||||
|
||||
(Of course, use CXX and point it to afl-g++ / afl-clang++ for C++ code.)
|
||||
|
||||
The wrapper needs to know the path to afl-as (renamed to 'as'). The default
|
||||
is /usr/local/lib/afl/. A convenient way to specify alternative directories
|
||||
would be to set AFL_PATH.
|
||||
|
||||
If AFL_HARDEN is set, the wrapper will compile the target app with various
|
||||
hardening options that may help detect memory management issues more
|
||||
reliably. You can also specify AFL_USE_ASAN to enable ASAN.
|
||||
|
||||
If you want to call a non-default compiler as a next step of the chain,
|
||||
specify its location via AFL_CC or AFL_CXX.
|
||||
|
||||
*/
|
||||
|
||||
#define AFL_MAIN
|
||||
|
||||
#include "config.h"
|
||||
#include "types.h"
|
||||
#include "debug.h"
|
||||
#include "alloc-inl.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static u8* as_path; /* Path to the AFL 'as' wrapper */
|
||||
static u8** cc_params; /* Parameters passed to the real CC */
|
||||
static u32 cc_par_cnt = 1; /* Param count, including argv0 */
|
||||
static u8 be_quiet, /* Quiet mode */
|
||||
clang_mode; /* Invoked as afl-clang*? */
|
||||
|
||||
|
||||
/* Try to find our "fake" GNU assembler in AFL_PATH or at the location derived
|
||||
from argv[0]. If that fails, abort. */
|
||||
|
||||
static void find_as(u8* argv0) {
|
||||
|
||||
u8 *afl_path = getenv("AFL_PATH");
|
||||
u8 *slash, *tmp;
|
||||
|
||||
if (afl_path) {
|
||||
|
||||
tmp = alloc_printf("%s/as", afl_path);
|
||||
|
||||
if (!access(tmp, X_OK)) {
|
||||
as_path = afl_path;
|
||||
ck_free(tmp);
|
||||
return;
|
||||
}
|
||||
|
||||
ck_free(tmp);
|
||||
|
||||
}
|
||||
|
||||
slash = strrchr(argv0, '/');
|
||||
|
||||
if (slash) {
|
||||
|
||||
u8 *dir;
|
||||
|
||||
*slash = 0;
|
||||
dir = ck_strdup(argv0);
|
||||
*slash = '/';
|
||||
|
||||
tmp = alloc_printf("%s/afl-as", dir);
|
||||
|
||||
if (!access(tmp, X_OK)) {
|
||||
as_path = dir;
|
||||
ck_free(tmp);
|
||||
return;
|
||||
}
|
||||
|
||||
ck_free(tmp);
|
||||
ck_free(dir);
|
||||
|
||||
}
|
||||
|
||||
if (!access(AFL_PATH "/as", X_OK)) {
|
||||
as_path = AFL_PATH;
|
||||
return;
|
||||
}
|
||||
|
||||
FATAL("Unable to find AFL wrapper binary for 'as'. Please set AFL_PATH");
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Copy argv to cc_params, making the necessary edits. */
|
||||
|
||||
static void edit_params(u32 argc, char** argv) {
|
||||
|
||||
u8 fortify_set = 0, asan_set = 0;
|
||||
u8 *name;
|
||||
|
||||
#if defined(__FreeBSD__) && defined(__x86_64__)
|
||||
u8 m32_set = 0;
|
||||
#endif
|
||||
|
||||
cc_params = ck_alloc((argc + 128) * sizeof(u8*));
|
||||
|
||||
name = strrchr(argv[0], '/');
|
||||
if (!name) name = argv[0]; else name++;
|
||||
|
||||
if (!strncmp(name, "afl-clang", 9)) {
|
||||
|
||||
clang_mode = 1;
|
||||
|
||||
setenv(CLANG_ENV_VAR, "1", 1);
|
||||
|
||||
if (!strcmp(name, "afl-clang++")) {
|
||||
u8* alt_cxx = getenv("AFL_CXX");
|
||||
cc_params[0] = alt_cxx ? alt_cxx : (u8*)"clang++";
|
||||
} else {
|
||||
u8* alt_cc = getenv("AFL_CC");
|
||||
cc_params[0] = alt_cc ? alt_cc : (u8*)"clang";
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/* With GCJ and Eclipse installed, you can actually compile Java! The
|
||||
instrumentation will work (amazingly). Alas, unhandled exceptions do
|
||||
not call abort(), so afl-fuzz would need to be modified to equate
|
||||
non-zero exit codes with crash conditions when working with Java
|
||||
binaries. Meh. */
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
if (!strcmp(name, "afl-g++")) cc_params[0] = getenv("AFL_CXX");
|
||||
else if (!strcmp(name, "afl-gcj")) cc_params[0] = getenv("AFL_GCJ");
|
||||
else cc_params[0] = getenv("AFL_CC");
|
||||
|
||||
if (!cc_params[0]) {
|
||||
|
||||
SAYF("\n" cLRD "[-] " cRST
|
||||
"On Apple systems, 'gcc' is usually just a wrapper for clang. Please use the\n"
|
||||
" 'afl-clang' utility instead of 'afl-gcc'. If you really have GCC installed,\n"
|
||||
" set AFL_CC or AFL_CXX to specify the correct path to that compiler.\n");
|
||||
|
||||
FATAL("AFL_CC or AFL_CXX required on MacOS X");
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (!strcmp(name, "afl-g++")) {
|
||||
u8* alt_cxx = getenv("AFL_CXX");
|
||||
cc_params[0] = alt_cxx ? alt_cxx : (u8*)"g++";
|
||||
} else if (!strcmp(name, "afl-gcj")) {
|
||||
u8* alt_cc = getenv("AFL_GCJ");
|
||||
cc_params[0] = alt_cc ? alt_cc : (u8*)"gcj";
|
||||
} else {
|
||||
u8* alt_cc = getenv("AFL_CC");
|
||||
cc_params[0] = alt_cc ? alt_cc : (u8*)"gcc";
|
||||
}
|
||||
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
}
|
||||
|
||||
while (--argc) {
|
||||
u8* cur = *(++argv);
|
||||
|
||||
if (!strncmp(cur, "-B", 2)) {
|
||||
|
||||
if (!be_quiet) WARNF("-B is already set, overriding");
|
||||
|
||||
if (!cur[2] && argc > 1) { argc--; argv++; }
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
if (!strcmp(cur, "-integrated-as")) continue;
|
||||
|
||||
if (!strcmp(cur, "-pipe")) continue;
|
||||
|
||||
#if defined(__FreeBSD__) && defined(__x86_64__)
|
||||
if (!strcmp(cur, "-m32")) m32_set = 1;
|
||||
#endif
|
||||
|
||||
if (!strcmp(cur, "-fsanitize=address") ||
|
||||
!strcmp(cur, "-fsanitize=memory")) asan_set = 1;
|
||||
|
||||
if (strstr(cur, "FORTIFY_SOURCE")) fortify_set = 1;
|
||||
|
||||
cc_params[cc_par_cnt++] = cur;
|
||||
|
||||
}
|
||||
|
||||
cc_params[cc_par_cnt++] = "-B";
|
||||
cc_params[cc_par_cnt++] = as_path;
|
||||
|
||||
if (clang_mode)
|
||||
cc_params[cc_par_cnt++] = "-no-integrated-as";
|
||||
|
||||
if (getenv("AFL_HARDEN")) {
|
||||
|
||||
cc_params[cc_par_cnt++] = "-fstack-protector-all";
|
||||
|
||||
if (!fortify_set)
|
||||
cc_params[cc_par_cnt++] = "-D_FORTIFY_SOURCE=2";
|
||||
|
||||
}
|
||||
|
||||
if (asan_set) {
|
||||
|
||||
/* Pass this on to afl-as to adjust map density. */
|
||||
|
||||
setenv("AFL_USE_ASAN", "1", 1);
|
||||
|
||||
} else if (getenv("AFL_USE_ASAN")) {
|
||||
|
||||
if (getenv("AFL_USE_MSAN"))
|
||||
FATAL("ASAN and MSAN are mutually exclusive");
|
||||
|
||||
if (getenv("AFL_HARDEN"))
|
||||
FATAL("ASAN and AFL_HARDEN are mutually exclusive");
|
||||
|
||||
cc_params[cc_par_cnt++] = "-U_FORTIFY_SOURCE";
|
||||
cc_params[cc_par_cnt++] = "-fsanitize=address";
|
||||
|
||||
} else if (getenv("AFL_USE_MSAN")) {
|
||||
|
||||
if (getenv("AFL_USE_ASAN"))
|
||||
FATAL("ASAN and MSAN are mutually exclusive");
|
||||
|
||||
if (getenv("AFL_HARDEN"))
|
||||
FATAL("MSAN and AFL_HARDEN are mutually exclusive");
|
||||
|
||||
cc_params[cc_par_cnt++] = "-U_FORTIFY_SOURCE";
|
||||
cc_params[cc_par_cnt++] = "-fsanitize=memory";
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (!getenv("AFL_DONT_OPTIMIZE")) {
|
||||
|
||||
#if defined(__FreeBSD__) && defined(__x86_64__)
|
||||
|
||||
/* On 64-bit FreeBSD systems, clang -g -m32 is broken, but -m32 itself
|
||||
works OK. This has nothing to do with us, but let's avoid triggering
|
||||
that bug. */
|
||||
|
||||
if (!clang_mode || !m32_set)
|
||||
cc_params[cc_par_cnt++] = "-g";
|
||||
|
||||
#else
|
||||
|
||||
cc_params[cc_par_cnt++] = "-g";
|
||||
|
||||
#endif
|
||||
|
||||
cc_params[cc_par_cnt++] = "-O3";
|
||||
cc_params[cc_par_cnt++] = "-funroll-loops";
|
||||
|
||||
/* Two indicators that you're building for fuzzing; one of them is
|
||||
AFL-specific, the other is shared with libfuzzer. */
|
||||
|
||||
cc_params[cc_par_cnt++] = "-D__AFL_COMPILER=1";
|
||||
cc_params[cc_par_cnt++] = "-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1";
|
||||
|
||||
}
|
||||
|
||||
if (getenv("AFL_NO_BUILTIN")) {
|
||||
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strcmp";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strncmp";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strcasecmp";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strncasecmp";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-memcmp";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strstr";
|
||||
cc_params[cc_par_cnt++] = "-fno-builtin-strcasestr";
|
||||
|
||||
}
|
||||
|
||||
cc_params[cc_par_cnt] = NULL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Main entry point */
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
if (isatty(2) && !getenv("AFL_QUIET")) {
|
||||
|
||||
SAYF(cCYA "afl-cc" VERSION cRST " by <lcamtuf@google.com>\n");
|
||||
|
||||
} else be_quiet = 1;
|
||||
|
||||
if (argc < 2) {
|
||||
|
||||
SAYF("\n"
|
||||
"This is a helper application for afl-fuzz. It serves as a drop-in replacement\n"
|
||||
"for gcc or clang, letting you recompile third-party code with the required\n"
|
||||
"runtime instrumentation. A common use pattern would be one of the following:\n\n"
|
||||
|
||||
" CC=%s/afl-gcc ./configure\n"
|
||||
" CXX=%s/afl-g++ ./configure\n\n"
|
||||
|
||||
"You can specify custom next-stage toolchain via AFL_CC, AFL_CXX, and AFL_AS.\n"
|
||||
"Setting AFL_HARDEN enables hardening optimizations in the compiled code.\n\n",
|
||||
BIN_PATH, BIN_PATH);
|
||||
|
||||
exit(1);
|
||||
|
||||
}
|
||||
|
||||
find_as(argv[0]);
|
||||
|
||||
edit_params(argc, argv);
|
||||
|
||||
execvp(cc_params[0], (char**)cc_params);
|
||||
|
||||
FATAL("Oops, failed to execute '%s' - check your PATH", cc_params[0]);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
86
afl-plot
86
afl-plot
@ -1,9 +1,9 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# american fuzzy lop - Advanced Persistent Graphing
|
||||
# american fuzzy lop++ - Advanced Persistent Graphing
|
||||
# -------------------------------------------------
|
||||
#
|
||||
# Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
# Originally written by Michal Zalewski
|
||||
# Based on a design & prototype by Michael Rash.
|
||||
#
|
||||
# Copyright 2014, 2015 Google Inc. All rights reserved.
|
||||
@ -15,58 +15,64 @@
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
|
||||
echo "progress plotting utility for afl-fuzz by <lcamtuf@google.com>"
|
||||
get_abs_path() {
|
||||
echo $(cd "`dirname "$1"`" && pwd)/"`basename "$1"`"
|
||||
}
|
||||
|
||||
echo "progress plotting utility for afl-fuzz by Michal Zalewski"
|
||||
echo
|
||||
|
||||
if [ ! "$#" = "2" ]; then
|
||||
|
||||
cat 1>&2 <<_EOF_
|
||||
This program generates gnuplot images from afl-fuzz output data. Usage:
|
||||
|
||||
$0 afl_state_dir graph_output_dir
|
||||
|
||||
This program generates gnuplot images from afl-fuzz output data. Usage:
|
||||
|
||||
The afl_state_dir parameter should point to an existing state directory for any
|
||||
active or stopped instance of afl-fuzz; while graph_output_dir should point to
|
||||
an empty directory where this tool can write the resulting plots to.
|
||||
|
||||
The program will put index.html and three PNG images in the output directory;
|
||||
you should be able to view it with any web browser of your choice.
|
||||
|
||||
_EOF_
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
if [ "$AFL_ALLOW_TMP" = "" ]; then
|
||||
inputdir=`get_abs_path "$1"`
|
||||
outputdir=`get_abs_path "$2"`
|
||||
|
||||
echo "$1" | grep -qE '^(/var)?/tmp/'
|
||||
T1="$?"
|
||||
#if [ "$AFL_ALLOW_TMP" = "" ]; then
|
||||
#
|
||||
# echo "$inputdir" | grep -qE '^(/var)?/tmp/'
|
||||
# T1="$?"
|
||||
#
|
||||
# echo "$outputdir" | grep -qE '^(/var)?/tmp/'
|
||||
# T2="$?"
|
||||
#
|
||||
# if [ "$T1" = "0" -o "$T2" = "0" ]; then
|
||||
#
|
||||
# echo "[-] Error: this script shouldn't be used with shared /tmp directories." 1>&2
|
||||
# exit 1
|
||||
#
|
||||
# fi
|
||||
#
|
||||
#fi
|
||||
|
||||
echo "$2" | grep -qE '^(/var)?/tmp/'
|
||||
T2="$?"
|
||||
|
||||
if [ "$T1" = "0" -o "$T2" = "0" ]; then
|
||||
|
||||
echo "[-] Error: this script shouldn't be used with shared /tmp directories." 1>&2
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ ! -f "$1/plot_data" ]; then
|
||||
if [ ! -f "$inputdir/plot_data" ]; then
|
||||
|
||||
echo "[-] Error: input directory is not valid (missing 'plot_data')." 1>&2
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
BANNER="`cat "$1/fuzzer_stats" | grep '^afl_banner ' | cut -d: -f2- | cut -b2-`"
|
||||
BANNER="`cat "$inputdir/fuzzer_stats" 2> /dev/null | grep '^afl_banner ' | cut -d: -f2- | cut -b2-`"
|
||||
|
||||
test "$BANNER" = "" && BANNER="(none)"
|
||||
|
||||
GNUPLOT=`which gnuplot 2>/dev/null`
|
||||
GNUPLOT=`command -v gnuplot 2>/dev/null`
|
||||
|
||||
if [ "$GNUPLOT" = "" ]; then
|
||||
|
||||
@ -75,17 +81,17 @@ if [ "$GNUPLOT" = "" ]; then
|
||||
|
||||
fi
|
||||
|
||||
mkdir "$2" 2>/dev/null
|
||||
mkdir "$outputdir" 2>/dev/null
|
||||
|
||||
if [ ! -d "$2" ]; then
|
||||
if [ ! -d "$outputdir" ]; then
|
||||
|
||||
echo "[-] Error: unable to create the output directory - pick another location." 1>&2
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
rm -f "$2/high_freq.png" "$2/low_freq.png" "$2/exec_speed.png"
|
||||
mv -f "$2/index.html" "$2/index.html.orig" 2>/dev/null
|
||||
rm -f "$outputdir/high_freq.png" "$outputdir/low_freq.png" "$outputdir/exec_speed.png"
|
||||
mv -f "$outputdir/index.html" "$outputdir/index.html.orig" 2>/dev/null
|
||||
|
||||
echo "[*] Generating plots..."
|
||||
|
||||
@ -94,7 +100,7 @@ echo "[*] Generating plots..."
|
||||
cat <<_EOF_
|
||||
set terminal png truecolor enhanced size 1000,300 butt
|
||||
|
||||
set output '$2/high_freq.png'
|
||||
set output '$outputdir/high_freq.png'
|
||||
|
||||
set xdata time
|
||||
set timefmt '%s'
|
||||
@ -112,31 +118,31 @@ set key outside
|
||||
set autoscale xfixmin
|
||||
set autoscale xfixmax
|
||||
|
||||
plot '$1/plot_data' using 1:4 with filledcurve x1 title 'total paths' linecolor rgb '#000000' fillstyle transparent solid 0.2 noborder, \\
|
||||
plot '$inputdir/plot_data' using 1:4 with filledcurve x1 title 'total paths' linecolor rgb '#000000' fillstyle transparent solid 0.2 noborder, \\
|
||||
'' using 1:3 with filledcurve x1 title 'current path' linecolor rgb '#f0f0f0' fillstyle transparent solid 0.5 noborder, \\
|
||||
'' using 1:5 with lines title 'pending paths' linecolor rgb '#0090ff' linewidth 3, \\
|
||||
'' using 1:6 with lines title 'pending favs' linecolor rgb '#c00080' linewidth 3, \\
|
||||
'' using 1:2 with lines title 'cycles done' linecolor rgb '#c000f0' linewidth 3
|
||||
|
||||
set terminal png truecolor enhanced size 1000,200 butt
|
||||
set output '$2/low_freq.png'
|
||||
set output '$outputdir/low_freq.png'
|
||||
|
||||
plot '$1/plot_data' using 1:8 with filledcurve x1 title '' linecolor rgb '#c00080' fillstyle transparent solid 0.2 noborder, \\
|
||||
plot '$inputdir/plot_data' using 1:8 with filledcurve x1 title '' linecolor rgb '#c00080' fillstyle transparent solid 0.2 noborder, \\
|
||||
'' using 1:8 with lines title ' uniq crashes' linecolor rgb '#c00080' linewidth 3, \\
|
||||
'' using 1:9 with lines title 'uniq hangs' linecolor rgb '#c000f0' linewidth 3, \\
|
||||
'' using 1:10 with lines title 'levels' linecolor rgb '#0090ff' linewidth 3
|
||||
|
||||
set terminal png truecolor enhanced size 1000,200 butt
|
||||
set output '$2/exec_speed.png'
|
||||
set output '$outputdir/exec_speed.png'
|
||||
|
||||
plot '$1/plot_data' using 1:11 with filledcurve x1 title '' linecolor rgb '#0090ff' fillstyle transparent solid 0.2 noborder, \\
|
||||
'$1/plot_data' using 1:11 with lines title ' execs/sec' linecolor rgb '#0090ff' linewidth 3 smooth bezier;
|
||||
plot '$inputdir/plot_data' using 1:11 with filledcurve x1 title '' linecolor rgb '#0090ff' fillstyle transparent solid 0.2 noborder, \\
|
||||
'$inputdir/plot_data' using 1:11 with lines title ' execs/sec' linecolor rgb '#0090ff' linewidth 3 smooth bezier;
|
||||
|
||||
_EOF_
|
||||
|
||||
) | gnuplot
|
||||
|
||||
if [ ! -s "$2/exec_speed.png" ]; then
|
||||
if [ ! -s "$outputdir/exec_speed.png" ]; then
|
||||
|
||||
echo "[-] Error: something went wrong! Perhaps you have an ancient version of gnuplot?" 1>&2
|
||||
exit 1
|
||||
@ -145,10 +151,10 @@ fi
|
||||
|
||||
echo "[*] Generating index.html..."
|
||||
|
||||
cat >"$2/index.html" <<_EOF_
|
||||
cat >"$outputdir/index.html" <<_EOF_
|
||||
<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'">
|
||||
<tr><td style="width: 18ex"><b>Banner:</b></td><td>$BANNER</td></tr>
|
||||
<tr><td><b>Directory:</b></td><td>$1</td></tr>
|
||||
<tr><td><b>Directory:</b></td><td>$inputdir</td></tr>
|
||||
<tr><td><b>Generated on:</b></td><td>`date`</td></tr>
|
||||
</table>
|
||||
<p>
|
||||
@ -162,8 +168,8 @@ _EOF_
|
||||
# served by Apache or other HTTP daemon. Since the plots aren't horribly
|
||||
# sensitive, this seems like a reasonable trade-off.
|
||||
|
||||
chmod 755 "$2"
|
||||
chmod 644 "$2/high_freq.png" "$2/low_freq.png" "$2/exec_speed.png" "$2/index.html"
|
||||
chmod 755 "$outputdir"
|
||||
chmod 644 "$outputdir/high_freq.png" "$outputdir/low_freq.png" "$outputdir/exec_speed.png" "$outputdir/index.html"
|
||||
|
||||
echo "[+] All done - enjoy your charts!"
|
||||
|
||||
|
777
afl-showmap.c
777
afl-showmap.c
@ -1,777 +0,0 @@
|
||||
/*
|
||||
american fuzzy lop - map display utility
|
||||
----------------------------------------
|
||||
|
||||
Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
|
||||
Copyright 2013, 2014, 2015, 2016, 2017 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
A very simple tool that runs the targeted binary and displays
|
||||
the contents of the trace bitmap in a human-readable form. Useful in
|
||||
scripts to eliminate redundant inputs and perform other checks.
|
||||
|
||||
Exit code is 2 if the target program crashes; 1 if it times out or
|
||||
there is a problem executing it; or 0 if execution is successful.
|
||||
|
||||
*/
|
||||
|
||||
#define AFL_MAIN
|
||||
|
||||
#include "config.h"
|
||||
#include "types.h"
|
||||
#include "debug.h"
|
||||
#include "alloc-inl.h"
|
||||
#include "hash.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
static s32 child_pid; /* PID of the tested program */
|
||||
|
||||
static u8* trace_bits; /* SHM with instrumentation bitmap */
|
||||
|
||||
static u8 *out_file, /* Trace output file */
|
||||
*doc_path, /* Path to docs */
|
||||
*target_path, /* Path to target binary */
|
||||
*at_file; /* Substitution string for @@ */
|
||||
|
||||
static u32 exec_tmout; /* Exec timeout (ms) */
|
||||
|
||||
static u64 mem_limit = MEM_LIMIT; /* Memory limit (MB) */
|
||||
|
||||
static s32 shm_id; /* ID of the SHM region */
|
||||
|
||||
static u8 quiet_mode, /* Hide non-essential messages? */
|
||||
edges_only, /* Ignore hit counts? */
|
||||
cmin_mode, /* Generate output in afl-cmin mode? */
|
||||
binary_mode, /* Write output as a binary map */
|
||||
keep_cores; /* Allow coredumps? */
|
||||
|
||||
static volatile u8
|
||||
stop_soon, /* Ctrl-C pressed? */
|
||||
child_timed_out, /* Child timed out? */
|
||||
child_crashed; /* Child crashed? */
|
||||
|
||||
/* Classify tuple counts. Instead of mapping to individual bits, as in
|
||||
afl-fuzz.c, we map to more user-friendly numbers between 1 and 8. */
|
||||
|
||||
static const u8 count_class_human[256] = {
|
||||
|
||||
[0] = 0,
|
||||
[1] = 1,
|
||||
[2] = 2,
|
||||
[3] = 3,
|
||||
[4 ... 7] = 4,
|
||||
[8 ... 15] = 5,
|
||||
[16 ... 31] = 6,
|
||||
[32 ... 127] = 7,
|
||||
[128 ... 255] = 8
|
||||
|
||||
};
|
||||
|
||||
static const u8 count_class_binary[256] = {
|
||||
|
||||
[0] = 0,
|
||||
[1] = 1,
|
||||
[2] = 2,
|
||||
[3] = 4,
|
||||
[4 ... 7] = 8,
|
||||
[8 ... 15] = 16,
|
||||
[16 ... 31] = 32,
|
||||
[32 ... 127] = 64,
|
||||
[128 ... 255] = 128
|
||||
|
||||
};
|
||||
|
||||
static void classify_counts(u8* mem, const u8* map) {
|
||||
|
||||
u32 i = MAP_SIZE;
|
||||
|
||||
if (edges_only) {
|
||||
|
||||
while (i--) {
|
||||
if (*mem) *mem = 1;
|
||||
mem++;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
while (i--) {
|
||||
*mem = map[*mem];
|
||||
mem++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Get rid of shared memory (atexit handler). */
|
||||
|
||||
static void remove_shm(void) {
|
||||
|
||||
shmctl(shm_id, IPC_RMID, NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Configure shared memory. */
|
||||
|
||||
static void setup_shm(void) {
|
||||
|
||||
u8* shm_str;
|
||||
|
||||
shm_id = shmget(IPC_PRIVATE, MAP_SIZE, IPC_CREAT | IPC_EXCL | 0600);
|
||||
|
||||
if (shm_id < 0) PFATAL("shmget() failed");
|
||||
|
||||
atexit(remove_shm);
|
||||
|
||||
shm_str = alloc_printf("%d", shm_id);
|
||||
|
||||
setenv(SHM_ENV_VAR, shm_str, 1);
|
||||
|
||||
ck_free(shm_str);
|
||||
|
||||
trace_bits = shmat(shm_id, NULL, 0);
|
||||
|
||||
if (!trace_bits) PFATAL("shmat() failed");
|
||||
|
||||
}
|
||||
|
||||
/* Write results. */
|
||||
|
||||
static u32 write_results(void) {
|
||||
|
||||
s32 fd;
|
||||
u32 i, ret = 0;
|
||||
|
||||
u8 cco = !!getenv("AFL_CMIN_CRASHES_ONLY"),
|
||||
caa = !!getenv("AFL_CMIN_ALLOW_ANY");
|
||||
|
||||
if (!strncmp(out_file, "/dev/", 5)) {
|
||||
|
||||
fd = open(out_file, O_WRONLY, 0600);
|
||||
if (fd < 0) PFATAL("Unable to open '%s'", out_file);
|
||||
|
||||
} else if (!strcmp(out_file, "-")) {
|
||||
|
||||
fd = dup(1);
|
||||
if (fd < 0) PFATAL("Unable to open stdout");
|
||||
|
||||
} else {
|
||||
|
||||
unlink(out_file); /* Ignore errors */
|
||||
fd = open(out_file, O_WRONLY | O_CREAT | O_EXCL, 0600);
|
||||
if (fd < 0) PFATAL("Unable to create '%s'", out_file);
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (binary_mode) {
|
||||
|
||||
for (i = 0; i < MAP_SIZE; i++)
|
||||
if (trace_bits[i]) ret++;
|
||||
|
||||
ck_write(fd, trace_bits, MAP_SIZE, out_file);
|
||||
close(fd);
|
||||
|
||||
} else {
|
||||
|
||||
FILE* f = fdopen(fd, "w");
|
||||
|
||||
if (!f) PFATAL("fdopen() failed");
|
||||
|
||||
for (i = 0; i < MAP_SIZE; i++) {
|
||||
|
||||
if (!trace_bits[i]) continue;
|
||||
ret++;
|
||||
|
||||
if (cmin_mode) {
|
||||
|
||||
if (child_timed_out) break;
|
||||
if (!caa && child_crashed != cco) break;
|
||||
|
||||
fprintf(f, "%u%u\n", trace_bits[i], i);
|
||||
|
||||
} else fprintf(f, "%06u:%u\n", i, trace_bits[i]);
|
||||
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Handle timeout signal. */
|
||||
|
||||
static void handle_timeout(int sig) {
|
||||
|
||||
child_timed_out = 1;
|
||||
if (child_pid > 0) kill(child_pid, SIGKILL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Execute target application. */
|
||||
|
||||
static void run_target(char** argv) {
|
||||
|
||||
static struct itimerval it;
|
||||
int status = 0;
|
||||
|
||||
if (!quiet_mode)
|
||||
SAYF("-- Program output begins --\n" cRST);
|
||||
|
||||
MEM_BARRIER();
|
||||
|
||||
child_pid = fork();
|
||||
|
||||
if (child_pid < 0) PFATAL("fork() failed");
|
||||
|
||||
if (!child_pid) {
|
||||
|
||||
struct rlimit r;
|
||||
|
||||
if (quiet_mode) {
|
||||
|
||||
s32 fd = open("/dev/null", O_RDWR);
|
||||
|
||||
if (fd < 0 || dup2(fd, 1) < 0 || dup2(fd, 2) < 0) {
|
||||
*(u32*)trace_bits = EXEC_FAIL_SIG;
|
||||
PFATAL("Descriptor initialization failed");
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
}
|
||||
|
||||
if (mem_limit) {
|
||||
|
||||
r.rlim_max = r.rlim_cur = ((rlim_t)mem_limit) << 20;
|
||||
|
||||
#ifdef RLIMIT_AS
|
||||
|
||||
setrlimit(RLIMIT_AS, &r); /* Ignore errors */
|
||||
|
||||
#else
|
||||
|
||||
setrlimit(RLIMIT_DATA, &r); /* Ignore errors */
|
||||
|
||||
#endif /* ^RLIMIT_AS */
|
||||
|
||||
}
|
||||
|
||||
if (!keep_cores) r.rlim_max = r.rlim_cur = 0;
|
||||
else r.rlim_max = r.rlim_cur = RLIM_INFINITY;
|
||||
|
||||
setrlimit(RLIMIT_CORE, &r); /* Ignore errors */
|
||||
|
||||
if (!getenv("LD_BIND_LAZY")) setenv("LD_BIND_NOW", "1", 0);
|
||||
|
||||
setsid();
|
||||
|
||||
execv(target_path, argv);
|
||||
|
||||
*(u32*)trace_bits = EXEC_FAIL_SIG;
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
||||
/* Configure timeout, wait for child, cancel timeout. */
|
||||
|
||||
if (exec_tmout) {
|
||||
|
||||
child_timed_out = 0;
|
||||
it.it_value.tv_sec = (exec_tmout / 1000);
|
||||
it.it_value.tv_usec = (exec_tmout % 1000) * 1000;
|
||||
|
||||
}
|
||||
|
||||
setitimer(ITIMER_REAL, &it, NULL);
|
||||
|
||||
if (waitpid(child_pid, &status, 0) <= 0) FATAL("waitpid() failed");
|
||||
|
||||
child_pid = 0;
|
||||
it.it_value.tv_sec = 0;
|
||||
it.it_value.tv_usec = 0;
|
||||
setitimer(ITIMER_REAL, &it, NULL);
|
||||
|
||||
MEM_BARRIER();
|
||||
|
||||
/* Clean up bitmap, analyze exit condition, etc. */
|
||||
|
||||
if (*(u32*)trace_bits == EXEC_FAIL_SIG)
|
||||
FATAL("Unable to execute '%s'", argv[0]);
|
||||
|
||||
classify_counts(trace_bits, binary_mode ?
|
||||
count_class_binary : count_class_human);
|
||||
|
||||
if (!quiet_mode)
|
||||
SAYF(cRST "-- Program output ends --\n");
|
||||
|
||||
if (!child_timed_out && !stop_soon && WIFSIGNALED(status))
|
||||
child_crashed = 1;
|
||||
|
||||
if (!quiet_mode) {
|
||||
|
||||
if (child_timed_out)
|
||||
SAYF(cLRD "\n+++ Program timed off +++\n" cRST);
|
||||
else if (stop_soon)
|
||||
SAYF(cLRD "\n+++ Program aborted by user +++\n" cRST);
|
||||
else if (child_crashed)
|
||||
SAYF(cLRD "\n+++ Program killed by signal %u +++\n" cRST, WTERMSIG(status));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Handle Ctrl-C and the like. */
|
||||
|
||||
static void handle_stop_sig(int sig) {
|
||||
|
||||
stop_soon = 1;
|
||||
|
||||
if (child_pid > 0) kill(child_pid, SIGKILL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Do basic preparations - persistent fds, filenames, etc. */
|
||||
|
||||
static void set_up_environment(void) {
|
||||
|
||||
setenv("ASAN_OPTIONS", "abort_on_error=1:"
|
||||
"detect_leaks=0:"
|
||||
"symbolize=0:"
|
||||
"allocator_may_return_null=1", 0);
|
||||
|
||||
setenv("MSAN_OPTIONS", "exit_code=" STRINGIFY(MSAN_ERROR) ":"
|
||||
"symbolize=0:"
|
||||
"abort_on_error=1:"
|
||||
"allocator_may_return_null=1:"
|
||||
"msan_track_origins=0", 0);
|
||||
|
||||
if (getenv("AFL_PRELOAD")) {
|
||||
setenv("LD_PRELOAD", getenv("AFL_PRELOAD"), 1);
|
||||
setenv("DYLD_INSERT_LIBRARIES", getenv("AFL_PRELOAD"), 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Setup signal handlers, duh. */
|
||||
|
||||
static void setup_signal_handlers(void) {
|
||||
|
||||
struct sigaction sa;
|
||||
|
||||
sa.sa_handler = NULL;
|
||||
sa.sa_flags = SA_RESTART;
|
||||
sa.sa_sigaction = NULL;
|
||||
|
||||
sigemptyset(&sa.sa_mask);
|
||||
|
||||
/* Various ways of saying "stop". */
|
||||
|
||||
sa.sa_handler = handle_stop_sig;
|
||||
sigaction(SIGHUP, &sa, NULL);
|
||||
sigaction(SIGINT, &sa, NULL);
|
||||
sigaction(SIGTERM, &sa, NULL);
|
||||
|
||||
/* Exec timeout notifications. */
|
||||
|
||||
sa.sa_handler = handle_timeout;
|
||||
sigaction(SIGALRM, &sa, NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Detect @@ in args. */
|
||||
|
||||
static void detect_file_args(char** argv) {
|
||||
|
||||
u32 i = 0;
|
||||
u8* cwd = getcwd(NULL, 0);
|
||||
|
||||
if (!cwd) PFATAL("getcwd() failed");
|
||||
|
||||
while (argv[i]) {
|
||||
|
||||
u8* aa_loc = strstr(argv[i], "@@");
|
||||
|
||||
if (aa_loc) {
|
||||
|
||||
u8 *aa_subst, *n_arg;
|
||||
|
||||
if (!at_file) FATAL("@@ syntax is not supported by this tool.");
|
||||
|
||||
/* Be sure that we're always using fully-qualified paths. */
|
||||
|
||||
if (at_file[0] == '/') aa_subst = at_file;
|
||||
else aa_subst = alloc_printf("%s/%s", cwd, at_file);
|
||||
|
||||
/* Construct a replacement argv value. */
|
||||
|
||||
*aa_loc = 0;
|
||||
n_arg = alloc_printf("%s%s%s", argv[i], aa_subst, aa_loc + 2);
|
||||
argv[i] = n_arg;
|
||||
*aa_loc = '@';
|
||||
|
||||
if (at_file[0] != '/') ck_free(aa_subst);
|
||||
|
||||
}
|
||||
|
||||
i++;
|
||||
|
||||
}
|
||||
|
||||
free(cwd); /* not tracked */
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Show banner. */
|
||||
|
||||
static void show_banner(void) {
|
||||
|
||||
SAYF(cCYA "afl-showmap" VERSION cRST " by <lcamtuf@google.com>\n");
|
||||
|
||||
}
|
||||
|
||||
/* Display usage hints. */
|
||||
|
||||
static void usage(u8* argv0) {
|
||||
|
||||
show_banner();
|
||||
|
||||
SAYF("\n%s [ options ] -- /path/to/target_app [ ... ]\n\n"
|
||||
|
||||
"Required parameters:\n\n"
|
||||
|
||||
" -o file - file to write the trace data to\n\n"
|
||||
|
||||
"Execution control settings:\n\n"
|
||||
|
||||
" -t msec - timeout for each run (none)\n"
|
||||
" -m megs - memory limit for child process (%u MB)\n"
|
||||
" -Q - use binary-only instrumentation (QEMU mode)\n\n"
|
||||
|
||||
"Other settings:\n\n"
|
||||
|
||||
" -q - sink program's output and don't show messages\n"
|
||||
" -e - show edge coverage only, ignore hit counts\n"
|
||||
" -c - allow core dumps\n\n"
|
||||
|
||||
"This tool displays raw tuple data captured by AFL instrumentation.\n"
|
||||
"For additional help, consult %s/README.\n\n" cRST,
|
||||
|
||||
argv0, MEM_LIMIT, doc_path);
|
||||
|
||||
exit(1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Find binary. */
|
||||
|
||||
static void find_binary(u8* fname) {
|
||||
|
||||
u8* env_path = 0;
|
||||
struct stat st;
|
||||
|
||||
if (strchr(fname, '/') || !(env_path = getenv("PATH"))) {
|
||||
|
||||
target_path = ck_strdup(fname);
|
||||
|
||||
if (stat(target_path, &st) || !S_ISREG(st.st_mode) ||
|
||||
!(st.st_mode & 0111) || st.st_size < 4)
|
||||
FATAL("Program '%s' not found or not executable", fname);
|
||||
|
||||
} else {
|
||||
|
||||
while (env_path) {
|
||||
|
||||
u8 *cur_elem, *delim = strchr(env_path, ':');
|
||||
|
||||
if (delim) {
|
||||
|
||||
cur_elem = ck_alloc(delim - env_path + 1);
|
||||
memcpy(cur_elem, env_path, delim - env_path);
|
||||
delim++;
|
||||
|
||||
} else cur_elem = ck_strdup(env_path);
|
||||
|
||||
env_path = delim;
|
||||
|
||||
if (cur_elem[0])
|
||||
target_path = alloc_printf("%s/%s", cur_elem, fname);
|
||||
else
|
||||
target_path = ck_strdup(fname);
|
||||
|
||||
ck_free(cur_elem);
|
||||
|
||||
if (!stat(target_path, &st) && S_ISREG(st.st_mode) &&
|
||||
(st.st_mode & 0111) && st.st_size >= 4) break;
|
||||
|
||||
ck_free(target_path);
|
||||
target_path = 0;
|
||||
|
||||
}
|
||||
|
||||
if (!target_path) FATAL("Program '%s' not found or not executable", fname);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Fix up argv for QEMU. */
|
||||
|
||||
static char** get_qemu_argv(u8* own_loc, char** argv, int argc) {
|
||||
|
||||
char** new_argv = ck_alloc(sizeof(char*) * (argc + 4));
|
||||
u8 *tmp, *cp, *rsl, *own_copy;
|
||||
|
||||
memcpy(new_argv + 3, argv + 1, sizeof(char*) * argc);
|
||||
|
||||
new_argv[2] = target_path;
|
||||
new_argv[1] = "--";
|
||||
|
||||
/* Now we need to actually find qemu for argv[0]. */
|
||||
|
||||
tmp = getenv("AFL_PATH");
|
||||
|
||||
if (tmp) {
|
||||
|
||||
cp = alloc_printf("%s/afl-qemu-trace", tmp);
|
||||
|
||||
if (access(cp, X_OK))
|
||||
FATAL("Unable to find '%s'", tmp);
|
||||
|
||||
target_path = new_argv[0] = cp;
|
||||
return new_argv;
|
||||
|
||||
}
|
||||
|
||||
own_copy = ck_strdup(own_loc);
|
||||
rsl = strrchr(own_copy, '/');
|
||||
|
||||
if (rsl) {
|
||||
|
||||
*rsl = 0;
|
||||
|
||||
cp = alloc_printf("%s/afl-qemu-trace", own_copy);
|
||||
ck_free(own_copy);
|
||||
|
||||
if (!access(cp, X_OK)) {
|
||||
|
||||
target_path = new_argv[0] = cp;
|
||||
return new_argv;
|
||||
|
||||
}
|
||||
|
||||
} else ck_free(own_copy);
|
||||
|
||||
if (!access(BIN_PATH "/afl-qemu-trace", X_OK)) {
|
||||
|
||||
target_path = new_argv[0] = BIN_PATH "/afl-qemu-trace";
|
||||
return new_argv;
|
||||
|
||||
}
|
||||
|
||||
FATAL("Unable to find 'afl-qemu-trace'.");
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Main entry point */
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
s32 opt;
|
||||
u8 mem_limit_given = 0, timeout_given = 0, qemu_mode = 0;
|
||||
u32 tcnt;
|
||||
char** use_argv;
|
||||
|
||||
doc_path = access(DOC_PATH, F_OK) ? "docs" : DOC_PATH;
|
||||
|
||||
while ((opt = getopt(argc,argv,"+o:m:t:A:eqZQbc")) > 0)
|
||||
|
||||
switch (opt) {
|
||||
|
||||
case 'o':
|
||||
|
||||
if (out_file) FATAL("Multiple -o options not supported");
|
||||
out_file = optarg;
|
||||
break;
|
||||
|
||||
case 'm': {
|
||||
|
||||
u8 suffix = 'M';
|
||||
|
||||
if (mem_limit_given) FATAL("Multiple -m options not supported");
|
||||
mem_limit_given = 1;
|
||||
|
||||
if (!strcmp(optarg, "none")) {
|
||||
|
||||
mem_limit = 0;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (sscanf(optarg, "%llu%c", &mem_limit, &suffix) < 1 ||
|
||||
optarg[0] == '-') FATAL("Bad syntax used for -m");
|
||||
|
||||
switch (suffix) {
|
||||
|
||||
case 'T': mem_limit *= 1024 * 1024; break;
|
||||
case 'G': mem_limit *= 1024; break;
|
||||
case 'k': mem_limit /= 1024; break;
|
||||
case 'M': break;
|
||||
|
||||
default: FATAL("Unsupported suffix or bad syntax for -m");
|
||||
|
||||
}
|
||||
|
||||
if (mem_limit < 5) FATAL("Dangerously low value of -m");
|
||||
|
||||
if (sizeof(rlim_t) == 4 && mem_limit > 2000)
|
||||
FATAL("Value of -m out of range on 32-bit systems");
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 't':
|
||||
|
||||
if (timeout_given) FATAL("Multiple -t options not supported");
|
||||
timeout_given = 1;
|
||||
|
||||
if (strcmp(optarg, "none")) {
|
||||
exec_tmout = atoi(optarg);
|
||||
|
||||
if (exec_tmout < 20 || optarg[0] == '-')
|
||||
FATAL("Dangerously low value of -t");
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
|
||||
if (edges_only) FATAL("Multiple -e options not supported");
|
||||
edges_only = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
|
||||
if (quiet_mode) FATAL("Multiple -q options not supported");
|
||||
quiet_mode = 1;
|
||||
break;
|
||||
|
||||
case 'Z':
|
||||
|
||||
/* This is an undocumented option to write data in the syntax expected
|
||||
by afl-cmin. Nobody else should have any use for this. */
|
||||
|
||||
cmin_mode = 1;
|
||||
quiet_mode = 1;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
|
||||
/* Another afl-cmin specific feature. */
|
||||
at_file = optarg;
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
|
||||
if (qemu_mode) FATAL("Multiple -Q options not supported");
|
||||
if (!mem_limit_given) mem_limit = MEM_LIMIT_QEMU;
|
||||
|
||||
qemu_mode = 1;
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
|
||||
/* Secret undocumented mode. Writes output in raw binary format
|
||||
similar to that dumped by afl-fuzz in <out_dir/queue/fuzz_bitmap. */
|
||||
|
||||
binary_mode = 1;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
|
||||
if (keep_cores) FATAL("Multiple -c options not supported");
|
||||
keep_cores = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
usage(argv[0]);
|
||||
|
||||
}
|
||||
|
||||
if (optind == argc || !out_file) usage(argv[0]);
|
||||
|
||||
setup_shm();
|
||||
setup_signal_handlers();
|
||||
|
||||
set_up_environment();
|
||||
|
||||
find_binary(argv[optind]);
|
||||
|
||||
if (!quiet_mode) {
|
||||
show_banner();
|
||||
ACTF("Executing '%s'...\n", target_path);
|
||||
}
|
||||
|
||||
detect_file_args(argv + optind);
|
||||
|
||||
if (qemu_mode)
|
||||
use_argv = get_qemu_argv(argv[0], argv + optind, argc - optind);
|
||||
else
|
||||
use_argv = argv + optind;
|
||||
|
||||
run_target(use_argv);
|
||||
|
||||
tcnt = write_results();
|
||||
|
||||
if (!quiet_mode) {
|
||||
|
||||
if (!tcnt) FATAL("No instrumentation detected" cRST);
|
||||
OKF("Captured %u tuples in '%s'." cRST, tcnt, out_file);
|
||||
|
||||
}
|
||||
|
||||
exit(child_crashed * 2 + child_timed_out);
|
||||
|
||||
}
|
||||
|
@ -1,15 +1,83 @@
|
||||
#!/bin/sh
|
||||
echo This reconfigures the system to have a better fuzzing performance
|
||||
sysctl -w kernel.core_pattern=core
|
||||
sysctl -w kernel.randomize_va_space=0
|
||||
sysctl -w kernel.sched_child_runs_first=1
|
||||
sysctl -w kernel.sched_autogroup_enabled=1
|
||||
sysctl -w kernel.sched_migration_cost_ns=50000000
|
||||
sysctl -w kernel.sched_latency_ns=250000000
|
||||
echo never > /sys/kernel/mm/transparent_hugepage/enabled
|
||||
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor > /dev/null
|
||||
echo
|
||||
echo It is recommended to boot the kernel with lots of security off - if you are running a machine that is in a secured network - so set this:
|
||||
echo '/etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="ibpb=off ibrs=off kpti=off l1tf=off mds=off mitigations=off no_stf_barrier noibpb noibrs nopcid nopti nospec_store_bypass_disable nospectre_v1 nospectre_v2 pcid=off pti=off spec_store_bypass_disable=off spectre_v2=off stf_barrier=off"'
|
||||
echo
|
||||
echo Also use AFL_TMPDIR to use a tmpfs for the input file
|
||||
test "$1" = "-h" && {
|
||||
echo 'afl-system-config by Marc Heuse <mh@mh-sec.de>'
|
||||
echo
|
||||
echo $0
|
||||
echo
|
||||
echo afl-system-config has no command line options
|
||||
echo
|
||||
echo afl-system reconfigures the system to a high performance fuzzing state
|
||||
echo WARNING: this reduces the security of the system
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
DONE=
|
||||
PLATFORM=`uname -s`
|
||||
echo This reconfigures the system to have a better fuzzing performance.
|
||||
if [ '!' "$EUID" = 0 ] && [ '!' `id -u` = 0 ] ; then
|
||||
echo "Warning: you need to be root to run this!"
|
||||
# we do not exit as other mechanisms exist that allows to do this than
|
||||
# being root. let the errors speak for themselves.
|
||||
fi
|
||||
if [ "$PLATFORM" = "Linux" ] ; then
|
||||
{
|
||||
sysctl -w kernel.core_pattern=core
|
||||
sysctl -w kernel.randomize_va_space=0
|
||||
sysctl -w kernel.sched_child_runs_first=1
|
||||
sysctl -w kernel.sched_autogroup_enabled=1
|
||||
sysctl -w kernel.sched_migration_cost_ns=50000000
|
||||
sysctl -w kernel.sched_latency_ns=250000000
|
||||
echo never > /sys/kernel/mm/transparent_hugepage/enabled
|
||||
test -e /sys/devices/system/cpu/cpufreq/scaling_governor && echo performance | tee /sys/devices/system/cpu/cpufreq/scaling_governor
|
||||
test -e /sys/devices/system/cpu/cpufreq/policy0/scaling_governor && echo performance | tee /sys/devices/system/cpu/cpufreq/policy*/scaling_governor
|
||||
test -e /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor && echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
test -e /sys/devices/system/cpu/intel_pstate/no_turbo && echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo
|
||||
test -e /sys/devices/system/cpu/cpufreq/boost && echo 1 > /sys/devices/system/cpu/cpufreq/boost
|
||||
} > /dev/null
|
||||
echo Settings applied.
|
||||
dmesg | egrep -q 'nospectre_v2|spectre_v2=off' || {
|
||||
echo It is recommended to boot the kernel with lots of security off - if you are running a machine that is in a secured network - so set this:
|
||||
echo ' /etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="ibpb=off ibrs=off kpti=off l1tf=off mds=off mitigations=off no_stf_barrier noibpb noibrs nopcid nopti nospec_store_bypass_disable nospectre_v1 nospectre_v2 pcid=off pti=off spec_store_bypass_disable=off spectre_v2=off stf_barrier=off"'
|
||||
}
|
||||
DONE=1
|
||||
fi
|
||||
if [ "$PLATFORM" = "FreeBSD" ] ; then
|
||||
{
|
||||
sysctl kern.elf32.aslr.enable=0
|
||||
sysctl kern.elf64.aslr.enable=0
|
||||
} > /dev/null
|
||||
echo Settings applied.
|
||||
echo It is recommended to boot the kernel with lots of security off - if you are running a machine that is in a secured network - so set this:
|
||||
echo ' sysctl hw.ibrs_disable=1'
|
||||
echo 'Setting kern.pmap.pg_ps_enabled=0 into /boot/loader.conf might be helpful too.'
|
||||
DONE=1
|
||||
fi
|
||||
if [ "$PLATFORM" = "OpenBSD" ] ; then
|
||||
echo
|
||||
echo 'System security features cannot be disabled on OpenBSD.'
|
||||
DONE=1
|
||||
fi
|
||||
if [ "$PLATFORM" = "NetBSD" ] ; then
|
||||
{
|
||||
#echo It is recommended to enable unprivileged users to set cpu affinity
|
||||
#echo to be able to use afl-gotcpu meaningfully.
|
||||
/sbin/sysctl -w security.models.extensions.user_set_cpu_affinity=1
|
||||
} > /dev/null
|
||||
echo Settings applied.
|
||||
DONE=1
|
||||
fi
|
||||
if [ "$PLATFORM" = "Darwin" ] ; then
|
||||
if [ $(launchctl list 2>/dev/null | grep -q '\.ReportCrash$') ] ; then
|
||||
echo We unload the default crash reporter here
|
||||
SL=/System/Library; PL=com.apple.ReportCrash
|
||||
launchctl unload -w ${SL}/LaunchAgents/${PL}.plist
|
||||
sudo launchctl unload -w ${SL}/LaunchDaemons/${PL}.Root.plist
|
||||
echo Settings applied.
|
||||
else
|
||||
echo Nothing to do.
|
||||
fi
|
||||
DONE=1
|
||||
fi
|
||||
test -z "$DONE" && echo Error: Unknown platform: $PLATFORM
|
||||
test -z "$AFL_TMPDIR" && echo Also use AFL_TMPDIR and point it to a tmpfs for the input file caching
|
||||
|
1152
afl-tmin.c
1152
afl-tmin.c
File diff suppressed because it is too large
Load Diff
129
afl-whatsup
129
afl-whatsup
@ -1,11 +1,12 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# american fuzzy lop - status check tool
|
||||
# --------------------------------------
|
||||
# american fuzzy lop++ - status check tool
|
||||
# ----------------------------------------
|
||||
#
|
||||
# Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
# Originally written by Michal Zalewski
|
||||
#
|
||||
# Copyright 2015 Google Inc. All rights reserved.
|
||||
# Copyright 2019-2020 AFLplusplus Project. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@ -17,8 +18,16 @@
|
||||
# instances of afl-fuzz.
|
||||
#
|
||||
|
||||
echo "status check tool for afl-fuzz by <lcamtuf@google.com>"
|
||||
echo "$0 status check tool for afl-fuzz by Michal Zalewski"
|
||||
echo
|
||||
test "$1" = "-h" && {
|
||||
echo $0 [-s] output_directory
|
||||
echo
|
||||
echo Options:
|
||||
echo -s - skip details and output summary results only
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ "$1" = "-s" ]; then
|
||||
|
||||
@ -37,7 +46,7 @@ if [ "$DIR" = "" ]; then
|
||||
echo "Usage: $0 [ -s ] afl_sync_dir" 1>&2
|
||||
echo 1>&2
|
||||
echo "The -s option causes the tool to skip all the per-fuzzer trivia and show" 1>&2
|
||||
echo "just the summary results. See docs/parallel_fuzzing.txt for additional tips." 1>&2
|
||||
echo "just the summary results. See docs/parallel_fuzzing.md for additional tips." 1>&2
|
||||
echo 1>&2
|
||||
exit 1
|
||||
|
||||
@ -52,9 +61,16 @@ if [ -d queue ]; then
|
||||
|
||||
fi
|
||||
|
||||
RED=`tput setaf 9 1 1`
|
||||
GREEN=`tput setaf 2 1 1`
|
||||
BLUE=`tput setaf 4 1 1`
|
||||
YELLOW=`tput setaf 11 1 1`
|
||||
NC=`tput sgr0`
|
||||
RESET="$NC"
|
||||
|
||||
CUR_TIME=`date +%s`
|
||||
|
||||
TMP=`mktemp -t .afl-whatsup-XXXXXXXX` || exit 1
|
||||
TMP=`mktemp -t .afl-whatsup-XXXXXXXX` || TMP=`mktemp -p /data/local/tmp .afl-whatsup-XXXXXXXX` || TMP=`mktemp -p /data/local/tmp .afl-whatsup-XXXXXXXX` || exit 1
|
||||
|
||||
ALIVE_CNT=0
|
||||
DEAD_CNT=0
|
||||
@ -66,6 +82,12 @@ TOTAL_CRASHES=0
|
||||
TOTAL_PFAV=0
|
||||
TOTAL_PENDING=0
|
||||
|
||||
# Time since last path / crash / hang, formatted as string
|
||||
FMT_TIME="0 days 0 hours"
|
||||
FMT_PATH="${RED}none seen yet${NC}"
|
||||
FMT_CRASH="none seen yet"
|
||||
FMT_HANG="none seen yet"
|
||||
|
||||
if [ "$SUMMARY_ONLY" = "" ]; then
|
||||
|
||||
echo "Individual fuzzers"
|
||||
@ -74,6 +96,34 @@ if [ "$SUMMARY_ONLY" = "" ]; then
|
||||
|
||||
fi
|
||||
|
||||
fmt_duration()
|
||||
{
|
||||
DUR_STRING=
|
||||
if [ $1 -eq 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local duration=$((CUR_TIME - $1))
|
||||
local days=$((duration / 60 / 60 / 24))
|
||||
local hours=$(((duration / 60 / 60) % 24))
|
||||
local minutes=$(((duration / 60) % 60))
|
||||
local seconds=$((duration % 60))
|
||||
|
||||
if [ $days -gt 0 ]; then
|
||||
DUR_STRING="$days days, $hours hours"
|
||||
elif [ $hours -gt 0 ]; then
|
||||
DUR_STRING="$hours hours, $minutes minutes"
|
||||
elif [ $minutes -gt 0 ]; then
|
||||
DUR_STRING="$minutes minutes, $seconds seconds"
|
||||
else
|
||||
DUR_STRING="$seconds seconds"
|
||||
fi
|
||||
}
|
||||
|
||||
FIRST=true
|
||||
TOTAL_WCOP=
|
||||
TOTAL_LAST_PATH=0
|
||||
|
||||
for i in `find . -maxdepth 2 -iname fuzzer_stats | sort`; do
|
||||
|
||||
sed 's/^command_line.*$/_skip:1/;s/[ ]*:[ ]*/="/;s/$/"/' "$i" >"$TMP"
|
||||
@ -83,9 +133,15 @@ for i in `find . -maxdepth 2 -iname fuzzer_stats | sort`; do
|
||||
RUN_DAYS=$((RUN_UNIX / 60 / 60 / 24))
|
||||
RUN_HRS=$(((RUN_UNIX / 60 / 60) % 24))
|
||||
|
||||
test -n "$cycles_wo_finds" && {
|
||||
test -z "$FIRST" && TOTAL_WCOP="${TOTAL_WCOP}/"
|
||||
TOTAL_WCOP="${TOTAL_WCOP}${cycles_wo_finds}"
|
||||
FIRST=
|
||||
}
|
||||
|
||||
if [ "$SUMMARY_ONLY" = "" ]; then
|
||||
|
||||
echo ">>> $afl_banner ($RUN_DAYS days, $RUN_HRS hrs) <<<"
|
||||
echo ">>> $afl_banner ($RUN_DAYS days, $RUN_HRS hrs) fuzzer PID: $fuzzer_pid <<<"
|
||||
echo
|
||||
|
||||
fi
|
||||
@ -116,8 +172,41 @@ for i in `find . -maxdepth 2 -iname fuzzer_stats | sort`; do
|
||||
TOTAL_PENDING=$((TOTAL_PENDING + pending_total))
|
||||
TOTAL_PFAV=$((TOTAL_PFAV + pending_favs))
|
||||
|
||||
if [ "$last_path" -gt "$TOTAL_LAST_PATH" ]; then
|
||||
TOTAL_LAST_PATH=$last_path
|
||||
fi
|
||||
|
||||
if [ "$SUMMARY_ONLY" = "" ]; then
|
||||
|
||||
# Warnings in red
|
||||
TIMEOUT_PERC=$((exec_timeout * 100 / execs_done))
|
||||
if [ $TIMEOUT_PERC -ge 10 ]; then
|
||||
echo " ${RED}timeout_ratio $TIMEOUT_PERC%${NC}"
|
||||
fi
|
||||
|
||||
if [ $EXEC_SEC -lt 100 ]; then
|
||||
echo " ${RED}slow execution, $EXEC_SEC execs/sec${NC}"
|
||||
fi
|
||||
|
||||
fmt_duration $last_path && FMT_PATH=$DUR_STRING
|
||||
fmt_duration $last_crash && FMT_CRASH=$DUR_STRING
|
||||
fmt_duration $last_hang && FMT_HANG=$DUR_STRING
|
||||
FMT_CWOP="not available"
|
||||
test -n "$cycles_wo_finds" && {
|
||||
test "$cycles_wo_finds" = 0 && FMT_CWOP="$cycles_wo_finds"
|
||||
test "$cycles_wo_finds" -gt 10 && FMT_CWOP="${YELLOW}$cycles_wo_finds${NC}"
|
||||
test "$cycles_wo_finds" -gt 50 && FMT_CWOP="${RED}$cycles_wo_finds${NC}"
|
||||
}
|
||||
|
||||
echo " last_path : $FMT_PATH"
|
||||
echo " last_crash : $FMT_CRASH"
|
||||
echo " last_hang : $FMT_HANG"
|
||||
echo " cycles_wo_finds : $FMT_CWOP"
|
||||
|
||||
CPU_USAGE=$(ps aux | grep $fuzzer_pid | grep -v grep | awk '{print $3}')
|
||||
MEM_USAGE=$(ps aux | grep $fuzzer_pid | grep -v grep | awk '{print $4}')
|
||||
|
||||
echo " cpu usage $CPU_USAGE%, memory usage $MEM_USAGE%"
|
||||
echo " cycle $((cycles_done + 1)), lifetime speed $EXEC_SEC execs/sec, path $cur_path/$paths_total (${PATH_PERC}%)"
|
||||
|
||||
if [ "$unique_crashes" = "0" ]; then
|
||||
@ -132,11 +221,28 @@ for i in `find . -maxdepth 2 -iname fuzzer_stats | sort`; do
|
||||
|
||||
done
|
||||
|
||||
# Formatting for total time, time since last path, crash, and hang
|
||||
fmt_duration $((CUR_TIME - TOTAL_TIME)) && FMT_TIME=$DUR_STRING
|
||||
# Formatting for total execution
|
||||
FMT_EXECS="0 millions"
|
||||
EXECS_MILLION=$((TOTAL_EXECS / 1000 / 1000))
|
||||
EXECS_THOUSAND=$((TOTAL_EXECS / 1000 % 1000))
|
||||
if [ $EXECS_MILLION -gt 9 ]; then
|
||||
FMT_EXECS="$EXECS_MILLION millions"
|
||||
elif [ $EXECS_MILLION -gt 0 ]; then
|
||||
FMT_EXECS="$EXECS_MILLION millions, $EXECS_THOUSAND thousands"
|
||||
else
|
||||
FMT_EXECS="$EXECS_THOUSAND thousands"
|
||||
fi
|
||||
|
||||
rm -f "$TMP"
|
||||
|
||||
TOTAL_DAYS=$((TOTAL_TIME / 60 / 60 / 24))
|
||||
TOTAL_HRS=$(((TOTAL_TIME / 60 / 60) % 24))
|
||||
|
||||
test -z "$TOTAL_WCOP" && TOTAL_WCOP="not available"
|
||||
fmt_duration $TOTAL_LAST_PATH && TOTAL_LAST_PATH=$DUR_STRING
|
||||
|
||||
test "$TOTAL_TIME" = "0" && TOTAL_TIME=1
|
||||
|
||||
echo "Summary stats"
|
||||
@ -148,9 +254,12 @@ if [ ! "$DEAD_CNT" = "0" ]; then
|
||||
echo " Dead or remote : $DEAD_CNT (excluded from stats)"
|
||||
fi
|
||||
|
||||
echo " Total run time : $TOTAL_DAYS days, $TOTAL_HRS hours"
|
||||
echo " Total execs : $((TOTAL_EXECS / 1000 / 1000)) million"
|
||||
echo " Total run time : $FMT_TIME"
|
||||
echo " Total execs : $FMT_EXECS"
|
||||
echo " Cumulative speed : $TOTAL_EPS execs/sec"
|
||||
if [ "$ALIVE_CNT" -gt "0" ]; then
|
||||
echo " Average speed : $((TOTAL_EPS / ALIVE_CNT)) execs/sec"
|
||||
fi
|
||||
echo " Pending paths : $TOTAL_PFAV faves, $TOTAL_PENDING total"
|
||||
|
||||
if [ "$ALIVE_CNT" -gt "1" ]; then
|
||||
@ -158,6 +267,8 @@ if [ "$ALIVE_CNT" -gt "1" ]; then
|
||||
fi
|
||||
|
||||
echo " Crashes found : $TOTAL_CRASHES locally unique"
|
||||
echo "Cycles without finds : $TOTAL_WCOP"
|
||||
echo " Time without finds : $TOTAL_LAST_PATH"
|
||||
echo
|
||||
|
||||
exit 0
|
||||
|
75
afl-wine-trace
Executable file
75
afl-wine-trace
Executable file
@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import pefile
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print("[afl-wine-trace] usage: ./afl-wine-trace binary [args...]\n")
|
||||
exit(1)
|
||||
|
||||
if os.getenv("AFL_PATH"):
|
||||
my_dir = os.getenv("AFL_PATH")
|
||||
else:
|
||||
my_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
os.environ["WINELOADERNOEXEC"] = "1"
|
||||
|
||||
pe = pefile.PE(sys.argv[1])
|
||||
|
||||
if "AFL_ENTRYPOINT" not in os.environ:
|
||||
os.environ["AFL_ENTRYPOINT"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.AddressOfEntryPoint)
|
||||
if not os.getenv("AFL_INST_LIBS"):
|
||||
if "AFL_CODE_START" not in os.environ:
|
||||
os.environ["AFL_CODE_START"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode)
|
||||
if "AFL_CODE_END" not in os.environ:
|
||||
os.environ["AFL_CODE_END"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode + pe.OPTIONAL_HEADER.SizeOfCode)
|
||||
|
||||
if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]:
|
||||
os.environ["LD_PRELOAD"] = os.path.join(my_dir, "qemu_mode/unsigaction/unsigaction64.so")
|
||||
else:
|
||||
os.environ["LD_PRELOAD"] = os.path.join(my_dir, "qemu_mode/unsigaction/unsigaction32.so")
|
||||
|
||||
if os.getenv("WINECOV_QEMU_PATH"):
|
||||
qemu_path = os.getenv("WINECOV_QEMU_PATH")
|
||||
elif os.path.exists(os.path.join(my_dir, "afl-qemu-trace")):
|
||||
qemu_path = os.path.join(my_dir, "afl-qemu-trace")
|
||||
else:
|
||||
qemu_path = "qemu-"
|
||||
if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]:
|
||||
qemu_path += "x86_64"
|
||||
elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]:
|
||||
qemu_path += "i386"
|
||||
else:
|
||||
print ("[afl-wine-trace] unsuppoted architecture\n")
|
||||
exit(1)
|
||||
qemu_path = shutil.which(qemu_path)
|
||||
|
||||
wine_path = None
|
||||
if os.getenv("AFL_WINE_PATH"):
|
||||
wine_path = os.getenv("AFL_WINE_PATH")
|
||||
else:
|
||||
if not wine_path and shutil.which("wine"):
|
||||
wine_path = shutil.which("wine")
|
||||
if not wine_path and os.path.exists("/usr/bin/wine"):
|
||||
wine_path = "/usr/bin/wine"
|
||||
if not wine_path and os.path.exists("/usr/lib/wine/wine"):
|
||||
wine_path = "/usr/lib/wine/wine"
|
||||
if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]:
|
||||
wine_path += "64"
|
||||
elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]:
|
||||
pass
|
||||
else:
|
||||
print ("[afl-wine-trace] unsopported architecture\n")
|
||||
exit(1)
|
||||
|
||||
argv = sys.argv[1:]
|
||||
for i in range(len(argv)):
|
||||
if ".cur_input" in argv[i]:
|
||||
argv[i] = subprocess.run([os.path.join(os.path.dirname(wine_path), "winepath"), "--windows", argv[i]], universal_newlines=True, stdout=subprocess.PIPE).stdout
|
||||
break
|
||||
|
||||
print("[afl-wine-trace] exec:", " ".join([qemu_path, wine_path] + argv))
|
||||
os.execve(qemu_path, [qemu_path, wine_path] + argv, os.environ)
|
570
alloc-inl.h
570
alloc-inl.h
@ -1,570 +0,0 @@
|
||||
/*
|
||||
american fuzzy lop - error-checking, memory-zeroing alloc routines
|
||||
------------------------------------------------------------------
|
||||
|
||||
Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
|
||||
Copyright 2013, 2014, 2015 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
This allocator is not designed to resist malicious attackers (the canaries
|
||||
are small and predictable), but provides a robust and portable way to detect
|
||||
use-after-free, off-by-one writes, stale pointers, and so on.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _HAVE_ALLOC_INL_H
|
||||
#define _HAVE_ALLOC_INL_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "types.h"
|
||||
#include "debug.h"
|
||||
|
||||
/* User-facing macro to sprintf() to a dynamically allocated buffer. */
|
||||
|
||||
#define alloc_printf(_str...) ({ \
|
||||
u8* _tmp; \
|
||||
s32 _len = snprintf(NULL, 0, _str); \
|
||||
if (_len < 0) FATAL("Whoa, snprintf() fails?!"); \
|
||||
_tmp = ck_alloc(_len + 1); \
|
||||
snprintf((char*)_tmp, _len + 1, _str); \
|
||||
_tmp; \
|
||||
})
|
||||
|
||||
/* Macro to enforce allocation limits as a last-resort defense against
|
||||
integer overflows. */
|
||||
|
||||
#define ALLOC_CHECK_SIZE(_s) do { \
|
||||
if ((_s) > MAX_ALLOC) \
|
||||
ABORT("Bad alloc request: %u bytes", (_s)); \
|
||||
} while (0)
|
||||
|
||||
/* Macro to check malloc() failures and the like. */
|
||||
|
||||
#define ALLOC_CHECK_RESULT(_r, _s) do { \
|
||||
if (!(_r)) \
|
||||
ABORT("Out of memory: can't allocate %u bytes", (_s)); \
|
||||
} while (0)
|
||||
|
||||
/* Magic tokens used to mark used / freed chunks. */
|
||||
|
||||
#define ALLOC_MAGIC_C1 0xFF00FF00 /* Used head (dword) */
|
||||
#define ALLOC_MAGIC_F 0xFE00FE00 /* Freed head (dword) */
|
||||
#define ALLOC_MAGIC_C2 0xF0 /* Used tail (byte) */
|
||||
|
||||
/* Positions of guard tokens in relation to the user-visible pointer. */
|
||||
|
||||
#define ALLOC_C1(_ptr) (((u32*)(_ptr))[-2])
|
||||
#define ALLOC_S(_ptr) (((u32*)(_ptr))[-1])
|
||||
#define ALLOC_C2(_ptr) (((u8*)(_ptr))[ALLOC_S(_ptr)])
|
||||
|
||||
#define ALLOC_OFF_HEAD 8
|
||||
#define ALLOC_OFF_TOTAL (ALLOC_OFF_HEAD + 1)
|
||||
|
||||
/* Allocator increments for ck_realloc_block(). */
|
||||
|
||||
#define ALLOC_BLK_INC 256
|
||||
|
||||
/* Sanity-checking macros for pointers. */
|
||||
|
||||
#define CHECK_PTR(_p) do { \
|
||||
if (_p) { \
|
||||
if (ALLOC_C1(_p) ^ ALLOC_MAGIC_C1) {\
|
||||
if (ALLOC_C1(_p) == ALLOC_MAGIC_F) \
|
||||
ABORT("Use after free."); \
|
||||
else ABORT("Corrupted head alloc canary."); \
|
||||
} \
|
||||
if (ALLOC_C2(_p) ^ ALLOC_MAGIC_C2) \
|
||||
ABORT("Corrupted tail alloc canary."); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define CHECK_PTR_EXPR(_p) ({ \
|
||||
typeof (_p) _tmp = (_p); \
|
||||
CHECK_PTR(_tmp); \
|
||||
_tmp; \
|
||||
})
|
||||
|
||||
|
||||
/* Allocate a buffer, explicitly not zeroing it. Returns NULL for zero-sized
|
||||
requests. */
|
||||
|
||||
static inline void* DFL_ck_alloc_nozero(u32 size) {
|
||||
|
||||
void* ret;
|
||||
|
||||
if (!size) return NULL;
|
||||
|
||||
ALLOC_CHECK_SIZE(size);
|
||||
ret = malloc(size + ALLOC_OFF_TOTAL);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
ret += ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_C1(ret) = ALLOC_MAGIC_C1;
|
||||
ALLOC_S(ret) = size;
|
||||
ALLOC_C2(ret) = ALLOC_MAGIC_C2;
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Allocate a buffer, returning zeroed memory. */
|
||||
|
||||
static inline void* DFL_ck_alloc(u32 size) {
|
||||
|
||||
void* mem;
|
||||
|
||||
if (!size) return NULL;
|
||||
mem = DFL_ck_alloc_nozero(size);
|
||||
|
||||
return memset(mem, 0, size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Free memory, checking for double free and corrupted heap. When DEBUG_BUILD
|
||||
is set, the old memory will be also clobbered with 0xFF. */
|
||||
|
||||
static inline void DFL_ck_free(void* mem) {
|
||||
|
||||
if (!mem) return;
|
||||
|
||||
CHECK_PTR(mem);
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
|
||||
/* Catch pointer issues sooner. */
|
||||
memset(mem, 0xFF, ALLOC_S(mem));
|
||||
|
||||
#endif /* DEBUG_BUILD */
|
||||
|
||||
ALLOC_C1(mem) = ALLOC_MAGIC_F;
|
||||
|
||||
free(mem - ALLOC_OFF_HEAD);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Re-allocate a buffer, checking for issues and zeroing any newly-added tail.
|
||||
With DEBUG_BUILD, the buffer is always reallocated to a new addresses and the
|
||||
old memory is clobbered with 0xFF. */
|
||||
|
||||
static inline void* DFL_ck_realloc(void* orig, u32 size) {
|
||||
|
||||
void* ret;
|
||||
u32 old_size = 0;
|
||||
|
||||
if (!size) {
|
||||
|
||||
DFL_ck_free(orig);
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
if (orig) {
|
||||
|
||||
CHECK_PTR(orig);
|
||||
|
||||
#ifndef DEBUG_BUILD
|
||||
ALLOC_C1(orig) = ALLOC_MAGIC_F;
|
||||
#endif /* !DEBUG_BUILD */
|
||||
|
||||
old_size = ALLOC_S(orig);
|
||||
orig -= ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_CHECK_SIZE(old_size);
|
||||
|
||||
}
|
||||
|
||||
ALLOC_CHECK_SIZE(size);
|
||||
|
||||
#ifndef DEBUG_BUILD
|
||||
|
||||
ret = realloc(orig, size + ALLOC_OFF_TOTAL);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
#else
|
||||
|
||||
/* Catch pointer issues sooner: force relocation and make sure that the
|
||||
original buffer is wiped. */
|
||||
|
||||
ret = malloc(size + ALLOC_OFF_TOTAL);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
if (orig) {
|
||||
|
||||
memcpy(ret + ALLOC_OFF_HEAD, orig + ALLOC_OFF_HEAD, MIN(size, old_size));
|
||||
memset(orig + ALLOC_OFF_HEAD, 0xFF, old_size);
|
||||
|
||||
ALLOC_C1(orig + ALLOC_OFF_HEAD) = ALLOC_MAGIC_F;
|
||||
|
||||
free(orig);
|
||||
|
||||
}
|
||||
|
||||
#endif /* ^!DEBUG_BUILD */
|
||||
|
||||
ret += ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_C1(ret) = ALLOC_MAGIC_C1;
|
||||
ALLOC_S(ret) = size;
|
||||
ALLOC_C2(ret) = ALLOC_MAGIC_C2;
|
||||
|
||||
if (size > old_size)
|
||||
memset(ret + old_size, 0, size - old_size);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Re-allocate a buffer with ALLOC_BLK_INC increments (used to speed up
|
||||
repeated small reallocs without complicating the user code). */
|
||||
|
||||
static inline void* DFL_ck_realloc_block(void* orig, u32 size) {
|
||||
|
||||
#ifndef DEBUG_BUILD
|
||||
|
||||
if (orig) {
|
||||
|
||||
CHECK_PTR(orig);
|
||||
|
||||
if (ALLOC_S(orig) >= size) return orig;
|
||||
|
||||
size += ALLOC_BLK_INC;
|
||||
|
||||
}
|
||||
|
||||
#endif /* !DEBUG_BUILD */
|
||||
|
||||
return DFL_ck_realloc(orig, size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Create a buffer with a copy of a string. Returns NULL for NULL inputs. */
|
||||
|
||||
static inline u8* DFL_ck_strdup(u8* str) {
|
||||
|
||||
void* ret;
|
||||
u32 size;
|
||||
|
||||
if (!str) return NULL;
|
||||
|
||||
size = strlen((char*)str) + 1;
|
||||
|
||||
ALLOC_CHECK_SIZE(size);
|
||||
ret = malloc(size + ALLOC_OFF_TOTAL);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
ret += ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_C1(ret) = ALLOC_MAGIC_C1;
|
||||
ALLOC_S(ret) = size;
|
||||
ALLOC_C2(ret) = ALLOC_MAGIC_C2;
|
||||
|
||||
return memcpy(ret, str, size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Create a buffer with a copy of a memory block. Returns NULL for zero-sized
|
||||
or NULL inputs. */
|
||||
|
||||
static inline void* DFL_ck_memdup(void* mem, u32 size) {
|
||||
|
||||
void* ret;
|
||||
|
||||
if (!mem || !size) return NULL;
|
||||
|
||||
ALLOC_CHECK_SIZE(size);
|
||||
ret = malloc(size + ALLOC_OFF_TOTAL);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
ret += ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_C1(ret) = ALLOC_MAGIC_C1;
|
||||
ALLOC_S(ret) = size;
|
||||
ALLOC_C2(ret) = ALLOC_MAGIC_C2;
|
||||
|
||||
return memcpy(ret, mem, size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Create a buffer with a block of text, appending a NUL terminator at the end.
|
||||
Returns NULL for zero-sized or NULL inputs. */
|
||||
|
||||
static inline u8* DFL_ck_memdup_str(u8* mem, u32 size) {
|
||||
|
||||
u8* ret;
|
||||
|
||||
if (!mem || !size) return NULL;
|
||||
|
||||
ALLOC_CHECK_SIZE(size);
|
||||
ret = malloc(size + ALLOC_OFF_TOTAL + 1);
|
||||
ALLOC_CHECK_RESULT(ret, size);
|
||||
|
||||
ret += ALLOC_OFF_HEAD;
|
||||
|
||||
ALLOC_C1(ret) = ALLOC_MAGIC_C1;
|
||||
ALLOC_S(ret) = size;
|
||||
ALLOC_C2(ret) = ALLOC_MAGIC_C2;
|
||||
|
||||
memcpy(ret, mem, size);
|
||||
ret[size] = 0;
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#ifndef DEBUG_BUILD
|
||||
|
||||
/* In non-debug mode, we just do straightforward aliasing of the above functions
|
||||
to user-visible names such as ck_alloc(). */
|
||||
|
||||
#define ck_alloc DFL_ck_alloc
|
||||
#define ck_alloc_nozero DFL_ck_alloc_nozero
|
||||
#define ck_realloc DFL_ck_realloc
|
||||
#define ck_realloc_block DFL_ck_realloc_block
|
||||
#define ck_strdup DFL_ck_strdup
|
||||
#define ck_memdup DFL_ck_memdup
|
||||
#define ck_memdup_str DFL_ck_memdup_str
|
||||
#define ck_free DFL_ck_free
|
||||
|
||||
#define alloc_report()
|
||||
|
||||
#else
|
||||
|
||||
/* In debugging mode, we also track allocations to detect memory leaks, and the
|
||||
flow goes through one more layer of indirection. */
|
||||
|
||||
/* Alloc tracking data structures: */
|
||||
|
||||
#define ALLOC_BUCKETS 4096
|
||||
|
||||
struct TRK_obj {
|
||||
void *ptr;
|
||||
char *file, *func;
|
||||
u32 line;
|
||||
};
|
||||
|
||||
#ifdef AFL_MAIN
|
||||
|
||||
struct TRK_obj* TRK[ALLOC_BUCKETS];
|
||||
u32 TRK_cnt[ALLOC_BUCKETS];
|
||||
|
||||
# define alloc_report() TRK_report()
|
||||
|
||||
#else
|
||||
|
||||
extern struct TRK_obj* TRK[ALLOC_BUCKETS];
|
||||
extern u32 TRK_cnt[ALLOC_BUCKETS];
|
||||
|
||||
# define alloc_report()
|
||||
|
||||
#endif /* ^AFL_MAIN */
|
||||
|
||||
/* Bucket-assigning function for a given pointer: */
|
||||
|
||||
#define TRKH(_ptr) (((((u32)(_ptr)) >> 16) ^ ((u32)(_ptr))) % ALLOC_BUCKETS)
|
||||
|
||||
|
||||
/* Add a new entry to the list of allocated objects. */
|
||||
|
||||
static inline void TRK_alloc_buf(void* ptr, const char* file, const char* func,
|
||||
u32 line) {
|
||||
|
||||
u32 i, bucket;
|
||||
|
||||
if (!ptr) return;
|
||||
|
||||
bucket = TRKH(ptr);
|
||||
|
||||
/* Find a free slot in the list of entries for that bucket. */
|
||||
|
||||
for (i = 0; i < TRK_cnt[bucket]; i++)
|
||||
|
||||
if (!TRK[bucket][i].ptr) {
|
||||
|
||||
TRK[bucket][i].ptr = ptr;
|
||||
TRK[bucket][i].file = (char*)file;
|
||||
TRK[bucket][i].func = (char*)func;
|
||||
TRK[bucket][i].line = line;
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
/* No space available - allocate more. */
|
||||
|
||||
TRK[bucket] = DFL_ck_realloc_block(TRK[bucket],
|
||||
(TRK_cnt[bucket] + 1) * sizeof(struct TRK_obj));
|
||||
|
||||
TRK[bucket][i].ptr = ptr;
|
||||
TRK[bucket][i].file = (char*)file;
|
||||
TRK[bucket][i].func = (char*)func;
|
||||
TRK[bucket][i].line = line;
|
||||
|
||||
TRK_cnt[bucket]++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Remove entry from the list of allocated objects. */
|
||||
|
||||
static inline void TRK_free_buf(void* ptr, const char* file, const char* func,
|
||||
u32 line) {
|
||||
|
||||
u32 i, bucket;
|
||||
|
||||
if (!ptr) return;
|
||||
|
||||
bucket = TRKH(ptr);
|
||||
|
||||
/* Find the element on the list... */
|
||||
|
||||
for (i = 0; i < TRK_cnt[bucket]; i++)
|
||||
|
||||
if (TRK[bucket][i].ptr == ptr) {
|
||||
|
||||
TRK[bucket][i].ptr = 0;
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
WARNF("ALLOC: Attempt to free non-allocated memory in %s (%s:%u)",
|
||||
func, file, line);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Do a final report on all non-deallocated objects. */
|
||||
|
||||
static inline void TRK_report(void) {
|
||||
|
||||
u32 i, bucket;
|
||||
|
||||
fflush(0);
|
||||
|
||||
for (bucket = 0; bucket < ALLOC_BUCKETS; bucket++)
|
||||
for (i = 0; i < TRK_cnt[bucket]; i++)
|
||||
if (TRK[bucket][i].ptr)
|
||||
WARNF("ALLOC: Memory never freed, created in %s (%s:%u)",
|
||||
TRK[bucket][i].func, TRK[bucket][i].file, TRK[bucket][i].line);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Simple wrappers for non-debugging functions: */
|
||||
|
||||
static inline void* TRK_ck_alloc(u32 size, const char* file, const char* func,
|
||||
u32 line) {
|
||||
|
||||
void* ret = DFL_ck_alloc(size);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void* TRK_ck_realloc(void* orig, u32 size, const char* file,
|
||||
const char* func, u32 line) {
|
||||
|
||||
void* ret = DFL_ck_realloc(orig, size);
|
||||
TRK_free_buf(orig, file, func, line);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void* TRK_ck_realloc_block(void* orig, u32 size, const char* file,
|
||||
const char* func, u32 line) {
|
||||
|
||||
void* ret = DFL_ck_realloc_block(orig, size);
|
||||
TRK_free_buf(orig, file, func, line);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void* TRK_ck_strdup(u8* str, const char* file, const char* func,
|
||||
u32 line) {
|
||||
|
||||
void* ret = DFL_ck_strdup(str);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void* TRK_ck_memdup(void* mem, u32 size, const char* file,
|
||||
const char* func, u32 line) {
|
||||
|
||||
void* ret = DFL_ck_memdup(mem, size);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void* TRK_ck_memdup_str(void* mem, u32 size, const char* file,
|
||||
const char* func, u32 line) {
|
||||
|
||||
void* ret = DFL_ck_memdup_str(mem, size);
|
||||
TRK_alloc_buf(ret, file, func, line);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static inline void TRK_ck_free(void* ptr, const char* file,
|
||||
const char* func, u32 line) {
|
||||
|
||||
TRK_free_buf(ptr, file, func, line);
|
||||
DFL_ck_free(ptr);
|
||||
|
||||
}
|
||||
|
||||
/* Aliasing user-facing names to tracking functions: */
|
||||
|
||||
#define ck_alloc(_p1) \
|
||||
TRK_ck_alloc(_p1, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_alloc_nozero(_p1) \
|
||||
TRK_ck_alloc(_p1, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_realloc(_p1, _p2) \
|
||||
TRK_ck_realloc(_p1, _p2, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_realloc_block(_p1, _p2) \
|
||||
TRK_ck_realloc_block(_p1, _p2, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_strdup(_p1) \
|
||||
TRK_ck_strdup(_p1, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_memdup(_p1, _p2) \
|
||||
TRK_ck_memdup(_p1, _p2, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_memdup_str(_p1, _p2) \
|
||||
TRK_ck_memdup_str(_p1, _p2, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#define ck_free(_p1) \
|
||||
TRK_ck_free(_p1, __FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
#endif /* ^!DEBUG_BUILD */
|
||||
|
||||
#endif /* ! _HAVE_ALLOC_INL_H */
|
354
config.h
354
config.h
@ -1,354 +0,0 @@
|
||||
/*
|
||||
american fuzzy lop plus plus - vaguely configurable bits
|
||||
----------------------------------------------
|
||||
|
||||
Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
|
||||
Copyright 2013, 2014, 2015, 2016 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _HAVE_CONFIG_H
|
||||
#define _HAVE_CONFIG_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
/* Version string: */
|
||||
|
||||
#define VERSION "++2.52c"
|
||||
|
||||
/******************************************************
|
||||
* *
|
||||
* Settings that may be of interest to power users: *
|
||||
* *
|
||||
******************************************************/
|
||||
|
||||
/* Comment out to disable terminal colors (note that this makes afl-analyze
|
||||
a lot less nice): */
|
||||
|
||||
#define USE_COLOR
|
||||
|
||||
/* Comment out to disable fancy ANSI boxes and use poor man's 7-bit UI: */
|
||||
|
||||
#define FANCY_BOXES
|
||||
|
||||
/* Default timeout for fuzzed code (milliseconds). This is the upper bound,
|
||||
also used for detecting hangs; the actual value is auto-scaled: */
|
||||
|
||||
#define EXEC_TIMEOUT 1000
|
||||
|
||||
/* Timeout rounding factor when auto-scaling (milliseconds): */
|
||||
|
||||
#define EXEC_TM_ROUND 20
|
||||
|
||||
/* Default memory limit for child process (MB): */
|
||||
|
||||
#ifndef __x86_64__
|
||||
# define MEM_LIMIT 25
|
||||
#else
|
||||
# define MEM_LIMIT 50
|
||||
#endif /* ^!__x86_64__ */
|
||||
|
||||
/* Default memory limit when running in QEMU mode (MB): */
|
||||
|
||||
#define MEM_LIMIT_QEMU 200
|
||||
|
||||
/* Number of calibration cycles per every new test case (and for test
|
||||
cases that show variable behavior): */
|
||||
|
||||
#define CAL_CYCLES 8
|
||||
#define CAL_CYCLES_LONG 40
|
||||
|
||||
/* Number of subsequent timeouts before abandoning an input file: */
|
||||
|
||||
#define TMOUT_LIMIT 250
|
||||
|
||||
/* Maximum number of unique hangs or crashes to record: */
|
||||
|
||||
#define KEEP_UNIQUE_HANG 500
|
||||
#define KEEP_UNIQUE_CRASH 5000
|
||||
|
||||
/* Baseline number of random tweaks during a single 'havoc' stage: */
|
||||
|
||||
#define HAVOC_CYCLES 256
|
||||
#define HAVOC_CYCLES_INIT 1024
|
||||
|
||||
/* Maximum multiplier for the above (should be a power of two, beware
|
||||
of 32-bit int overflows): */
|
||||
|
||||
#define HAVOC_MAX_MULT 16
|
||||
|
||||
/* Absolute minimum number of havoc cycles (after all adjustments): */
|
||||
|
||||
#define HAVOC_MIN 16
|
||||
|
||||
/* Power Schedule Divisor */
|
||||
#define POWER_BETA 1
|
||||
#define MAX_FACTOR (POWER_BETA * 32)
|
||||
|
||||
/* Maximum stacking for havoc-stage tweaks. The actual value is calculated
|
||||
like this:
|
||||
|
||||
n = random between 1 and HAVOC_STACK_POW2
|
||||
stacking = 2^n
|
||||
|
||||
In other words, the default (n = 7) produces 2, 4, 8, 16, 32, 64, or
|
||||
128 stacked tweaks: */
|
||||
|
||||
#define HAVOC_STACK_POW2 7
|
||||
|
||||
/* Caps on block sizes for cloning and deletion operations. Each of these
|
||||
ranges has a 33% probability of getting picked, except for the first
|
||||
two cycles where smaller blocks are favored: */
|
||||
|
||||
#define HAVOC_BLK_SMALL 32
|
||||
#define HAVOC_BLK_MEDIUM 128
|
||||
#define HAVOC_BLK_LARGE 1500
|
||||
|
||||
/* Extra-large blocks, selected very rarely (<5% of the time): */
|
||||
|
||||
#define HAVOC_BLK_XL 32768
|
||||
|
||||
/* Probabilities of skipping non-favored entries in the queue, expressed as
|
||||
percentages: */
|
||||
|
||||
#define SKIP_TO_NEW_PROB 99 /* ...when there are new, pending favorites */
|
||||
#define SKIP_NFAV_OLD_PROB 95 /* ...no new favs, cur entry already fuzzed */
|
||||
#define SKIP_NFAV_NEW_PROB 75 /* ...no new favs, cur entry not fuzzed yet */
|
||||
|
||||
/* Splicing cycle count: */
|
||||
|
||||
#define SPLICE_CYCLES 15
|
||||
|
||||
/* Nominal per-splice havoc cycle length: */
|
||||
|
||||
#define SPLICE_HAVOC 32
|
||||
|
||||
/* Maximum offset for integer addition / subtraction stages: */
|
||||
|
||||
#define ARITH_MAX 35
|
||||
|
||||
/* Limits for the test case trimmer. The absolute minimum chunk size; and
|
||||
the starting and ending divisors for chopping up the input file: */
|
||||
|
||||
#define TRIM_MIN_BYTES 4
|
||||
#define TRIM_START_STEPS 16
|
||||
#define TRIM_END_STEPS 1024
|
||||
|
||||
/* Maximum size of input file, in bytes (keep under 100MB): */
|
||||
|
||||
#define MAX_FILE (1 * 1024 * 1024)
|
||||
|
||||
/* The same, for the test case minimizer: */
|
||||
|
||||
#define TMIN_MAX_FILE (10 * 1024 * 1024)
|
||||
|
||||
/* Block normalization steps for afl-tmin: */
|
||||
|
||||
#define TMIN_SET_MIN_SIZE 4
|
||||
#define TMIN_SET_STEPS 128
|
||||
|
||||
/* Maximum dictionary token size (-x), in bytes: */
|
||||
|
||||
#define MAX_DICT_FILE 128
|
||||
|
||||
/* Length limits for auto-detected dictionary tokens: */
|
||||
|
||||
#define MIN_AUTO_EXTRA 3
|
||||
#define MAX_AUTO_EXTRA 32
|
||||
|
||||
/* Maximum number of user-specified dictionary tokens to use in deterministic
|
||||
steps; past this point, the "extras/user" step will be still carried out,
|
||||
but with proportionally lower odds: */
|
||||
|
||||
#define MAX_DET_EXTRAS 200
|
||||
|
||||
/* Maximum number of auto-extracted dictionary tokens to actually use in fuzzing
|
||||
(first value), and to keep in memory as candidates. The latter should be much
|
||||
higher than the former. */
|
||||
|
||||
#define USE_AUTO_EXTRAS 50
|
||||
#define MAX_AUTO_EXTRAS (USE_AUTO_EXTRAS * 10)
|
||||
|
||||
/* Scaling factor for the effector map used to skip some of the more
|
||||
expensive deterministic steps. The actual divisor is set to
|
||||
2^EFF_MAP_SCALE2 bytes: */
|
||||
|
||||
#define EFF_MAP_SCALE2 3
|
||||
|
||||
/* Minimum input file length at which the effector logic kicks in: */
|
||||
|
||||
#define EFF_MIN_LEN 128
|
||||
|
||||
/* Maximum effector density past which everything is just fuzzed
|
||||
unconditionally (%): */
|
||||
|
||||
#define EFF_MAX_PERC 90
|
||||
|
||||
/* UI refresh frequency (Hz): */
|
||||
|
||||
#define UI_TARGET_HZ 5
|
||||
|
||||
/* Fuzzer stats file and plot update intervals (sec): */
|
||||
|
||||
#define STATS_UPDATE_SEC 60
|
||||
#define PLOT_UPDATE_SEC 5
|
||||
|
||||
/* Smoothing divisor for CPU load and exec speed stats (1 - no smoothing). */
|
||||
|
||||
#define AVG_SMOOTHING 16
|
||||
|
||||
/* Sync interval (every n havoc cycles): */
|
||||
|
||||
#define SYNC_INTERVAL 5
|
||||
|
||||
/* Output directory reuse grace period (minutes): */
|
||||
|
||||
#define OUTPUT_GRACE 25
|
||||
|
||||
/* Uncomment to use simple file names (id_NNNNNN): */
|
||||
|
||||
// #define SIMPLE_FILES
|
||||
|
||||
/* List of interesting values to use in fuzzing. */
|
||||
|
||||
#define INTERESTING_8 \
|
||||
-128, /* Overflow signed 8-bit when decremented */ \
|
||||
-1, /* */ \
|
||||
0, /* */ \
|
||||
1, /* */ \
|
||||
16, /* One-off with common buffer size */ \
|
||||
32, /* One-off with common buffer size */ \
|
||||
64, /* One-off with common buffer size */ \
|
||||
100, /* One-off with common buffer size */ \
|
||||
127 /* Overflow signed 8-bit when incremented */
|
||||
|
||||
#define INTERESTING_16 \
|
||||
-32768, /* Overflow signed 16-bit when decremented */ \
|
||||
-129, /* Overflow signed 8-bit */ \
|
||||
128, /* Overflow signed 8-bit */ \
|
||||
255, /* Overflow unsig 8-bit when incremented */ \
|
||||
256, /* Overflow unsig 8-bit */ \
|
||||
512, /* One-off with common buffer size */ \
|
||||
1000, /* One-off with common buffer size */ \
|
||||
1024, /* One-off with common buffer size */ \
|
||||
4096, /* One-off with common buffer size */ \
|
||||
32767 /* Overflow signed 16-bit when incremented */
|
||||
|
||||
#define INTERESTING_32 \
|
||||
-2147483648LL, /* Overflow signed 32-bit when decremented */ \
|
||||
-100663046, /* Large negative number (endian-agnostic) */ \
|
||||
-32769, /* Overflow signed 16-bit */ \
|
||||
32768, /* Overflow signed 16-bit */ \
|
||||
65535, /* Overflow unsig 16-bit when incremented */ \
|
||||
65536, /* Overflow unsig 16 bit */ \
|
||||
100663045, /* Large positive number (endian-agnostic) */ \
|
||||
2147483647 /* Overflow signed 32-bit when incremented */
|
||||
|
||||
/***********************************************************
|
||||
* *
|
||||
* Really exotic stuff you probably don't want to touch: *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
/* Call count interval between reseeding the libc PRNG from /dev/urandom: */
|
||||
|
||||
#define RESEED_RNG 10000
|
||||
|
||||
/* Maximum line length passed from GCC to 'as' and used for parsing
|
||||
configuration files: */
|
||||
|
||||
#define MAX_LINE 8192
|
||||
|
||||
/* Environment variable used to pass SHM ID to the called program. */
|
||||
|
||||
#define SHM_ENV_VAR "__AFL_SHM_ID"
|
||||
|
||||
/* Other less interesting, internal-only variables. */
|
||||
|
||||
#define CLANG_ENV_VAR "__AFL_CLANG_MODE"
|
||||
#define AS_LOOP_ENV_VAR "__AFL_AS_LOOPCHECK"
|
||||
#define PERSIST_ENV_VAR "__AFL_PERSISTENT"
|
||||
#define DEFER_ENV_VAR "__AFL_DEFER_FORKSRV"
|
||||
|
||||
/* In-code signatures for deferred and persistent mode. */
|
||||
|
||||
#define PERSIST_SIG "##SIG_AFL_PERSISTENT##"
|
||||
#define DEFER_SIG "##SIG_AFL_DEFER_FORKSRV##"
|
||||
|
||||
/* Distinctive bitmap signature used to indicate failed execution: */
|
||||
|
||||
#define EXEC_FAIL_SIG 0xfee1dead
|
||||
|
||||
/* Distinctive exit code used to indicate MSAN trip condition: */
|
||||
|
||||
#define MSAN_ERROR 86
|
||||
|
||||
/* Designated file descriptors for forkserver commands (the application will
|
||||
use FORKSRV_FD and FORKSRV_FD + 1): */
|
||||
|
||||
#define FORKSRV_FD 198
|
||||
|
||||
/* Fork server init timeout multiplier: we'll wait the user-selected
|
||||
timeout plus this much for the fork server to spin up. */
|
||||
|
||||
#define FORK_WAIT_MULT 10
|
||||
|
||||
/* Calibration timeout adjustments, to be a bit more generous when resuming
|
||||
fuzzing sessions or trying to calibrate already-added internal finds.
|
||||
The first value is a percentage, the other is in milliseconds: */
|
||||
|
||||
#define CAL_TMOUT_PERC 125
|
||||
#define CAL_TMOUT_ADD 50
|
||||
|
||||
/* Number of chances to calibrate a case before giving up: */
|
||||
|
||||
#define CAL_CHANCES 3
|
||||
|
||||
/* Map size for the traced binary (2^MAP_SIZE_POW2). Must be greater than
|
||||
2; you probably want to keep it under 18 or so for performance reasons
|
||||
(adjusting AFL_INST_RATIO when compiling is probably a better way to solve
|
||||
problems with complex programs). You need to recompile the target binary
|
||||
after changing this - otherwise, SEGVs may ensue. */
|
||||
|
||||
#define MAP_SIZE_POW2 16
|
||||
#define MAP_SIZE (1 << MAP_SIZE_POW2)
|
||||
|
||||
/* Maximum allocator request size (keep well under INT_MAX): */
|
||||
|
||||
#define MAX_ALLOC 0x40000000
|
||||
|
||||
/* A made-up hashing seed: */
|
||||
|
||||
#define HASH_CONST 0xa5b35705
|
||||
|
||||
/* Constants for afl-gotcpu to control busy loop timing: */
|
||||
|
||||
#define CTEST_TARGET_MS 5000
|
||||
#define CTEST_CORE_TRG_MS 1000
|
||||
#define CTEST_BUSY_CYCLES (10 * 1000 * 1000)
|
||||
|
||||
/* Uncomment this to use inferior block-coverage-based instrumentation. Note
|
||||
that you need to recompile the target binary for this to have any effect: */
|
||||
|
||||
// #define COVERAGE_ONLY
|
||||
|
||||
/* Uncomment this to ignore hit counts and output just one bit per tuple.
|
||||
As with the previous setting, you will need to recompile the target
|
||||
binary: */
|
||||
|
||||
// #define SKIP_COUNTS
|
||||
|
||||
/* Uncomment this to use instrumentation data to record newly discovered paths,
|
||||
but do not use them as seeds for fuzzing. This is useful for conveniently
|
||||
measuring coverage that could be attained by a "dumb" fuzzing algorithm: */
|
||||
|
||||
// #define IGNORE_FINDS
|
||||
|
||||
#endif /* ! _HAVE_CONFIG_H */
|
12
custom_mutators/README.md
Normal file
12
custom_mutators/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# production ready custom mutators
|
||||
|
||||
This directory holds ready to use custom mutators.
|
||||
Just type "make" in the individual subdirectories.
|
||||
|
||||
Use with e.g.
|
||||
|
||||
`AFL_CUSTOM_MUTATOR_LIBRARY=custom_mutators/radamsa/radamsa-mutator.so afl-fuzz ....`
|
||||
|
||||
and add `AFL_CUSTOM_MUTATOR_ONLY=1` if you only want to use the custom mutator.
|
||||
|
||||
Multiple custom mutators can be used by separating their paths with `:` in the environment variable.
|
30
custom_mutators/radamsa/GNUmakefile
Normal file
30
custom_mutators/radamsa/GNUmakefile
Normal file
@ -0,0 +1,30 @@
|
||||
CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
|
||||
all: radamsa-mutator.so
|
||||
|
||||
# These can be overriden:
|
||||
CFLAGS ?= $(CFLAGS_FLTO)
|
||||
|
||||
# These are required: (otherwise radamsa gets very very slooooow)
|
||||
CFLAGS += -O3 -funroll-loops
|
||||
|
||||
#libradamsa.so: libradamsa.a
|
||||
# $(CC) $(CFLAGS) -shared libradamsa.a -o libradamsa.so
|
||||
|
||||
libradamsa.a: libradamsa.c radamsa.h
|
||||
@echo " ***************************************************************"
|
||||
@echo " * Compiling libradamsa, wait some minutes (~3 on modern CPUs) *"
|
||||
@echo " ***************************************************************"
|
||||
$(CC) -fPIC $(CFLAGS) -I $(CUR_DIR) -o libradamsa.a -c libradamsa.c
|
||||
|
||||
radamsa-mutator.so: radamsa-mutator.c libradamsa.a
|
||||
$(CC) $(CFLAGS) -g -I. -I../../include -shared -fPIC -c radamsa-mutator.c
|
||||
$(CC) $(CFLAGS) -shared -fPIC -o radamsa-mutator.so radamsa-mutator.o libradamsa.a
|
||||
|
||||
test: libradamsa.a libradamsa-test.c
|
||||
$(CC) $(CFLAGS) -I $(CUR_DIR) -o libradamsa-test libradamsa-test.c libradamsa.a
|
||||
./libradamsa-test libradamsa-test.c | grep "library test passed"
|
||||
rm /tmp/libradamsa-*.fuzz
|
||||
|
||||
clean:
|
||||
rm -f radamsa-mutator.so libradamsa.a libradamsa-test *.o *~ core
|
19
custom_mutators/radamsa/LICENSE
Normal file
19
custom_mutators/radamsa/LICENSE
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (c) 2013 Aki Helin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
9
custom_mutators/radamsa/README.md
Normal file
9
custom_mutators/radamsa/README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# custum mutator: libradamsa
|
||||
|
||||
Pretranslated radamsa library. This code belongs to the radamsa author.
|
||||
|
||||
> Original repository: https://gitlab.com/akihe/radamsa
|
||||
|
||||
> Source commit: 7b2cc2d0
|
||||
|
||||
> The code here is adapted for AFL++ with minor changes respect the original version
|
342
custom_mutators/radamsa/custom_mutator_helpers.h
Normal file
342
custom_mutators/radamsa/custom_mutator_helpers.h
Normal file
@ -0,0 +1,342 @@
|
||||
#ifndef CUSTOM_MUTATOR_HELPERS
|
||||
#define CUSTOM_MUTATOR_HELPERS
|
||||
|
||||
#include "config.h"
|
||||
#include "types.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define INITIAL_GROWTH_SIZE (64)
|
||||
|
||||
#define RAND_BELOW(limit) (rand() % (limit))
|
||||
|
||||
/* Use in a struct: creates a name_buf and a name_size variable. */
|
||||
#define BUF_VAR(type, name) \
|
||||
type * name##_buf; \
|
||||
size_t name##_size;
|
||||
/* this filles in `&structptr->something_buf, &structptr->something_size`. */
|
||||
#define BUF_PARAMS(struct, name) \
|
||||
(void **)&struct->name##_buf, &struct->name##_size
|
||||
|
||||
typedef struct {
|
||||
|
||||
} afl_t;
|
||||
|
||||
static void surgical_havoc_mutate(u8 *out_buf, s32 begin, s32 end) {
|
||||
|
||||
static s8 interesting_8[] = {INTERESTING_8};
|
||||
static s16 interesting_16[] = {INTERESTING_8, INTERESTING_16};
|
||||
static s32 interesting_32[] = {INTERESTING_8, INTERESTING_16, INTERESTING_32};
|
||||
|
||||
switch (RAND_BELOW(12)) {
|
||||
|
||||
case 0: {
|
||||
|
||||
/* Flip a single bit somewhere. Spooky! */
|
||||
|
||||
s32 bit_idx = ((RAND_BELOW(end - begin) + begin) << 3) + RAND_BELOW(8);
|
||||
|
||||
out_buf[bit_idx >> 3] ^= 128 >> (bit_idx & 7);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 1: {
|
||||
|
||||
/* Set byte to interesting value. */
|
||||
|
||||
u8 val = interesting_8[RAND_BELOW(sizeof(interesting_8))];
|
||||
out_buf[(RAND_BELOW(end - begin) + begin)] = val;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 2: {
|
||||
|
||||
/* Set word to interesting value, randomly choosing endian. */
|
||||
|
||||
if (end - begin < 2) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 1) break;
|
||||
|
||||
switch (RAND_BELOW(2)) {
|
||||
|
||||
case 0:
|
||||
*(u16 *)(out_buf + byte_idx) =
|
||||
interesting_16[RAND_BELOW(sizeof(interesting_16) >> 1)];
|
||||
break;
|
||||
case 1:
|
||||
*(u16 *)(out_buf + byte_idx) =
|
||||
SWAP16(interesting_16[RAND_BELOW(sizeof(interesting_16) >> 1)]);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 3: {
|
||||
|
||||
/* Set dword to interesting value, randomly choosing endian. */
|
||||
|
||||
if (end - begin < 4) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 3) break;
|
||||
|
||||
switch (RAND_BELOW(2)) {
|
||||
|
||||
case 0:
|
||||
*(u32 *)(out_buf + byte_idx) =
|
||||
interesting_32[RAND_BELOW(sizeof(interesting_32) >> 2)];
|
||||
break;
|
||||
case 1:
|
||||
*(u32 *)(out_buf + byte_idx) =
|
||||
SWAP32(interesting_32[RAND_BELOW(sizeof(interesting_32) >> 2)]);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 4: {
|
||||
|
||||
/* Set qword to interesting value, randomly choosing endian. */
|
||||
|
||||
if (end - begin < 8) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 7) break;
|
||||
|
||||
switch (RAND_BELOW(2)) {
|
||||
|
||||
case 0:
|
||||
*(u64 *)(out_buf + byte_idx) =
|
||||
(s64)interesting_32[RAND_BELOW(sizeof(interesting_32) >> 2)];
|
||||
break;
|
||||
case 1:
|
||||
*(u64 *)(out_buf + byte_idx) = SWAP64(
|
||||
(s64)interesting_32[RAND_BELOW(sizeof(interesting_32) >> 2)]);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 5: {
|
||||
|
||||
/* Randomly subtract from byte. */
|
||||
|
||||
out_buf[(RAND_BELOW(end - begin) + begin)] -= 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 6: {
|
||||
|
||||
/* Randomly add to byte. */
|
||||
|
||||
out_buf[(RAND_BELOW(end - begin) + begin)] += 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 7: {
|
||||
|
||||
/* Randomly subtract from word, random endian. */
|
||||
|
||||
if (end - begin < 2) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 1) break;
|
||||
|
||||
if (RAND_BELOW(2)) {
|
||||
|
||||
*(u16 *)(out_buf + byte_idx) -= 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
} else {
|
||||
|
||||
u16 num = 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
*(u16 *)(out_buf + byte_idx) =
|
||||
SWAP16(SWAP16(*(u16 *)(out_buf + byte_idx)) - num);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 8: {
|
||||
|
||||
/* Randomly add to word, random endian. */
|
||||
|
||||
if (end - begin < 2) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 1) break;
|
||||
|
||||
if (RAND_BELOW(2)) {
|
||||
|
||||
*(u16 *)(out_buf + byte_idx) += 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
} else {
|
||||
|
||||
u16 num = 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
*(u16 *)(out_buf + byte_idx) =
|
||||
SWAP16(SWAP16(*(u16 *)(out_buf + byte_idx)) + num);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 9: {
|
||||
|
||||
/* Randomly subtract from dword, random endian. */
|
||||
|
||||
if (end - begin < 4) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 3) break;
|
||||
|
||||
if (RAND_BELOW(2)) {
|
||||
|
||||
*(u32 *)(out_buf + byte_idx) -= 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
} else {
|
||||
|
||||
u32 num = 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
*(u32 *)(out_buf + byte_idx) =
|
||||
SWAP32(SWAP32(*(u32 *)(out_buf + byte_idx)) - num);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 10: {
|
||||
|
||||
/* Randomly add to dword, random endian. */
|
||||
|
||||
if (end - begin < 4) break;
|
||||
|
||||
s32 byte_idx = (RAND_BELOW(end - begin) + begin);
|
||||
|
||||
if (byte_idx >= end - 3) break;
|
||||
|
||||
if (RAND_BELOW(2)) {
|
||||
|
||||
*(u32 *)(out_buf + byte_idx) += 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
} else {
|
||||
|
||||
u32 num = 1 + RAND_BELOW(ARITH_MAX);
|
||||
|
||||
*(u32 *)(out_buf + byte_idx) =
|
||||
SWAP32(SWAP32(*(u32 *)(out_buf + byte_idx)) + num);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 11: {
|
||||
|
||||
/* Just set a random byte to a random value. Because,
|
||||
why not. We use XOR with 1-255 to eliminate the
|
||||
possibility of a no-op. */
|
||||
|
||||
out_buf[(RAND_BELOW(end - begin) + begin)] ^= 1 + RAND_BELOW(255);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* This function calculates the next power of 2 greater or equal its argument.
|
||||
@return The rounded up power of 2 (if no overflow) or 0 on overflow.
|
||||
*/
|
||||
static inline size_t next_pow2(size_t in) {
|
||||
|
||||
if (in == 0 || in > (size_t)-1)
|
||||
return 0; /* avoid undefined behaviour under-/overflow */
|
||||
size_t out = in - 1;
|
||||
out |= out >> 1;
|
||||
out |= out >> 2;
|
||||
out |= out >> 4;
|
||||
out |= out >> 8;
|
||||
out |= out >> 16;
|
||||
return out + 1;
|
||||
|
||||
}
|
||||
|
||||
/* This function makes sure *size is > size_needed after call.
|
||||
It will realloc *buf otherwise.
|
||||
*size will grow exponentially as per:
|
||||
https://blog.mozilla.org/nnethercote/2014/11/04/please-grow-your-buffers-exponentially/
|
||||
Will return NULL and free *buf if size_needed is <1 or realloc failed.
|
||||
@return For convenience, this function returns *buf.
|
||||
*/
|
||||
static inline void *maybe_grow(void **buf, size_t *size, size_t size_needed) {
|
||||
|
||||
/* No need to realloc */
|
||||
if (likely(size_needed && *size >= size_needed)) return *buf;
|
||||
|
||||
/* No initial size was set */
|
||||
if (size_needed < INITIAL_GROWTH_SIZE) size_needed = INITIAL_GROWTH_SIZE;
|
||||
|
||||
/* grow exponentially */
|
||||
size_t next_size = next_pow2(size_needed);
|
||||
|
||||
/* handle overflow */
|
||||
if (!next_size) { next_size = size_needed; }
|
||||
|
||||
/* alloc */
|
||||
*buf = realloc(*buf, next_size);
|
||||
*size = *buf ? next_size : 0;
|
||||
|
||||
return *buf;
|
||||
|
||||
}
|
||||
|
||||
/* Swaps buf1 ptr and buf2 ptr, as well as their sizes */
|
||||
static inline void swap_bufs(void **buf1, size_t *size1, void **buf2,
|
||||
size_t *size2) {
|
||||
|
||||
void * scratch_buf = *buf1;
|
||||
size_t scratch_size = *size1;
|
||||
*buf1 = *buf2;
|
||||
*size1 = *size2;
|
||||
*buf2 = scratch_buf;
|
||||
*size2 = scratch_size;
|
||||
|
||||
}
|
||||
|
||||
#undef INITIAL_GROWTH_SIZE
|
||||
|
||||
#endif
|
||||
|
81
custom_mutators/radamsa/libradamsa-test.c
Normal file
81
custom_mutators/radamsa/libradamsa-test.c
Normal file
@ -0,0 +1,81 @@
|
||||
#include <radamsa.h>
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
size_t filesize(char *filename) {
|
||||
|
||||
struct stat st;
|
||||
stat(filename, &st);
|
||||
return st.st_size;
|
||||
|
||||
}
|
||||
|
||||
#define BUFSIZE 1024 * 1024
|
||||
|
||||
void fail(char *why) {
|
||||
|
||||
printf("fail: %s\n", why);
|
||||
exit(1);
|
||||
|
||||
}
|
||||
|
||||
void write_output(char *data, size_t len, int num) {
|
||||
|
||||
char path[32];
|
||||
int fd;
|
||||
int wrote;
|
||||
sprintf(path, "/tmp/libradamsa-%d.fuzz", num);
|
||||
fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
||||
printf("Opened %s -> %d\n", path, fd);
|
||||
if (fd < 0) { fail("failed to open output file"); }
|
||||
wrote = write(fd, data, len);
|
||||
printf("wrote %d of %zu bytes\n", wrote, len);
|
||||
if (wrote != len) { fail("failed to write all of output at once"); }
|
||||
close(fd);
|
||||
printf("Wrote %zu bytes to %s\n", len, path);
|
||||
|
||||
}
|
||||
|
||||
int main(int nargs, char **argv) {
|
||||
|
||||
char * spath = argv[1];
|
||||
int fd = open(spath, O_RDONLY, 0);
|
||||
size_t len;
|
||||
char * input;
|
||||
char * output;
|
||||
int seed = 0;
|
||||
if (fd < 0) { fail("cannot open input file"); }
|
||||
len = filesize(spath);
|
||||
input = malloc(len);
|
||||
output = malloc(BUFSIZE);
|
||||
if (!input || !output) { fail("failed to allocate buffers\n"); }
|
||||
radamsa_init();
|
||||
if (len != read(fd, input, len)) {
|
||||
|
||||
fail("failed to read the entire sample at once");
|
||||
|
||||
}
|
||||
|
||||
while (seed++ < 100) {
|
||||
|
||||
size_t n;
|
||||
n = radamsa((uint8_t *)input, len, (uint8_t *)output, BUFSIZE, seed);
|
||||
write_output(output, n, seed);
|
||||
printf("Fuzzed %zu -> %zu bytes\n", len, n);
|
||||
|
||||
}
|
||||
|
||||
printf("library test passed\n");
|
||||
free(output);
|
||||
free(input);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
61880
custom_mutators/radamsa/libradamsa.c
Normal file
61880
custom_mutators/radamsa/libradamsa.c
Normal file
File diff suppressed because it is too large
Load Diff
70
custom_mutators/radamsa/radamsa-mutator.c
Normal file
70
custom_mutators/radamsa/radamsa-mutator.c
Normal file
@ -0,0 +1,70 @@
|
||||
// This simple example just creates random buffer <= 100 filled with 'A'
|
||||
// needs -I /path/to/AFLplusplus/include
|
||||
//#include "custom_mutator_helpers.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "radamsa.h"
|
||||
#include "custom_mutator_helpers.h"
|
||||
|
||||
typedef struct my_mutator {
|
||||
|
||||
afl_t *afl;
|
||||
|
||||
u8 *mutator_buf;
|
||||
|
||||
unsigned int seed;
|
||||
|
||||
} my_mutator_t;
|
||||
|
||||
my_mutator_t *afl_custom_init(afl_t *afl, unsigned int seed) {
|
||||
|
||||
srand(seed);
|
||||
my_mutator_t *data = calloc(1, sizeof(my_mutator_t));
|
||||
if (!data) {
|
||||
|
||||
perror("afl_custom_init alloc");
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
if ((data->mutator_buf = malloc(MAX_FILE)) == NULL) {
|
||||
|
||||
perror("mutator_buf alloc");
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
data->afl = afl;
|
||||
data->seed = seed;
|
||||
|
||||
radamsa_init();
|
||||
|
||||
return data;
|
||||
|
||||
}
|
||||
|
||||
size_t afl_custom_fuzz(my_mutator_t *data, uint8_t *buf, size_t buf_size,
|
||||
u8 **out_buf, uint8_t *add_buf, size_t add_buf_size,
|
||||
size_t max_size) {
|
||||
|
||||
*out_buf = data->mutator_buf;
|
||||
return radamsa(buf, buf_size, data->mutator_buf, max_size, data->seed++);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Deinitialize everything
|
||||
*
|
||||
* @param data The data ptr from afl_custom_init
|
||||
*/
|
||||
void afl_custom_deinit(my_mutator_t *data) {
|
||||
|
||||
free(data->mutator_buf);
|
||||
free(data);
|
||||
|
||||
}
|
||||
|
10
custom_mutators/radamsa/radamsa.h
Normal file
10
custom_mutators/radamsa/radamsa.h
Normal file
@ -0,0 +1,10 @@
|
||||
#include <inttypes.h>
|
||||
#include <stddef.h>
|
||||
|
||||
void radamsa_init(void);
|
||||
|
||||
size_t radamsa(uint8_t *ptr, size_t len, uint8_t *target, size_t max,
|
||||
unsigned int seed);
|
||||
|
||||
size_t radamsa_inplace(uint8_t *ptr, size_t len, size_t max, unsigned int seed);
|
||||
|
251
debug.h
251
debug.h
@ -1,251 +0,0 @@
|
||||
/*
|
||||
american fuzzy lop - debug / error handling macros
|
||||
--------------------------------------------------
|
||||
|
||||
Written and maintained by Michal Zalewski <lcamtuf@google.com>
|
||||
|
||||
Copyright 2013, 2014, 2015, 2016 Google Inc. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _HAVE_DEBUG_H
|
||||
#define _HAVE_DEBUG_H
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "config.h"
|
||||
|
||||
/*******************
|
||||
* Terminal colors *
|
||||
*******************/
|
||||
|
||||
#ifdef USE_COLOR
|
||||
|
||||
# define cBLK "\x1b[0;30m"
|
||||
# define cRED "\x1b[0;31m"
|
||||
# define cGRN "\x1b[0;32m"
|
||||
# define cBRN "\x1b[0;33m"
|
||||
# define cBLU "\x1b[0;34m"
|
||||
# define cMGN "\x1b[0;35m"
|
||||
# define cCYA "\x1b[0;36m"
|
||||
# define cLGR "\x1b[0;37m"
|
||||
# define cGRA "\x1b[1;90m"
|
||||
# define cLRD "\x1b[1;91m"
|
||||
# define cLGN "\x1b[1;92m"
|
||||
# define cYEL "\x1b[1;93m"
|
||||
# define cLBL "\x1b[1;94m"
|
||||
# define cPIN "\x1b[1;95m"
|
||||
# define cLCY "\x1b[1;96m"
|
||||
# define cBRI "\x1b[1;97m"
|
||||
# define cRST "\x1b[0m"
|
||||
|
||||
# define bgBLK "\x1b[40m"
|
||||
# define bgRED "\x1b[41m"
|
||||
# define bgGRN "\x1b[42m"
|
||||
# define bgBRN "\x1b[43m"
|
||||
# define bgBLU "\x1b[44m"
|
||||
# define bgMGN "\x1b[45m"
|
||||
# define bgCYA "\x1b[46m"
|
||||
# define bgLGR "\x1b[47m"
|
||||
# define bgGRA "\x1b[100m"
|
||||
# define bgLRD "\x1b[101m"
|
||||
# define bgLGN "\x1b[102m"
|
||||
# define bgYEL "\x1b[103m"
|
||||
# define bgLBL "\x1b[104m"
|
||||
# define bgPIN "\x1b[105m"
|
||||
# define bgLCY "\x1b[106m"
|
||||
# define bgBRI "\x1b[107m"
|
||||
|
||||
#else
|
||||
|
||||
# define cBLK ""
|
||||
# define cRED ""
|
||||
# define cGRN ""
|
||||
# define cBRN ""
|
||||
# define cBLU ""
|
||||
# define cMGN ""
|
||||
# define cCYA ""
|
||||
# define cLGR ""
|
||||
# define cGRA ""
|
||||
# define cLRD ""
|
||||
# define cLGN ""
|
||||
# define cYEL ""
|
||||
# define cLBL ""
|
||||
# define cPIN ""
|
||||
# define cLCY ""
|
||||
# define cBRI ""
|
||||
# define cRST ""
|
||||
|
||||
# define bgBLK ""
|
||||
# define bgRED ""
|
||||
# define bgGRN ""
|
||||
# define bgBRN ""
|
||||
# define bgBLU ""
|
||||
# define bgMGN ""
|
||||
# define bgCYA ""
|
||||
# define bgLGR ""
|
||||
# define bgGRA ""
|
||||
# define bgLRD ""
|
||||
# define bgLGN ""
|
||||
# define bgYEL ""
|
||||
# define bgLBL ""
|
||||
# define bgPIN ""
|
||||
# define bgLCY ""
|
||||
# define bgBRI ""
|
||||
|
||||
#endif /* ^USE_COLOR */
|
||||
|
||||
/*************************
|
||||
* Box drawing sequences *
|
||||
*************************/
|
||||
|
||||
#ifdef FANCY_BOXES
|
||||
|
||||
# define SET_G1 "\x1b)0" /* Set G1 for box drawing */
|
||||
# define RESET_G1 "\x1b)B" /* Reset G1 to ASCII */
|
||||
# define bSTART "\x0e" /* Enter G1 drawing mode */
|
||||
# define bSTOP "\x0f" /* Leave G1 drawing mode */
|
||||
# define bH "q" /* Horizontal line */
|
||||
# define bV "x" /* Vertical line */
|
||||
# define bLT "l" /* Left top corner */
|
||||
# define bRT "k" /* Right top corner */
|
||||
# define bLB "m" /* Left bottom corner */
|
||||
# define bRB "j" /* Right bottom corner */
|
||||
# define bX "n" /* Cross */
|
||||
# define bVR "t" /* Vertical, branch right */
|
||||
# define bVL "u" /* Vertical, branch left */
|
||||
# define bHT "v" /* Horizontal, branch top */
|
||||
# define bHB "w" /* Horizontal, branch bottom */
|
||||
|
||||
#else
|
||||
|
||||
# define SET_G1 ""
|
||||
# define RESET_G1 ""
|
||||
# define bSTART ""
|
||||
# define bSTOP ""
|
||||
# define bH "-"
|
||||
# define bV "|"
|
||||
# define bLT "+"
|
||||
# define bRT "+"
|
||||
# define bLB "+"
|
||||
# define bRB "+"
|
||||
# define bX "+"
|
||||
# define bVR "+"
|
||||
# define bVL "+"
|
||||
# define bHT "+"
|
||||
# define bHB "+"
|
||||
|
||||
#endif /* ^FANCY_BOXES */
|
||||
|
||||
/***********************
|
||||
* Misc terminal codes *
|
||||
***********************/
|
||||
|
||||
#define TERM_HOME "\x1b[H"
|
||||
#define TERM_CLEAR TERM_HOME "\x1b[2J"
|
||||
#define cEOL "\x1b[0K"
|
||||
#define CURSOR_HIDE "\x1b[?25l"
|
||||
#define CURSOR_SHOW "\x1b[?25h"
|
||||
|
||||
/************************
|
||||
* Debug & error macros *
|
||||
************************/
|
||||
|
||||
/* Just print stuff to the appropriate stream. */
|
||||
|
||||
#ifdef MESSAGES_TO_STDOUT
|
||||
# define SAYF(x...) printf(x)
|
||||
#else
|
||||
# define SAYF(x...) fprintf(stderr, x)
|
||||
#endif /* ^MESSAGES_TO_STDOUT */
|
||||
|
||||
/* Show a prefixed warning. */
|
||||
|
||||
#define WARNF(x...) do { \
|
||||
SAYF(cYEL "[!] " cBRI "WARNING: " cRST x); \
|
||||
SAYF(cRST "\n"); \
|
||||
} while (0)
|
||||
|
||||
/* Show a prefixed "doing something" message. */
|
||||
|
||||
#define ACTF(x...) do { \
|
||||
SAYF(cLBL "[*] " cRST x); \
|
||||
SAYF(cRST "\n"); \
|
||||
} while (0)
|
||||
|
||||
/* Show a prefixed "success" message. */
|
||||
|
||||
#define OKF(x...) do { \
|
||||
SAYF(cLGN "[+] " cRST x); \
|
||||
SAYF(cRST "\n"); \
|
||||
} while (0)
|
||||
|
||||
/* Show a prefixed fatal error message (not used in afl). */
|
||||
|
||||
#define BADF(x...) do { \
|
||||
SAYF(cLRD "\n[-] " cRST x); \
|
||||
SAYF(cRST "\n"); \
|
||||
} while (0)
|
||||
|
||||
/* Die with a verbose non-OS fatal error message. */
|
||||
|
||||
#define FATAL(x...) do { \
|
||||
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
|
||||
cBRI x); \
|
||||
SAYF(cLRD "\n Location : " cRST "%s(), %s:%u\n\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__); \
|
||||
exit(1); \
|
||||
} while (0)
|
||||
|
||||
/* Die by calling abort() to provide a core dump. */
|
||||
|
||||
#define ABORT(x...) do { \
|
||||
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
|
||||
cBRI x); \
|
||||
SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__); \
|
||||
abort(); \
|
||||
} while (0)
|
||||
|
||||
/* Die while also including the output of perror(). */
|
||||
|
||||
#define PFATAL(x...) do { \
|
||||
fflush(stdout); \
|
||||
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] SYSTEM ERROR : " \
|
||||
cBRI x); \
|
||||
SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__); \
|
||||
SAYF(cLRD " OS message : " cRST "%s\n", strerror(errno)); \
|
||||
exit(1); \
|
||||
} while (0)
|
||||
|
||||
/* Die with FAULT() or PFAULT() depending on the value of res (used to
|
||||
interpret different failure modes for read(), write(), etc). */
|
||||
|
||||
#define RPFATAL(res, x...) do { \
|
||||
if (res < 0) PFATAL(x); else FATAL(x); \
|
||||
} while (0)
|
||||
|
||||
/* Error-checking versions of read() and write() that call RPFATAL() as
|
||||
appropriate. */
|
||||
|
||||
#define ck_write(fd, buf, len, fn) do { \
|
||||
u32 _len = (len); \
|
||||
s32 _res = write(fd, buf, _len); \
|
||||
if (_res != _len) RPFATAL(_res, "Short write to %s", fn); \
|
||||
} while (0)
|
||||
|
||||
#define ck_read(fd, buf, len, fn) do { \
|
||||
u32 _len = (len); \
|
||||
s32 _res = read(fd, buf, _len); \
|
||||
if (_res != _len) RPFATAL(_res, "Short read from %s", fn); \
|
||||
} while (0)
|
||||
|
||||
#endif /* ! _HAVE_DEBUG_H */
|
@ -1,19 +1,20 @@
|
||||
================
|
||||
AFL dictionaries
|
||||
================
|
||||
# AFL dictionaries
|
||||
|
||||
(See ../docs/README for the general instruction manual.)
|
||||
(See [../docs/README.md](../docs/README.md) for the general instruction manual.)
|
||||
|
||||
This subdirectory contains a set of dictionaries that can be used in
|
||||
conjunction with the -x option to allow the fuzzer to effortlessly explore the
|
||||
grammar of some of the more verbose data formats or languages. The basic
|
||||
principle behind the operation of fuzzer dictionaries is outlined in section 9
|
||||
of the "main" README for the project.
|
||||
principle behind the operation of fuzzer dictionaries is outlined in section 10
|
||||
of the "main" README.md for the project.
|
||||
|
||||
These sets were done by Michal Zalewski, various contributors, and imported
|
||||
from oss-fuzz, go-fuzz and libfuzzer.
|
||||
|
||||
Custom dictionaries can be added at will. They should consist of a
|
||||
reasonably-sized set of rudimentary syntax units that the fuzzer will then try
|
||||
to clobber together in various ways. Snippets between 2 and 16 bytes are usually
|
||||
the sweet spot.
|
||||
to clobber together in various ways. Snippets between 2 and 16 bytes are
|
||||
usually the sweet spot.
|
||||
|
||||
Custom dictionaries can be created in two ways:
|
||||
|
||||
@ -32,12 +33,12 @@ parameter is a file or a directory.
|
||||
|
||||
In the file mode, every name field can be optionally followed by @<num>, e.g.:
|
||||
|
||||
keyword_foo@1 = "foo"
|
||||
`keyword_foo@1 = "foo"`
|
||||
|
||||
Such entries will be loaded only if the requested dictionary level is equal or
|
||||
higher than this number. The default level is zero; a higher value can be set
|
||||
by appending @<num> to the dictionary file name, like so:
|
||||
|
||||
-x path/to/dictionary.dct@2
|
||||
`-x path/to/dictionary.dct@2`
|
||||
|
||||
Good examples of dictionaries can be found in xml.dict and png.dict.
|
73
dictionaries/aff.dict
Normal file
73
dictionaries/aff.dict
Normal file
@ -0,0 +1,73 @@
|
||||
# https://www.systutorials.com/docs/linux/man/4-hunspell/
|
||||
|
||||
# Affix keywords
|
||||
"AF"
|
||||
"AM"
|
||||
"BREAK"
|
||||
"CHECKCOMPOUNDCASE"
|
||||
"CHECKCOMPOUNDDUP"
|
||||
"CHECKCOMPOUNDPATTERN"
|
||||
"CHECKCOMPOUNDREP"
|
||||
"CHECKCOMPOUNDTRIPLE"
|
||||
"COMPLEXPREFIXES"
|
||||
"COMPOUNDBEGIN"
|
||||
"COMPOUNDFLAG"
|
||||
"COMPOUNDFORBIDFLAG"
|
||||
"COMPOUNDLAST"
|
||||
"COMPOUNDMIDDLE"
|
||||
"COMPOUNDMIN"
|
||||
"COMPOUNDPERMITFLAG"
|
||||
"COMPOUNDROOT"
|
||||
"COMPOUNDRULE"
|
||||
"COMPOUNDSYLLABLE"
|
||||
"COMPOUNDWORDMAX"
|
||||
"FLAG"
|
||||
"FORBIDWARN"
|
||||
"FORCEUCASE"
|
||||
"IGNORE"
|
||||
"KEY"
|
||||
"LANG"
|
||||
"MAP"
|
||||
"MAXCODSUGS"
|
||||
"MAXDIFF"
|
||||
"MAXNGRAMSUGS"
|
||||
"NOSPLITSUGS"
|
||||
"NOSUGGEST"
|
||||
"ONLYINCOMPOUND"
|
||||
"ONLYMAXDIFF"
|
||||
"PFX"
|
||||
"PHONE"
|
||||
"REP"
|
||||
"SET"
|
||||
"SFX"
|
||||
"SIMPLIFIEDTRIPLE"
|
||||
"SUGWITHDOTS"
|
||||
"SYLLABLENUM"
|
||||
"TRY"
|
||||
"WARN"
|
||||
"CIRCUMFIX"
|
||||
"FORBIDDENWORD"
|
||||
"FULLSTRIP"
|
||||
"KEEPCASE"
|
||||
"ICONV"
|
||||
"OCONV"
|
||||
"LEMMA_PRESENT"
|
||||
"NEEDAFFIX"
|
||||
"PSEUDOROOT"
|
||||
"SUBSTANDARD"
|
||||
"WORDCHARS"
|
||||
"CHECKSHARPS"
|
||||
|
||||
# Optional data fields
|
||||
"ph:"
|
||||
"st:"
|
||||
"al:"
|
||||
"po:"
|
||||
"ds:"
|
||||
"is:"
|
||||
"ts:"
|
||||
"sp:"
|
||||
"pa:"
|
||||
"dp:"
|
||||
"ip:"
|
||||
"tp:"
|
112
dictionaries/ass.dict
Normal file
112
dictionaries/ass.dict
Normal file
@ -0,0 +1,112 @@
|
||||
"0x"
|
||||
"\\1a"
|
||||
"\\2a"
|
||||
"\\2c"
|
||||
"\\3a"
|
||||
"\\3c"
|
||||
"\\4a"
|
||||
"\\4c"
|
||||
"\\a"
|
||||
"\\alpha"
|
||||
"\\an"
|
||||
"Arial"
|
||||
"\\b"
|
||||
"Banner;"
|
||||
"\\be"
|
||||
"\\blur"
|
||||
"\\bord"
|
||||
"\\c"
|
||||
"CFF"
|
||||
"CID Type 1"
|
||||
"\\clip"
|
||||
"clip"
|
||||
"Courier"
|
||||
"Courier New"
|
||||
"Default"
|
||||
"Dialogue:"
|
||||
"[Events]"
|
||||
"\\fade"
|
||||
"\\fax"
|
||||
"\\fay"
|
||||
"\\fe"
|
||||
"\\fn"
|
||||
"fontname:"
|
||||
"[Fonts]"
|
||||
"Format:"
|
||||
"\\frx"
|
||||
"\\fry"
|
||||
"\\frz"
|
||||
"\\fs"
|
||||
"\\fsc"
|
||||
"\\fscx"
|
||||
"\\fscy"
|
||||
"\\fsp"
|
||||
"&h"
|
||||
"Helvetica"
|
||||
"\\i"
|
||||
"\\iclip"
|
||||
"iclip"
|
||||
"\\k"
|
||||
"Kerning:"
|
||||
"Kerning"
|
||||
"\\kf"
|
||||
"\\ko"
|
||||
"Language:"
|
||||
"monospace"
|
||||
"\\move"
|
||||
"move"
|
||||
"none"
|
||||
"\\org"
|
||||
"org"
|
||||
"OverrideStyle"
|
||||
"\\p"
|
||||
"p"
|
||||
"\\pbo"
|
||||
"pbo"
|
||||
"pc.240m"
|
||||
"pc.601"
|
||||
"pc.709"
|
||||
"pc.fcc"
|
||||
"PlayResX:"
|
||||
"PlayResX"
|
||||
"PlayResY:"
|
||||
"PlayResY"
|
||||
"\\pos"
|
||||
"pos"
|
||||
"\\q"
|
||||
"\\r"
|
||||
"\\s"
|
||||
"sans-serif"
|
||||
"ScaledBorderAndShadow:"
|
||||
"ScaledBorderAndShadow"
|
||||
"[Script Info]"
|
||||
"Scroll down;"
|
||||
"Scroll up;"
|
||||
"serif"
|
||||
"\\shad"
|
||||
"Style:"
|
||||
"\\t"
|
||||
"Text"
|
||||
"Timer:"
|
||||
"Timer"
|
||||
"Times"
|
||||
"Times New Roman"
|
||||
"tv.240m"
|
||||
"tv.601"
|
||||
"tv.709"
|
||||
"tv.fcc"
|
||||
"Type 1"
|
||||
"Type 42"
|
||||
"\\u"
|
||||
"UTF-8"
|
||||
"[V4 Styles]"
|
||||
"[V4+ Styles]"
|
||||
"WrapStyle:"
|
||||
"WrapStyle"
|
||||
"\\xbord"
|
||||
"\\xshad"
|
||||
"\\ybord"
|
||||
"YCbCr Matrix:"
|
||||
"YCbCr Matrix"
|
||||
"yes"
|
||||
"\\yshad"
|
33
dictionaries/atom.dict
Normal file
33
dictionaries/atom.dict
Normal file
@ -0,0 +1,33 @@
|
||||
# https://validator.w3.org/feed/docs/atom.html
|
||||
# https://tools.ietf.org/html/rfc4287
|
||||
|
||||
"<?xml version='1.0' encoding='utf-8'?>"
|
||||
"<feed xmlns='http://www.w3.org/2005/Atom'>"
|
||||
|
||||
"<alternate>"
|
||||
"<author>"
|
||||
"<category>"
|
||||
"<content>"
|
||||
"<contributor>"
|
||||
"<email>"
|
||||
"<entry>"
|
||||
"<feed>"
|
||||
"<first>"
|
||||
"<generator>"
|
||||
"<icon>"
|
||||
"<id>"
|
||||
"<last>"
|
||||
"<link>"
|
||||
"<logo>"
|
||||
"<modified/>
|
||||
"<name>"
|
||||
"<next>"
|
||||
"<previous>"
|
||||
"<published>"
|
||||
"<rights>"
|
||||
"<source>"
|
||||
"<subtitle>"
|
||||
"<summary>"
|
||||
"<title>"
|
||||
"<updated>"
|
||||
"<uri>"
|
5
dictionaries/av1_dc.dict
Normal file
5
dictionaries/av1_dc.dict
Normal file
@ -0,0 +1,5 @@
|
||||
# IVF Signature + version (bytes 0-5)
|
||||
kw1="DKIF\x00\x00"
|
||||
|
||||
# AV1 codec fourCC (bytes 8-11)
|
||||
kw2="AV01"
|
152
dictionaries/bash.dict
Normal file
152
dictionaries/bash.dict
Normal file
@ -0,0 +1,152 @@
|
||||
# Keywords taken from
|
||||
# - https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html
|
||||
# - https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html
|
||||
# - https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Variables.html
|
||||
# - https://www.gnu.org/software/bash/manual/html_node/Reserved-Word-Index.html
|
||||
|
||||
"!"
|
||||
"."
|
||||
":"
|
||||
"["
|
||||
"[["
|
||||
"]]"
|
||||
"{"
|
||||
"}"
|
||||
"BASH"
|
||||
"BASH_ALIASES"
|
||||
"BASH_ARGC"
|
||||
"BASH_ARGV"
|
||||
"BASH_ARGV0"
|
||||
"BASH_CMDS"
|
||||
"BASH_COMMAND"
|
||||
"BASH_COMPAT"
|
||||
"BASH_ENV"
|
||||
"BASH_EXECUTION_STRING"
|
||||
"BASH_LINENO"
|
||||
"BASH_LOADABLES_PATH"
|
||||
"BASHOPTS"
|
||||
"BASHPID"
|
||||
"BASH_REMATCH"
|
||||
"BASH_SOURCE"
|
||||
"BASH_SUBSHELL"
|
||||
"BASH_VERSINFO"
|
||||
"BASH_VERSION"
|
||||
"BASH_XTRACEFD"
|
||||
"break"
|
||||
"case"
|
||||
"cd"
|
||||
"CDPATH"
|
||||
"CHILD_MAX"
|
||||
"COLUMNS"
|
||||
"COMP_CWORD"
|
||||
"COMP_KEY"
|
||||
"COMP_LINE"
|
||||
"COMP_POINT"
|
||||
"COMPREPLY"
|
||||
"COMP_TYPE"
|
||||
"COMP_WORDBREAKS"
|
||||
"COMP_WORDS"
|
||||
"continue"
|
||||
"COPROC"
|
||||
"DIRSTACK"
|
||||
"do"
|
||||
"done"
|
||||
"elif"
|
||||
"else"
|
||||
"EMACS"
|
||||
"ENV"
|
||||
"EPOCHREALTIME"
|
||||
"EPOCHSECONDS"
|
||||
"esac"
|
||||
"EUID"
|
||||
"eval"
|
||||
"exec"
|
||||
"EXECIGNORE"
|
||||
"exit"
|
||||
"export"
|
||||
"FCEDIT"
|
||||
"fi"
|
||||
"FIGNORE"
|
||||
"for"
|
||||
"FUNCNAME"
|
||||
"FUNCNEST"
|
||||
"function"
|
||||
"getopts"
|
||||
"GLOBIGNORE"
|
||||
"GROUPS"
|
||||
"hash"
|
||||
"histchars"
|
||||
"HISTCMD"
|
||||
"HISTCONTROL"
|
||||
"HISTFILE"
|
||||
"HISTFILESIZE"
|
||||
"HISTIGNORE"
|
||||
"HISTSIZE"
|
||||
"HISTTIMEFORMAT"
|
||||
"HOME"
|
||||
"HOSTFILE"
|
||||
"HOSTNAME"
|
||||
"HOSTTYPE"
|
||||
"if"
|
||||
"IFS"
|
||||
"IGNOREEOF"
|
||||
"in"
|
||||
"INPUTRC"
|
||||
"INSIDE_EMACS"
|
||||
"LANG"
|
||||
"LC_ALL"
|
||||
"LC_COLLATE"
|
||||
"LC_CTYPE"
|
||||
"LC_MESSAGES"
|
||||
"LC_NUMERIC"
|
||||
"LC_TIME"
|
||||
"LINENO"
|
||||
"LINES"
|
||||
"MACHTYPE"
|
||||
"MAIL"
|
||||
"MAILCHECK"
|
||||
"MAILPATH"
|
||||
"MAPFILE"
|
||||
"OLDPWD"
|
||||
"OPTARG"
|
||||
"OPTERR"
|
||||
"OPTIND"
|
||||
"OSTYPE"
|
||||
"PATH"
|
||||
"PIPESTATUS"
|
||||
"POSIXLY_CORRECT"
|
||||
"PPID"
|
||||
"PROMPT_COMMAND"
|
||||
"PROMPT_DIRTRIM"
|
||||
"PS0"
|
||||
"PS1"
|
||||
"PS2"
|
||||
"PS3"
|
||||
"PS4"
|
||||
"pwd"
|
||||
"PWD"
|
||||
"RANDOM"
|
||||
"READLINE_LINE"
|
||||
"READLINE_POINT"
|
||||
"readonly"
|
||||
"REPLY"
|
||||
"return"
|
||||
"SECONDS"
|
||||
"select"
|
||||
"SHELL"
|
||||
"SHELLOPTS"
|
||||
"shift"
|
||||
"SHLVL"
|
||||
"test"
|
||||
"then"
|
||||
"time"
|
||||
"TIMEFORMAT"
|
||||
"times"
|
||||
"TMOUT"
|
||||
"TMPDIR"
|
||||
"trap"
|
||||
"UID"
|
||||
"umask"
|
||||
"unset"
|
||||
"until"
|
||||
"while"
|
30
dictionaries/bdf.dict
Normal file
30
dictionaries/bdf.dict
Normal file
@ -0,0 +1,30 @@
|
||||
# https://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format
|
||||
# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5005.BDF_Spec.pdf
|
||||
|
||||
"STARTFONT"
|
||||
"COMMENT"
|
||||
"CONTENTVERSION"
|
||||
"FONT"
|
||||
"SIZE"
|
||||
"FONTBOUNDINGBOX"
|
||||
"METRICSSET"
|
||||
"SWIDTH"
|
||||
"DWIDTH"
|
||||
"SWIDTH1"
|
||||
"DWIDTH1"
|
||||
"VVECTOR"
|
||||
"STARTPROPERTIES"
|
||||
"ENDPROPERTIES"
|
||||
"CHARS"
|
||||
"STARTCHAR"
|
||||
"ENCODING"
|
||||
"BBX"
|
||||
"BITMAP"
|
||||
"ENDCHAR"
|
||||
"ENDFONT"
|
||||
|
||||
# misc
|
||||
"255"
|
||||
"-1"
|
||||
"0"
|
||||
"2.1"
|
10
dictionaries/bmp.dict
Normal file
10
dictionaries/bmp.dict
Normal file
@ -0,0 +1,10 @@
|
||||
windows="BM"
|
||||
os2_bitmap="BA"
|
||||
os2_icon="CI"
|
||||
os2_pointer="CP"
|
||||
os2_struct="IC"
|
||||
os2_ptr="PT"
|
||||
windows_color_space="Win "
|
||||
srgb="sRGB"
|
||||
link="LINK"
|
||||
mbed="MBED"
|
3
dictionaries/bz2.dict
Normal file
3
dictionaries/bz2.dict
Normal file
@ -0,0 +1,3 @@
|
||||
magic="BZ"
|
||||
compress_magic="\x31\x41\x59\x26\x53\x59"
|
||||
eos_magic="\x17\x72\x45\x38\x50\x90"
|
14
dictionaries/creole.dict
Normal file
14
dictionaries/creole.dict
Normal file
@ -0,0 +1,14 @@
|
||||
# http://www.wikicreole.org/wiki/Creole1.0
|
||||
|
||||
bold="**"
|
||||
italic="//"
|
||||
heading="=="
|
||||
link1="[[a|b]]"
|
||||
link2="[[a:b]]"
|
||||
hr="----"
|
||||
img=" {{a|b}}"
|
||||
table_heading="|=a |=b |"
|
||||
raw="{{{a}}}"
|
||||
escape="~"
|
||||
placeholder="<<<x>>>"
|
||||
line_break="\\\\"
|
354
dictionaries/css.dict
Normal file
354
dictionaries/css.dict
Normal file
@ -0,0 +1,354 @@
|
||||
# https://en.wikipedia.org/wiki/Cascading_Style_Sheets
|
||||
|
||||
# selectors
|
||||
"::after"
|
||||
"::before"
|
||||
"::first-letter"
|
||||
"::first-line"
|
||||
"::placeholder"
|
||||
"::selection"
|
||||
":active"
|
||||
":checked"
|
||||
":default"
|
||||
":disabled"
|
||||
":empty"
|
||||
":enabled"
|
||||
":first-child"
|
||||
":first-of-type"
|
||||
":focus"
|
||||
":hover"
|
||||
":in-range"
|
||||
":indeterminate"
|
||||
":invalid"
|
||||
":lang("
|
||||
":last-child"
|
||||
":last-of-type"
|
||||
":link"
|
||||
":not("
|
||||
":nth-child("
|
||||
":nth-last-child("
|
||||
":nth-last-of-type("
|
||||
":nth-of-type("
|
||||
":only-child"
|
||||
":only-of-type"
|
||||
":optional"
|
||||
":out-of-range"
|
||||
":read-only"
|
||||
":read-write"
|
||||
":required"
|
||||
":root"
|
||||
":target"
|
||||
":valid"
|
||||
":visited"
|
||||
|
||||
# units
|
||||
"ch"
|
||||
"cm"
|
||||
"em"
|
||||
"ex"
|
||||
"in"
|
||||
"mm"
|
||||
"pc"
|
||||
"pt"
|
||||
"px"
|
||||
"rem"
|
||||
"vh"
|
||||
"vmax"
|
||||
"vmin"
|
||||
"vw"
|
||||
|
||||
# functions
|
||||
"attr("
|
||||
"calc("
|
||||
"cubic-bezier("
|
||||
"hsl("
|
||||
"hsls("
|
||||
"linear-gradient("
|
||||
"radial-gradient("
|
||||
"repeating-linear-gradient("
|
||||
"repeating-radial-gradient("
|
||||
"rgb("
|
||||
"rgba("
|
||||
"var("
|
||||
|
||||
# prefixes
|
||||
"-moz"
|
||||
"-webkit"
|
||||
|
||||
# properties
|
||||
"@charset"
|
||||
"@font-face"
|
||||
"@font-feature-values"
|
||||
"@import"
|
||||
"@keyframes"
|
||||
"@media"
|
||||
"align-items"
|
||||
"align-self"
|
||||
"all"
|
||||
"animation"
|
||||
"animation-delay"
|
||||
"animation-direction"
|
||||
"animation-duration"
|
||||
"animation-fill-mode"
|
||||
"animation-iteration-count"
|
||||
"animation-name"
|
||||
"animation-play-state"
|
||||
"animation-timing-function"
|
||||
"backface-visibility"
|
||||
"background"
|
||||
"background-attachment"
|
||||
"background-blend-mode"
|
||||
"background-clip"
|
||||
"background-color"
|
||||
"background-image"
|
||||
"background-origin"
|
||||
"background-position"
|
||||
"background-repeat"
|
||||
"background-size"
|
||||
"border"
|
||||
"border-bottom"
|
||||
"border-bottom-color"
|
||||
"border-bottom-left-radius"
|
||||
"border-bottom-right-radius"
|
||||
"border-bottom-style"
|
||||
"border-bottom-width"
|
||||
"border-collapse"
|
||||
"border-color"
|
||||
"border-image"
|
||||
"border-image-outset"
|
||||
"border-image-repeat"
|
||||
"border-image-slice"
|
||||
"border-image-source"
|
||||
"border-image-width"
|
||||
"border-left"
|
||||
"border-left-color"
|
||||
"border-left-style"
|
||||
"border-left-width"
|
||||
"border-radius"
|
||||
"border-right"
|
||||
"border-right-color"
|
||||
"border-right-style"
|
||||
"border-right-width"
|
||||
"border-spacing"
|
||||
"border-style"
|
||||
"border-top"
|
||||
"border-top-color"
|
||||
"border-top-left-radius"
|
||||
"border-top-right-radius"
|
||||
"border-top-style"
|
||||
"border-top-width"
|
||||
"border-width"
|
||||
"bottom"
|
||||
"box-decoration-break"
|
||||
"box-shadow"
|
||||
"box-sizing"
|
||||
"break-after"
|
||||
"break-before"
|
||||
"break-inside"
|
||||
"caption-side"
|
||||
"caret-color"
|
||||
"clear"
|
||||
"clip"
|
||||
"color"
|
||||
"column-count"
|
||||
"column-fill"
|
||||
"column-gap"
|
||||
"column-rule"
|
||||
"column-rule-color"
|
||||
"column-rule-style"
|
||||
"column-rule-width"
|
||||
"column-span"
|
||||
"column-width"
|
||||
"columns"
|
||||
"content"
|
||||
"counter-increment"
|
||||
"counter-reset"
|
||||
"cursor"
|
||||
"direction"
|
||||
"display"
|
||||
"empty-cells"
|
||||
"filter"
|
||||
"flex"
|
||||
"flex-basis"
|
||||
"flex-direction"
|
||||
"flex-flow"
|
||||
"flex-grow"
|
||||
"flex-shrink"
|
||||
"flex-wrap"
|
||||
"float"
|
||||
"font"
|
||||
"font-family"
|
||||
"font-feature-settings"
|
||||
"font-kerning"
|
||||
"font-language-override"
|
||||
"font-size"
|
||||
"font-size-adjust"
|
||||
"font-stretch"
|
||||
"font-style"
|
||||
"font-synthesis"
|
||||
"font-variant"
|
||||
"font-variant-alternates"
|
||||
"font-variant-caps"
|
||||
"font-variant-east-asian"
|
||||
"font-variant-ligatures"
|
||||
"font-variant-numeric"
|
||||
"font-variant-position"
|
||||
"font-weight"
|
||||
"from"
|
||||
"grid"
|
||||
"grid-area"
|
||||
"grid-auto-columns"
|
||||
"grid-auto-flow"
|
||||
"grid-auto-rows"
|
||||
"grid-column"
|
||||
"grid-column-end"
|
||||
"grid-column-gap"
|
||||
"grid-column-start"
|
||||
"grid-gap"
|
||||
"grid-row"
|
||||
"grid-row-end"
|
||||
"grid-row-gap"
|
||||
"grid-row-start"
|
||||
"grid-template"
|
||||
"grid-template-areas"
|
||||
"grid-template-columns"
|
||||
"grid-template-rows"
|
||||
"hanging-punctuation"
|
||||
"height"
|
||||
"hyphens"
|
||||
"image-rendering"
|
||||
"isolation"
|
||||
"justify-content"
|
||||
"left"
|
||||
"letter-spacing"
|
||||
"line-break"
|
||||
"line-height"
|
||||
"list-style"
|
||||
"list-style-image"
|
||||
"list-style-position"
|
||||
"list-style-type"
|
||||
"margin"
|
||||
"margin-bottom"
|
||||
"margin-left"
|
||||
"margin-right"
|
||||
"margin-top"
|
||||
"max-height"
|
||||
"max-width"
|
||||
"min-height"
|
||||
"min-width"
|
||||
"mix-blend-mode"
|
||||
"object-fit"
|
||||
"object-position"
|
||||
"opacity"
|
||||
"order"
|
||||
"orphans"
|
||||
"outline"
|
||||
"outline-color"
|
||||
"outline-offset"
|
||||
"outline-style"
|
||||
"outline-width"
|
||||
"overflow"
|
||||
"overflow-wrap"
|
||||
"overflow-x"
|
||||
"overflow-y"
|
||||
"padding"
|
||||
"padding-bottom"
|
||||
"padding-left"
|
||||
"padding-right"
|
||||
"padding-top"
|
||||
"page-break-after"
|
||||
"page-break-before"
|
||||
"page-break-inside"
|
||||
"perspective"
|
||||
"perspective-origin"
|
||||
"pointer-events"
|
||||
"position"
|
||||
"quotes"
|
||||
"resize"
|
||||
"right"
|
||||
"scroll-behavior"
|
||||
"tab-size"
|
||||
"table-layout"
|
||||
"text-align"
|
||||
"text-align-last"
|
||||
"text-combine-upright"
|
||||
"text-decoration"
|
||||
"text-decoration-color"
|
||||
"text-decoration-line"
|
||||
"text-decoration-style"
|
||||
"text-indent"
|
||||
"text-justify"
|
||||
"text-orientation"
|
||||
"text-overflow"
|
||||
"text-shadow"
|
||||
"text-transform"
|
||||
"text-underline-position"
|
||||
"to"
|
||||
"top"
|
||||
"transform"
|
||||
"transform-origin"
|
||||
"transform-style"
|
||||
"transition"
|
||||
"transition-delay"
|
||||
"transition-duration"
|
||||
"transition-property"
|
||||
"transition-timing-function"
|
||||
"unicode-bidi"
|
||||
"user-select"
|
||||
"vertical-align"
|
||||
"visibility"
|
||||
"white-space"
|
||||
"widows"
|
||||
"width"
|
||||
"word-break"
|
||||
"word-spacing"
|
||||
"word-wrap"
|
||||
"writing-mode"
|
||||
"z-index"
|
||||
|
||||
|
||||
# aural - https://www.w3schools.com/cssref/css_ref_aural.asp
|
||||
"above"
|
||||
"azimuth"
|
||||
"below"
|
||||
"center"
|
||||
"code"
|
||||
"continuous"
|
||||
"cue"
|
||||
"cue-after"
|
||||
"cue-before"
|
||||
"elevation"
|
||||
"generic-voice"
|
||||
"left"
|
||||
"left-side"
|
||||
"leftwards"
|
||||
"lower"
|
||||
"medium"
|
||||
"mix"
|
||||
"none"
|
||||
"once"
|
||||
"pause"
|
||||
"pause-after"
|
||||
"pause-before"
|
||||
"pitch"
|
||||
"pitch-range"
|
||||
"play-during"
|
||||
"richness"
|
||||
"right"
|
||||
"right-side"
|
||||
"slower"
|
||||
"speak"
|
||||
"speak-header"
|
||||
"speak-numeral"
|
||||
"speak-punctuation"
|
||||
"speech-rate"
|
||||
"stress"
|
||||
"url"
|
||||
"voice-family"
|
||||
"volume"
|
||||
"x-fast"
|
||||
"x-high"
|
||||
"x-loud"
|
||||
"x-low"
|
||||
"x-slow"
|
||||
"x-soft"
|
6
dictionaries/csv.dict
Normal file
6
dictionaries/csv.dict
Normal file
@ -0,0 +1,6 @@
|
||||
"\x00"
|
||||
"\r\n"
|
||||
";;"
|
||||
",,"
|
||||
"\t;"
|
||||
"\n;"
|
35
dictionaries/dds.dict
Normal file
35
dictionaries/dds.dict
Normal file
@ -0,0 +1,35 @@
|
||||
# See http://www.mindcontrol.org/~hplus/graphics/dds-info/
|
||||
|
||||
magic="\x20\x53\x44\x44"
|
||||
|
||||
# Headers
|
||||
"\x00\x00\x00\x01"
|
||||
"\x00\x00\x00\x02"
|
||||
"\x00\x00\x00\x04"
|
||||
"\x00\x00\x00\x08"
|
||||
"\x00\x00\x10\x00"
|
||||
"\x00\x02\x00\x00"
|
||||
"\x00\x08\x00\x00"
|
||||
"\x00\x80\x00\x00"
|
||||
"\x00\x00\x00\x01"
|
||||
"\x00\x00\x00\x04"
|
||||
"\x00\x00\x00\x20"
|
||||
"\x00\x00\x00\x40"
|
||||
"\x00\x00\x00\x08"
|
||||
"\x00\x00\x10\x00"
|
||||
"\x00\x40\x00\x00"
|
||||
"\x00\x00\x02\x00"
|
||||
"\x00\x00\x04\x00"
|
||||
"\x00\x00\x08\x00"
|
||||
"\x00\x00\x10\x00"
|
||||
"\x00\x00\x20\x00"
|
||||
"\x00\x00\x40\x00"
|
||||
"\x00\x00\x80\x00"
|
||||
"\x00\x20\x00\x00"
|
||||
|
||||
#formats
|
||||
"1TXD"
|
||||
"2TXD"
|
||||
"3TXD"
|
||||
"4TXD"
|
||||
"5TXD"
|
34
dictionaries/djvu.dict
Normal file
34
dictionaries/djvu.dict
Normal file
@ -0,0 +1,34 @@
|
||||
"ANTa"
|
||||
"ANTz"
|
||||
"BG2k"
|
||||
"BG44"
|
||||
"BGjp"
|
||||
"BM44"
|
||||
"CELX"
|
||||
"DIRM"
|
||||
"DJVI"
|
||||
"DJVM"
|
||||
"DJVU"
|
||||
"Djbz"
|
||||
"FAKE"
|
||||
"FG2k"
|
||||
"FG44"
|
||||
"FGbz"
|
||||
"FGjp"
|
||||
"FORM"
|
||||
"INCL"
|
||||
"INFO"
|
||||
"LINK"
|
||||
"METa"
|
||||
"METz"
|
||||
"NAVM"
|
||||
"NDIR"
|
||||
"PM44"
|
||||
"SINF"
|
||||
"Sjbz"
|
||||
"Smmr"
|
||||
"TH44"
|
||||
"THUM"
|
||||
"TXTa"
|
||||
"TXTz"
|
||||
"WMRM"
|
688
dictionaries/docommand.dict
Normal file
688
dictionaries/docommand.dict
Normal file
@ -0,0 +1,688 @@
|
||||
#SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS;
|
||||
ACCESSIBLE="ACCESSIBLE"
|
||||
ACCOUNT="ACCOUNT"
|
||||
ACTION="ACTION"
|
||||
ACTIVE="ACTIVE"
|
||||
ADD="ADD"
|
||||
ADMIN="ADMIN"
|
||||
AFTER="AFTER"
|
||||
AGAINST="AGAINST"
|
||||
AGGREGATE="AGGREGATE"
|
||||
ALGORITHM="ALGORITHM"
|
||||
ALL="ALL"
|
||||
ALTER="ALTER"
|
||||
ALWAYS="ALWAYS"
|
||||
ANALYZE="ANALYZE"
|
||||
AND="AND"
|
||||
ANY="ANY"
|
||||
AS="AS"
|
||||
ASC="ASC"
|
||||
ASCII="ASCII"
|
||||
ASENSITIVE="ASENSITIVE"
|
||||
AT="AT"
|
||||
AUTOEXTEND_SIZE="AUTOEXTEND_SIZE"
|
||||
AUTO_INCREMENT="AUTO_INCREMENT"
|
||||
AVG="AVG"
|
||||
AVG_ROW_LENGTH="AVG_ROW_LENGTH"
|
||||
BACKUP="BACKUP"
|
||||
BEFORE="BEFORE"
|
||||
BEGIN="BEGIN"
|
||||
BETWEEN="BETWEEN"
|
||||
BIGINT="BIGINT"
|
||||
BINARY="BINARY"
|
||||
BINLOG="BINLOG"
|
||||
BIT="BIT"
|
||||
BLOB="BLOB"
|
||||
BLOCK="BLOCK"
|
||||
BOOL="BOOL"
|
||||
BOOLEAN="BOOLEAN"
|
||||
BOTH="BOTH"
|
||||
BTREE="BTREE"
|
||||
BUCKETS="BUCKETS"
|
||||
BY="BY"
|
||||
BYTE="BYTE"
|
||||
CACHE="CACHE"
|
||||
CALL="CALL"
|
||||
CASCADE="CASCADE"
|
||||
CASCADED="CASCADED"
|
||||
CASE="CASE"
|
||||
CATALOG_NAME="CATALOG_NAME"
|
||||
CHAIN="CHAIN"
|
||||
CHANGE="CHANGE"
|
||||
CHANGED="CHANGED"
|
||||
CHANNEL="CHANNEL"
|
||||
CHAR="CHAR"
|
||||
CHARACTER="CHARACTER"
|
||||
CHARSET="CHARSET"
|
||||
CHECK="CHECK"
|
||||
CHECKSUM="CHECKSUM"
|
||||
CIPHER="CIPHER"
|
||||
CLASS_ORIGIN="CLASS_ORIGIN"
|
||||
CLIENT="CLIENT"
|
||||
CLONE="CLONE"
|
||||
CLOSE="CLOSE"
|
||||
COALESCE="COALESCE"
|
||||
CODE="CODE"
|
||||
COLLATE="COLLATE"
|
||||
COLLATION="COLLATION"
|
||||
COLUMN="COLUMN"
|
||||
COLUMNS="COLUMNS"
|
||||
COLUMN_FORMAT="COLUMN_FORMAT"
|
||||
COLUMN_NAME="COLUMN_NAME"
|
||||
COMMENT="COMMENT"
|
||||
COMMIT="COMMIT"
|
||||
COMMITTED="COMMITTED"
|
||||
COMPACT="COMPACT"
|
||||
COMPLETION="COMPLETION"
|
||||
COMPONENT="COMPONENT"
|
||||
COMPRESSED="COMPRESSED"
|
||||
COMPRESSION="COMPRESSION"
|
||||
CONCURRENT="CONCURRENT"
|
||||
CONDITION="CONDITION"
|
||||
CONNECTION="CONNECTION"
|
||||
CONSISTENT="CONSISTENT"
|
||||
CONSTRAINT="CONSTRAINT"
|
||||
CONSTRAINT_CATALOG="CONSTRAINT_CATALOG"
|
||||
CONSTRAINT_NAME="CONSTRAINT_NAME"
|
||||
CONSTRAINT_SCHEMA="CONSTRAINT_SCHEMA"
|
||||
CONTAINS="CONTAINS"
|
||||
CONTEXT="CONTEXT"
|
||||
CONTINUE="CONTINUE"
|
||||
CONVERT="CONVERT"
|
||||
CPU="CPU"
|
||||
CREATE="CREATE"
|
||||
CROSS="CROSS"
|
||||
CUBE="CUBE"
|
||||
CUME_DIST="CUME_DIST"
|
||||
CURRENT="CURRENT"
|
||||
CURRENT_DATE="CURRENT_DATE"
|
||||
CURRENT_TIME="CURRENT_TIME"
|
||||
CURRENT_TIMESTAMP="CURRENT_TIMESTAMP"
|
||||
CURRENT_USER="CURRENT_USER"
|
||||
CURSOR="CURSOR"
|
||||
CURSOR_NAME="CURSOR_NAME"
|
||||
DATA="DATA"
|
||||
DATABASE="DATABASE"
|
||||
DATABASES="DATABASES"
|
||||
DATAFILE="DATAFILE"
|
||||
DATE="DATE"
|
||||
DATETIME="DATETIME"
|
||||
DAY="DAY"
|
||||
DAY_HOUR="DAY_HOUR"
|
||||
DAY_MICROSECOND="DAY_MICROSECOND"
|
||||
DAY_MINUTE="DAY_MINUTE"
|
||||
DAY_SECOND="DAY_SECOND"
|
||||
DEALLOCATE="DEALLOCATE"
|
||||
DEC="DEC"
|
||||
DECIMAL="DECIMAL"
|
||||
DECLARE="DECLARE"
|
||||
DEFAULT="DEFAULT"
|
||||
DEFAULT_AUTH="DEFAULT_AUTH"
|
||||
DEFINER="DEFINER"
|
||||
DEFINITION="DEFINITION"
|
||||
DELAYED="DELAYED"
|
||||
DELAY_KEY_WRITE="DELAY_KEY_WRITE"
|
||||
DELETE="DELETE"
|
||||
DENSE_RANK="DENSE_RANK"
|
||||
DESC="DESC"
|
||||
DESCRIBE="DESCRIBE"
|
||||
DESCRIPTION="DESCRIPTION"
|
||||
DETERMINISTIC="DETERMINISTIC"
|
||||
DIAGNOSTICS="DIAGNOSTICS"
|
||||
DIRECTORY="DIRECTORY"
|
||||
DISABLE="DISABLE"
|
||||
DISCARD="DISCARD"
|
||||
DISK="DISK"
|
||||
DISTINCT="DISTINCT"
|
||||
DISTINCTROW="DISTINCTROW"
|
||||
DIV="DIV"
|
||||
DO="DO"
|
||||
DOUBLE="DOUBLE"
|
||||
DROP="DROP"
|
||||
DUAL="DUAL"
|
||||
DUMPFILE="DUMPFILE"
|
||||
DUPLICATE="DUPLICATE"
|
||||
DYNAMIC="DYNAMIC"
|
||||
EACH="EACH"
|
||||
ELSE="ELSE"
|
||||
ELSEIF="ELSEIF"
|
||||
EMPTY="EMPTY"
|
||||
ENABLE="ENABLE"
|
||||
ENCLOSED="ENCLOSED"
|
||||
ENCRYPTION="ENCRYPTION"
|
||||
END="END"
|
||||
ENDS="ENDS"
|
||||
ENFORCED="ENFORCED"
|
||||
ENGINE="ENGINE"
|
||||
ENGINES="ENGINES"
|
||||
ENUM="ENUM"
|
||||
ERROR="ERROR"
|
||||
ERRORS="ERRORS"
|
||||
ESCAPE="ESCAPE"
|
||||
ESCAPED="ESCAPED"
|
||||
EVENT="EVENT"
|
||||
EVENTS="EVENTS"
|
||||
EVERY="EVERY"
|
||||
EXCEPT="EXCEPT"
|
||||
EXCHANGE="EXCHANGE"
|
||||
EXCLUDE="EXCLUDE"
|
||||
EXECUTE="EXECUTE"
|
||||
EXISTS="EXISTS"
|
||||
EXIT="EXIT"
|
||||
EXPANSION="EXPANSION"
|
||||
EXPIRE="EXPIRE"
|
||||
EXPLAIN="EXPLAIN"
|
||||
EXPORT="EXPORT"
|
||||
EXTENDED="EXTENDED"
|
||||
EXTENT_SIZE="EXTENT_SIZE"
|
||||
FALSE="FALSE"
|
||||
FAST="FAST"
|
||||
FAULTS="FAULTS"
|
||||
FETCH="FETCH"
|
||||
FIELDS="FIELDS"
|
||||
FILE="FILE"
|
||||
FILE_BLOCK_SIZE="FILE_BLOCK_SIZE"
|
||||
FILTER="FILTER"
|
||||
FIRST="FIRST"
|
||||
FIRST_VALUE="FIRST_VALUE"
|
||||
FIXED="FIXED"
|
||||
FLOAT="FLOAT"
|
||||
FLOAT4="FLOAT4"
|
||||
FLOAT8="FLOAT8"
|
||||
FLUSH="FLUSH"
|
||||
FOLLOWING="FOLLOWING"
|
||||
FOLLOWS="FOLLOWS"
|
||||
FOR="FOR"
|
||||
FORCE="FORCE"
|
||||
FOREIGN="FOREIGN"
|
||||
FORMAT="FORMAT"
|
||||
FOUND="FOUND"
|
||||
FROM="FROM"
|
||||
FULL="FULL"
|
||||
FULLTEXT="FULLTEXT"
|
||||
FUNCTION="FUNCTION"
|
||||
GENERAL="GENERAL"
|
||||
GENERATED="GENERATED"
|
||||
GEOMCOLLECTION="GEOMCOLLECTION"
|
||||
GEOMETRY="GEOMETRY"
|
||||
GEOMETRYCOLLECTION="GEOMETRYCOLLECTION"
|
||||
GET="GET"
|
||||
GET_FORMAT="GET_FORMAT"
|
||||
GET_MASTER_PUBLIC_KEY="GET_MASTER_PUBLIC_KEY"
|
||||
GLOBAL="GLOBAL"
|
||||
GRANT="GRANT"
|
||||
GRANTS="GRANTS"
|
||||
GROUP="GROUP"
|
||||
GROUPING="GROUPING"
|
||||
GROUPS="GROUPS"
|
||||
GROUP_REPLICATION="GROUP_REPLICATION"
|
||||
HANDLER="HANDLER"
|
||||
HASH="HASH"
|
||||
HAVING="HAVING"
|
||||
HELP="HELP"
|
||||
HIGH_PRIORITY="HIGH_PRIORITY"
|
||||
HISTOGRAM="HISTOGRAM"
|
||||
HISTORY="HISTORY"
|
||||
HOST="HOST"
|
||||
HOSTS="HOSTS"
|
||||
HOUR="HOUR"
|
||||
HOUR_MICROSECOND="HOUR_MICROSECOND"
|
||||
HOUR_MINUTE="HOUR_MINUTE"
|
||||
HOUR_SECOND="HOUR_SECOND"
|
||||
IDENTIFIED="IDENTIFIED"
|
||||
IF="IF"
|
||||
IGNORE="IGNORE"
|
||||
IGNORE_SERVER_IDS="IGNORE_SERVER_IDS"
|
||||
IMPORT="IMPORT"
|
||||
IN="IN"
|
||||
INACTIVE="INACTIVE"
|
||||
INDEX="INDEX"
|
||||
INDEXES="INDEXES"
|
||||
INFILE="INFILE"
|
||||
INITIAL_SIZE="INITIAL_SIZE"
|
||||
INNER="INNER"
|
||||
INOUT="INOUT"
|
||||
INSENSITIVE="INSENSITIVE"
|
||||
INSERT="INSERT"
|
||||
INSERT_METHOD="INSERT_METHOD"
|
||||
INSTALL="INSTALL"
|
||||
INSTANCE="INSTANCE"
|
||||
INT="INT"
|
||||
INT1="INT1"
|
||||
INT2="INT2"
|
||||
INT3="INT3"
|
||||
INT4="INT4"
|
||||
INT8="INT8"
|
||||
INTEGER="INTEGER"
|
||||
INTERVAL="INTERVAL"
|
||||
INTO="INTO"
|
||||
INVISIBLE="INVISIBLE"
|
||||
INVOKER="INVOKER"
|
||||
IO="IO"
|
||||
IO_AFTER_GTIDS="IO_AFTER_GTIDS"
|
||||
IO_BEFORE_GTIDS="IO_BEFORE_GTIDS"
|
||||
IO_THREAD="IO_THREAD"
|
||||
IPC="IPC"
|
||||
IS="IS"
|
||||
ISOLATION="ISOLATION"
|
||||
ISSUER="ISSUER"
|
||||
ITERATE="ITERATE"
|
||||
JOIN="JOIN"
|
||||
JSON="JSON"
|
||||
JSON_TABLE="JSON_TABLE"
|
||||
KEY="KEY"
|
||||
KEYS="KEYS"
|
||||
KEY_BLOCK_SIZE="KEY_BLOCK_SIZE"
|
||||
KILL="KILL"
|
||||
LAG="LAG"
|
||||
LANGUAGE="LANGUAGE"
|
||||
LAST="LAST"
|
||||
LAST_VALUE="LAST_VALUE"
|
||||
LATERAL="LATERAL"
|
||||
LEAD="LEAD"
|
||||
LEADING="LEADING"
|
||||
LEAVE="LEAVE"
|
||||
LEAVES="LEAVES"
|
||||
LEFT="LEFT"
|
||||
LESS="LESS"
|
||||
LEVEL="LEVEL"
|
||||
LIKE="LIKE"
|
||||
LIMIT="LIMIT"
|
||||
LINEAR="LINEAR"
|
||||
LINES="LINES"
|
||||
LINESTRING="LINESTRING"
|
||||
LIST="LIST"
|
||||
LOAD="LOAD"
|
||||
LOCAL="LOCAL"
|
||||
LOCALTIME="LOCALTIME"
|
||||
LOCALTIMESTAMP="LOCALTIMESTAMP"
|
||||
LOCK="LOCK"
|
||||
LOCKED="LOCKED"
|
||||
LOCKS="LOCKS"
|
||||
LOGFILE="LOGFILE"
|
||||
LOGS="LOGS"
|
||||
LONG="LONG"
|
||||
LONGBLOB="LONGBLOB"
|
||||
LONGTEXT="LONGTEXT"
|
||||
LOOP="LOOP"
|
||||
LOW_PRIORITY="LOW_PRIORITY"
|
||||
MASTER="MASTER"
|
||||
MASTER_AUTO_POSITION="MASTER_AUTO_POSITION"
|
||||
MASTER_BIND="MASTER_BIND"
|
||||
MASTER_CONNECT_RETRY="MASTER_CONNECT_RETRY"
|
||||
MASTER_DELAY="MASTER_DELAY"
|
||||
MASTER_HEARTBEAT_PERIOD="MASTER_HEARTBEAT_PERIOD"
|
||||
MASTER_HOST="MASTER_HOST"
|
||||
MASTER_LOG_FILE="MASTER_LOG_FILE"
|
||||
MASTER_LOG_POS="MASTER_LOG_POS"
|
||||
MASTER_PASSWORD="MASTER_PASSWORD"
|
||||
MASTER_PORT="MASTER_PORT"
|
||||
MASTER_PUBLIC_KEY_PATH="MASTER_PUBLIC_KEY_PATH"
|
||||
MASTER_RETRY_COUNT="MASTER_RETRY_COUNT"
|
||||
MASTER_SERVER_ID="MASTER_SERVER_ID"
|
||||
MASTER_SSL="MASTER_SSL"
|
||||
MASTER_SSL_CA="MASTER_SSL_CA"
|
||||
MASTER_SSL_CAPATH="MASTER_SSL_CAPATH"
|
||||
MASTER_SSL_CERT="MASTER_SSL_CERT"
|
||||
MASTER_SSL_CIPHER="MASTER_SSL_CIPHER"
|
||||
MASTER_SSL_CRL="MASTER_SSL_CRL"
|
||||
MASTER_SSL_CRLPATH="MASTER_SSL_CRLPATH"
|
||||
MASTER_SSL_KEY="MASTER_SSL_KEY"
|
||||
MASTER_SSL_VERIFY_SERVER_CERT="MASTER_SSL_VERIFY_SERVER_CERT"
|
||||
MASTER_TLS_VERSION="MASTER_TLS_VERSION"
|
||||
MASTER_USER="MASTER_USER"
|
||||
MATCH="MATCH"
|
||||
MAXVALUE="MAXVALUE"
|
||||
MAX_CONNECTIONS_PER_HOUR="MAX_CONNECTIONS_PER_HOUR"
|
||||
MAX_QUERIES_PER_HOUR="MAX_QUERIES_PER_HOUR"
|
||||
MAX_ROWS="MAX_ROWS"
|
||||
MAX_SIZE="MAX_SIZE"
|
||||
MAX_UPDATES_PER_HOUR="MAX_UPDATES_PER_HOUR"
|
||||
MAX_USER_CONNECTIONS="MAX_USER_CONNECTIONS"
|
||||
MEDIUM="MEDIUM"
|
||||
MEDIUMBLOB="MEDIUMBLOB"
|
||||
MEDIUMINT="MEDIUMINT"
|
||||
MEDIUMTEXT="MEDIUMTEXT"
|
||||
MEMORY="MEMORY"
|
||||
MERGE="MERGE"
|
||||
MESSAGE_TEXT="MESSAGE_TEXT"
|
||||
MICROSECOND="MICROSECOND"
|
||||
MIDDLEINT="MIDDLEINT"
|
||||
MIGRATE="MIGRATE"
|
||||
MINUTE="MINUTE"
|
||||
MINUTE_MICROSECOND="MINUTE_MICROSECOND"
|
||||
MINUTE_SECOND="MINUTE_SECOND"
|
||||
MIN_ROWS="MIN_ROWS"
|
||||
MOD="MOD"
|
||||
MODE="MODE"
|
||||
MODIFIES="MODIFIES"
|
||||
MODIFY="MODIFY"
|
||||
MONTH="MONTH"
|
||||
MULTILINESTRING="MULTILINESTRING"
|
||||
MULTIPOINT="MULTIPOINT"
|
||||
MULTIPOLYGON="MULTIPOLYGON"
|
||||
MUTEX="MUTEX"
|
||||
MYSQL_ERRNO="MYSQL_ERRNO"
|
||||
NAME="NAME"
|
||||
NAMES="NAMES"
|
||||
NATIONAL="NATIONAL"
|
||||
NATURAL="NATURAL"
|
||||
NCHAR="NCHAR"
|
||||
NDB="NDB"
|
||||
NDBCLUSTER="NDBCLUSTER"
|
||||
NESTED="NESTED"
|
||||
NETWORK_NAMESPACE="NETWORK_NAMESPACE"
|
||||
NEVER="NEVER"
|
||||
NEW="NEW"
|
||||
NEXT="NEXT"
|
||||
NO="NO"
|
||||
NODEGROUP="NODEGROUP"
|
||||
NONE="NONE"
|
||||
NOT="NOT"
|
||||
NOWAIT="NOWAIT"
|
||||
NO_WAIT="NO_WAIT"
|
||||
NO_WRITE_TO_BINLOG="NO_WRITE_TO_BINLOG"
|
||||
NTH_VALUE="NTH_VALUE"
|
||||
NTILE="NTILE"
|
||||
NULL="NULL"
|
||||
NULLS="NULLS"
|
||||
NUMBER="NUMBER"
|
||||
NUMERIC="NUMERIC"
|
||||
NVARCHAR="NVARCHAR"
|
||||
OF="OF"
|
||||
OFFSET="OFFSET"
|
||||
OJ="OJ"
|
||||
OLD="OLD"
|
||||
ON="ON"
|
||||
ONE="ONE"
|
||||
ONLY="ONLY"
|
||||
OPEN="OPEN"
|
||||
OPTIMIZE="OPTIMIZE"
|
||||
OPTIMIZER_COSTS="OPTIMIZER_COSTS"
|
||||
OPTION="OPTION"
|
||||
OPTIONAL="OPTIONAL"
|
||||
OPTIONALLY="OPTIONALLY"
|
||||
OPTIONS="OPTIONS"
|
||||
OR="OR"
|
||||
ORDER="ORDER"
|
||||
ORDINALITY="ORDINALITY"
|
||||
ORGANIZATION="ORGANIZATION"
|
||||
OTHERS="OTHERS"
|
||||
OUT="OUT"
|
||||
OUTER="OUTER"
|
||||
OUTFILE="OUTFILE"
|
||||
OVER="OVER"
|
||||
OWNER="OWNER"
|
||||
PACK_KEYS="PACK_KEYS"
|
||||
PAGE="PAGE"
|
||||
PARSER="PARSER"
|
||||
PARTIAL="PARTIAL"
|
||||
PARTITION="PARTITION"
|
||||
PARTITIONING="PARTITIONING"
|
||||
PARTITIONS="PARTITIONS"
|
||||
PASSWORD="PASSWORD"
|
||||
PATH="PATH"
|
||||
PERCENT_RANK="PERCENT_RANK"
|
||||
PERSIST="PERSIST"
|
||||
PERSIST_ONLY="PERSIST_ONLY"
|
||||
PHASE="PHASE"
|
||||
PLUGIN="PLUGIN"
|
||||
PLUGINS="PLUGINS"
|
||||
PLUGIN_DIR="PLUGIN_DIR"
|
||||
POINT="POINT"
|
||||
POLYGON="POLYGON"
|
||||
PORT="PORT"
|
||||
PRECEDES="PRECEDES"
|
||||
PRECEDING="PRECEDING"
|
||||
PRECISION="PRECISION"
|
||||
PREPARE="PREPARE"
|
||||
PRESERVE="PRESERVE"
|
||||
PREV="PREV"
|
||||
PRIMARY="PRIMARY"
|
||||
PRIVILEGES="PRIVILEGES"
|
||||
PROCEDURE="PROCEDURE"
|
||||
PROCESS="PROCESS"
|
||||
PROCESSLIST="PROCESSLIST"
|
||||
PROFILE="PROFILE"
|
||||
PROFILES="PROFILES"
|
||||
PROXY="PROXY"
|
||||
PURGE="PURGE"
|
||||
QUARTER="QUARTER"
|
||||
QUERY="QUERY"
|
||||
QUICK="QUICK"
|
||||
RANGE="RANGE"
|
||||
RANK="RANK"
|
||||
READ="READ"
|
||||
READS="READS"
|
||||
READ_ONLY="READ_ONLY"
|
||||
READ_WRITE="READ_WRITE"
|
||||
REAL="REAL"
|
||||
REBUILD="REBUILD"
|
||||
RECOVER="RECOVER"
|
||||
RECURSIVE="RECURSIVE"
|
||||
REDO_BUFFER_SIZE="REDO_BUFFER_SIZE"
|
||||
REDUNDANT="REDUNDANT"
|
||||
REFERENCE="REFERENCE"
|
||||
REFERENCES="REFERENCES"
|
||||
REGEXP="REGEXP"
|
||||
RELAY="RELAY"
|
||||
RELAYLOG="RELAYLOG"
|
||||
RELAY_LOG_FILE="RELAY_LOG_FILE"
|
||||
RELAY_LOG_POS="RELAY_LOG_POS"
|
||||
RELAY_THREAD="RELAY_THREAD"
|
||||
RELEASE="RELEASE"
|
||||
RELOAD="RELOAD"
|
||||
REMOVE="REMOVE"
|
||||
RENAME="RENAME"
|
||||
REORGANIZE="REORGANIZE"
|
||||
REPAIR="REPAIR"
|
||||
REPEAT="REPEAT"
|
||||
REPEATABLE="REPEATABLE"
|
||||
REPLACE="REPLACE"
|
||||
REPLICATE_DO_DB="REPLICATE_DO_DB"
|
||||
REPLICATE_DO_TABLE="REPLICATE_DO_TABLE"
|
||||
REPLICATE_IGNORE_DB="REPLICATE_IGNORE_DB"
|
||||
REPLICATE_IGNORE_TABLE="REPLICATE_IGNORE_TABLE"
|
||||
REPLICATE_REWRITE_DB="REPLICATE_REWRITE_DB"
|
||||
REPLICATE_WILD_DO_TABLE="REPLICATE_WILD_DO_TABLE"
|
||||
REPLICATE_WILD_IGNORE_TABLE="REPLICATE_WILD_IGNORE_TABLE"
|
||||
REPLICATION="REPLICATION"
|
||||
REQUIRE="REQUIRE"
|
||||
RESET="RESET"
|
||||
RESIGNAL="RESIGNAL"
|
||||
RESOURCE="RESOURCE"
|
||||
RESPECT="RESPECT"
|
||||
RESTART="RESTART"
|
||||
RESTORE="RESTORE"
|
||||
RESTRICT="RESTRICT"
|
||||
RESUME="RESUME"
|
||||
RETAIN="RETAIN"
|
||||
RETURN="RETURN"
|
||||
RETURNED_SQLSTATE="RETURNED_SQLSTATE"
|
||||
RETURNS="RETURNS"
|
||||
REUSE="REUSE"
|
||||
REVERSE="REVERSE"
|
||||
REVOKE="REVOKE"
|
||||
RIGHT="RIGHT"
|
||||
RLIKE="RLIKE"
|
||||
ROLE="ROLE"
|
||||
ROLLBACK="ROLLBACK"
|
||||
ROLLUP="ROLLUP"
|
||||
ROTATE="ROTATE"
|
||||
ROUTINE="ROUTINE"
|
||||
ROW="ROW"
|
||||
ROWS="ROWS"
|
||||
ROW_COUNT="ROW_COUNT"
|
||||
ROW_FORMAT="ROW_FORMAT"
|
||||
ROW_NUMBER="ROW_NUMBER"
|
||||
RTREE="RTREE"
|
||||
SAVEPOINT="SAVEPOINT"
|
||||
SCHEDULE="SCHEDULE"
|
||||
SCHEMA="SCHEMA"
|
||||
SCHEMAS="SCHEMAS"
|
||||
SCHEMA_NAME="SCHEMA_NAME"
|
||||
SECOND="SECOND"
|
||||
SECONDARY="SECONDARY"
|
||||
SECONDARY_ENGINE="SECONDARY_ENGINE"
|
||||
SECONDARY_LOAD="SECONDARY_LOAD"
|
||||
SECONDARY_UNLOAD="SECONDARY_UNLOAD"
|
||||
SECOND_MICROSECOND="SECOND_MICROSECOND"
|
||||
SECURITY="SECURITY"
|
||||
SELECT="SELECT"
|
||||
SENSITIVE="SENSITIVE"
|
||||
SEPARATOR="SEPARATOR"
|
||||
SERIAL="SERIAL"
|
||||
SERIALIZABLE="SERIALIZABLE"
|
||||
SERVER="SERVER"
|
||||
SESSION="SESSION"
|
||||
SET="SET"
|
||||
SHARE="SHARE"
|
||||
SHOW="SHOW"
|
||||
SHUTDOWN="SHUTDOWN"
|
||||
SIGNAL="SIGNAL"
|
||||
SIGNED="SIGNED"
|
||||
SIMPLE="SIMPLE"
|
||||
SKIP="SKIP"
|
||||
SLAVE="SLAVE"
|
||||
SLOW="SLOW"
|
||||
SMALLINT="SMALLINT"
|
||||
SNAPSHOT="SNAPSHOT"
|
||||
SOCKET="SOCKET"
|
||||
SOME="SOME"
|
||||
SONAME="SONAME"
|
||||
SOUNDS="SOUNDS"
|
||||
SOURCE="SOURCE"
|
||||
SPATIAL="SPATIAL"
|
||||
SPECIFIC="SPECIFIC"
|
||||
SQL="SQL"
|
||||
SQLEXCEPTION="SQLEXCEPTION"
|
||||
SQLSTATE="SQLSTATE"
|
||||
SQLWARNING="SQLWARNING"
|
||||
SQL_AFTER_GTIDS="SQL_AFTER_GTIDS"
|
||||
SQL_AFTER_MTS_GAPS="SQL_AFTER_MTS_GAPS"
|
||||
SQL_BEFORE_GTIDS="SQL_BEFORE_GTIDS"
|
||||
SQL_BIG_RESULT="SQL_BIG_RESULT"
|
||||
SQL_BUFFER_RESULT="SQL_BUFFER_RESULT"
|
||||
SQL_CALC_FOUND_ROWS="SQL_CALC_FOUND_ROWS"
|
||||
SQL_NO_CACHE="SQL_NO_CACHE"
|
||||
SQL_SMALL_RESULT="SQL_SMALL_RESULT"
|
||||
SQL_THREAD="SQL_THREAD"
|
||||
SQL_TSI_DAY="SQL_TSI_DAY"
|
||||
SQL_TSI_HOUR="SQL_TSI_HOUR"
|
||||
SQL_TSI_MINUTE="SQL_TSI_MINUTE"
|
||||
SQL_TSI_MONTH="SQL_TSI_MONTH"
|
||||
SQL_TSI_QUARTER="SQL_TSI_QUARTER"
|
||||
SQL_TSI_SECOND="SQL_TSI_SECOND"
|
||||
SQL_TSI_WEEK="SQL_TSI_WEEK"
|
||||
SQL_TSI_YEAR="SQL_TSI_YEAR"
|
||||
SRID="SRID"
|
||||
SSL="SSL"
|
||||
STACKED="STACKED"
|
||||
START="START"
|
||||
STARTING="STARTING"
|
||||
STARTS="STARTS"
|
||||
STATS_AUTO_RECALC="STATS_AUTO_RECALC"
|
||||
STATS_PERSISTENT="STATS_PERSISTENT"
|
||||
STATS_SAMPLE_PAGES="STATS_SAMPLE_PAGES"
|
||||
STATUS="STATUS"
|
||||
STOP="STOP"
|
||||
STORAGE="STORAGE"
|
||||
STORED="STORED"
|
||||
STRAIGHT_JOIN="STRAIGHT_JOIN"
|
||||
STRING="STRING"
|
||||
SUBCLASS_ORIGIN="SUBCLASS_ORIGIN"
|
||||
SUBJECT="SUBJECT"
|
||||
SUBPARTITION="SUBPARTITION"
|
||||
SUBPARTITIONS="SUBPARTITIONS"
|
||||
SUPER="SUPER"
|
||||
SUSPEND="SUSPEND"
|
||||
SWAPS="SWAPS"
|
||||
SWITCHES="SWITCHES"
|
||||
SYSTEM="SYSTEM"
|
||||
TABLE="TABLE"
|
||||
TABLES="TABLES"
|
||||
TABLESPACE="TABLESPACE"
|
||||
TABLE_CHECKSUM="TABLE_CHECKSUM"
|
||||
TABLE_NAME="TABLE_NAME"
|
||||
TEMPORARY="TEMPORARY"
|
||||
TEMPTABLE="TEMPTABLE"
|
||||
TERMINATED="TERMINATED"
|
||||
TEXT="TEXT"
|
||||
THAN="THAN"
|
||||
THEN="THEN"
|
||||
THREAD_PRIORITY="THREAD_PRIORITY"
|
||||
TIES="TIES"
|
||||
TIME="TIME"
|
||||
TIMESTAMP="TIMESTAMP"
|
||||
TIMESTAMPADD="TIMESTAMPADD"
|
||||
TIMESTAMPDIFF="TIMESTAMPDIFF"
|
||||
TINYBLOB="TINYBLOB"
|
||||
TINYINT="TINYINT"
|
||||
TINYTEXT="TINYTEXT"
|
||||
TO="TO"
|
||||
TRAILING="TRAILING"
|
||||
TRANSACTION="TRANSACTION"
|
||||
TRIGGER="TRIGGER"
|
||||
TRIGGERS="TRIGGERS"
|
||||
TRUE="TRUE"
|
||||
TRUNCATE="TRUNCATE"
|
||||
TYPE="TYPE"
|
||||
TYPES="TYPES"
|
||||
UNBOUNDED="UNBOUNDED"
|
||||
UNCOMMITTED="UNCOMMITTED"
|
||||
UNDEFINED="UNDEFINED"
|
||||
UNDO="UNDO"
|
||||
UNDOFILE="UNDOFILE"
|
||||
UNDO_BUFFER_SIZE="UNDO_BUFFER_SIZE"
|
||||
UNICODE="UNICODE"
|
||||
UNINSTALL="UNINSTALL"
|
||||
UNION="UNION"
|
||||
UNIQUE="UNIQUE"
|
||||
UNKNOWN="UNKNOWN"
|
||||
UNLOCK="UNLOCK"
|
||||
UNSIGNED="UNSIGNED"
|
||||
UNTIL="UNTIL"
|
||||
UPDATE="UPDATE"
|
||||
UPGRADE="UPGRADE"
|
||||
USAGE="USAGE"
|
||||
USE="USE"
|
||||
USER="USER"
|
||||
USER_RESOURCES="USER_RESOURCES"
|
||||
USE_FRM="USE_FRM"
|
||||
USING="USING"
|
||||
UTC_DATE="UTC_DATE"
|
||||
UTC_TIME="UTC_TIME"
|
||||
UTC_TIMESTAMP="UTC_TIMESTAMP"
|
||||
VALIDATION="VALIDATION"
|
||||
VALUE="VALUE"
|
||||
VALUES="VALUES"
|
||||
VARBINARY="VARBINARY"
|
||||
VARCHAR="VARCHAR"
|
||||
VARCHARACTER="VARCHARACTER"
|
||||
VARIABLES="VARIABLES"
|
||||
VARYING="VARYING"
|
||||
VCPU="VCPU"
|
||||
VIEW="VIEW"
|
||||
VIRTUAL="VIRTUAL"
|
||||
VISIBLE="VISIBLE"
|
||||
WAIT="WAIT"
|
||||
WARNINGS="WARNINGS"
|
||||
WEEK="WEEK"
|
||||
WEIGHT_STRING="WEIGHT_STRING"
|
||||
WHEN="WHEN"
|
||||
WHERE="WHERE"
|
||||
WHILE="WHILE"
|
||||
WINDOW="WINDOW"
|
||||
WITH="WITH"
|
||||
WITHOUT="WITHOUT"
|
||||
WORK="WORK"
|
||||
WRAPPER="WRAPPER"
|
||||
WRITE="WRITE"
|
||||
X509="X509"
|
||||
XA="XA"
|
||||
XID="XID"
|
||||
XML="XML"
|
||||
XOR="XOR"
|
||||
YEAR="YEAR"
|
||||
YEAR_MONTH="YEAR_MONTH"
|
||||
ZEROFILL="ZEROFILL"
|
222
dictionaries/exif.dict
Normal file
222
dictionaries/exif.dict
Normal file
@ -0,0 +1,222 @@
|
||||
"\x00\x01"
|
||||
"\x00\x02"
|
||||
"\x00\x10"
|
||||
"\x00\x90"
|
||||
"\x00\xa0"
|
||||
"\x00\xa3"
|
||||
"\x00\xa5"
|
||||
"\x00\xfe"
|
||||
"\x01\x00"
|
||||
"\x01\x01"
|
||||
"\x01\x02"
|
||||
"\x01\x03"
|
||||
"\x01\x06"
|
||||
"\x01\x0a"
|
||||
"\x01\x0d"
|
||||
"\x01\x0e"
|
||||
"\x01\x0f"
|
||||
"\x01\x10"
|
||||
"\x01\x11"
|
||||
"\x01\x12"
|
||||
"\x01\x15"
|
||||
"\x01\x16"
|
||||
"\x01\x17"
|
||||
"\x01\x1a"
|
||||
"\x01\x1b"
|
||||
"\x01\x1c"
|
||||
"\x01\x28"
|
||||
"\x01\x2d"
|
||||
"\x01\x31"
|
||||
"\x01\x32"
|
||||
"\x01\x3b"
|
||||
"\x01\x3e"
|
||||
"\x01\x3f"
|
||||
"\x01\x4a"
|
||||
"\x01\x56"
|
||||
"\x01\x91"
|
||||
"\x01\x92"
|
||||
"\x01\xa0"
|
||||
"\x01\xa3"
|
||||
"\x01\xa4"
|
||||
"\x02\x00"
|
||||
"\x02\x01"
|
||||
"\x02\x02"
|
||||
"\x02\x10"
|
||||
"\x02\x11"
|
||||
"\x02\x12"
|
||||
"\x02\x13"
|
||||
"\x02\x14"
|
||||
"\x02\x91"
|
||||
"\x02\x92"
|
||||
"\x02\xa0"
|
||||
"\x02\xa3"
|
||||
"\x02\xa4"
|
||||
"\x02\xbc"
|
||||
"\x03\x01"
|
||||
"\x03\x90"
|
||||
"\x03\x92"
|
||||
"\x03\xa0"
|
||||
"\x03\xa4"
|
||||
"\x04\x90"
|
||||
"\x04\x92"
|
||||
"\x04\xa0"
|
||||
"\x04\xa4"
|
||||
"\x05\x92"
|
||||
"\x05\xa0"
|
||||
"\x05\xa4"
|
||||
"\x06\x01"
|
||||
"\x06\x92"
|
||||
"\x06\xa4"
|
||||
"\x07\x92"
|
||||
"\x07\xa4"
|
||||
"\x08\x92"
|
||||
"\x08\xa4"
|
||||
"\x09\x92"
|
||||
"\x09\xa4"
|
||||
"\x0a\x01"
|
||||
"\x0a\x92"
|
||||
"\x0a\xa4"
|
||||
"\x0b\xa2"
|
||||
"\x0b\xa4"
|
||||
"\x0c\xa2"
|
||||
"\x0c\xa4"
|
||||
"\x0d\x01"
|
||||
"\x0e\x01"
|
||||
"\x0e\xa2"
|
||||
"\x0f\x01"
|
||||
"\x0f\xa2"
|
||||
"\x10\x00"
|
||||
"\x10\x01"
|
||||
"\x10\x02"
|
||||
"\x10\xa2"
|
||||
"\x11\x01"
|
||||
"\x11\x02"
|
||||
"\x12\x01"
|
||||
"\x12\x02"
|
||||
"\x13\x02"
|
||||
"\x14\x02"
|
||||
"\x14\x92"
|
||||
"\x14\xa2"
|
||||
"\x15\x01"
|
||||
"\x15\xa2"
|
||||
"\x16\x01"
|
||||
"\x16\x92"
|
||||
"\x17\x01"
|
||||
"\x17\xa2"
|
||||
"\x1a\x01"
|
||||
"\x1b\x01"
|
||||
"\x1c\x01"
|
||||
"\x1c\xea"
|
||||
"\x20\xa4"
|
||||
"\x22\x88"
|
||||
"\x24\x88"
|
||||
"\x25\x88"
|
||||
"\x27\x88"
|
||||
"\x28\x01"
|
||||
"\x28\x88"
|
||||
"\x2a\x88"
|
||||
"\x2d\x01"
|
||||
"\x31\x01"
|
||||
"\x32\x01"
|
||||
"\x3b\x01"
|
||||
"\x3e\x01"
|
||||
"\x3f\x01"
|
||||
"\x49\x86"
|
||||
"\x4a\x01"
|
||||
"\x56\x01"
|
||||
"\x69\x87"
|
||||
"\x73\x87"
|
||||
"\x7c\x92"
|
||||
"\x82\x8d"
|
||||
"\x82\x8e"
|
||||
"\x82\x8f"
|
||||
"\x82\x98"
|
||||
"\x82\x9a"
|
||||
"\x82\x9d"
|
||||
"\x83\xbb"
|
||||
"\x86\x49"
|
||||
"\x86\x92"
|
||||
"\x87\x69"
|
||||
"\x87\x73"
|
||||
"\x88\x22"
|
||||
"\x88\x24"
|
||||
"\x88\x25"
|
||||
"\x88\x27"
|
||||
"\x88\x28"
|
||||
"\x88\x2a"
|
||||
"\x8d\x82"
|
||||
"\x8e\x82"
|
||||
"\x8f\x82"
|
||||
"\x90\x00"
|
||||
"\x90\x03"
|
||||
"\x90\x04"
|
||||
"\x90\x92"
|
||||
"\x91\x01"
|
||||
"\x91\x02"
|
||||
"\x91\x92"
|
||||
"\x92\x01"
|
||||
"\x92\x02"
|
||||
"\x92\x03"
|
||||
"\x92\x04"
|
||||
"\x92\x05"
|
||||
"\x92\x06"
|
||||
"\x92\x07"
|
||||
"\x92\x08"
|
||||
"\x92\x09"
|
||||
"\x92\x0a"
|
||||
"\x92\x14"
|
||||
"\x92\x16"
|
||||
"\x92\x7c"
|
||||
"\x92\x86"
|
||||
"\x92\x90"
|
||||
"\x92\x91"
|
||||
"\x92\x92"
|
||||
"\x98\x82"
|
||||
"\x9a\x82"
|
||||
"\x9b\x9c"
|
||||
"\x9c\x9b"
|
||||
"\x9c\x9c"
|
||||
"\x9c\x9d"
|
||||
"\x9c\x9e"
|
||||
"\x9c\x9f"
|
||||
"\x9d\x82"
|
||||
"\x9d\x9c"
|
||||
"\x9e\x9c"
|
||||
"\x9f\x9c"
|
||||
"\xa0\x00"
|
||||
"\xa0\x01"
|
||||
"\xa0\x02"
|
||||
"\xa0\x03"
|
||||
"\xa0\x04"
|
||||
"\xa0\x05"
|
||||
"\xa2\x0b"
|
||||
"\xa2\x0c"
|
||||
"\xa2\x0e"
|
||||
"\xa2\x0f"
|
||||
"\xa2\x10"
|
||||
"\xa2\x14"
|
||||
"\xa2\x15"
|
||||
"\xa2\x17"
|
||||
"\xa3\x00"
|
||||
"\xa3\x01"
|
||||
"\xa3\x02"
|
||||
"\xa4\x01"
|
||||
"\xa4\x02"
|
||||
"\xa4\x03"
|
||||
"\xa4\x04"
|
||||
"\xa4\x05"
|
||||
"\xa4\x06"
|
||||
"\xa4\x07"
|
||||
"\xa4\x08"
|
||||
"\xa4\x09"
|
||||
"\xa4\x0a"
|
||||
"\xa4\x0b"
|
||||
"\xa4\x0c"
|
||||
"\xa4\x20"
|
||||
"\xa5\x00"
|
||||
"\xa5\xc4"
|
||||
"\xbb\x83"
|
||||
"\xbc\x02"
|
||||
"\xc4\xa5"
|
||||
"\xea\x1c"
|
||||
"\xfe\x00"
|
42
dictionaries/fbs.dict
Normal file
42
dictionaries/fbs.dict
Normal file
@ -0,0 +1,42 @@
|
||||
# spec: https://google.github.io/flatbuffers/flatbuffers_grammar.html
|
||||
|
||||
attribute="attribute"
|
||||
bool="bool"
|
||||
byte="byte"
|
||||
double="double"
|
||||
enum="enum"
|
||||
false="false"
|
||||
file_extension="file_extension"
|
||||
float32="float32"
|
||||
float64="float64"
|
||||
float="float"
|
||||
include="include"
|
||||
inf="inf"
|
||||
infinity="infinity"
|
||||
int16="int16"
|
||||
int32="int32"
|
||||
int64="int64"
|
||||
int8="int8"
|
||||
int="int"
|
||||
long="long"
|
||||
namespace="namespace"
|
||||
nan="nan"
|
||||
root_type="root_type"
|
||||
root_type="root_type"
|
||||
rpc_service="rpc_service"
|
||||
short="short"
|
||||
string="string"
|
||||
struct="struct"
|
||||
table="table"
|
||||
true="true"
|
||||
ubyte="ubyte"
|
||||
uint16="uint16"
|
||||
uint32="uint32"
|
||||
uint64="uint64"
|
||||
uint="uint"
|
||||
ulong="ulong"
|
||||
union="union"
|
||||
ushort="ushort"
|
||||
|
||||
separator=":"
|
||||
eol=";"
|
124
dictionaries/ftp.dict
Normal file
124
dictionaries/ftp.dict
Normal file
@ -0,0 +1,124 @@
|
||||
# from https://github.com/antonio-morales/Fuzzing/Dictionaries/FTP/Example.dict.txt
|
||||
#Parameters
|
||||
#tls = {0,1,2,3}
|
||||
|
||||
#Input1
|
||||
"user"
|
||||
"pass"
|
||||
"syst"
|
||||
"acct"
|
||||
"feat"
|
||||
"noop"
|
||||
"help"
|
||||
"stat"
|
||||
"stru"
|
||||
"adat"
|
||||
"site"
|
||||
|
||||
#Input2
|
||||
"mkd"
|
||||
"cwd"
|
||||
"pwd"
|
||||
"cdup"
|
||||
|
||||
#Input3
|
||||
"port"
|
||||
"list"
|
||||
"mlst"
|
||||
"nlst"
|
||||
"mlsd"
|
||||
|
||||
#Input4
|
||||
"rmd"
|
||||
|
||||
#Input5
|
||||
"stor"
|
||||
|
||||
#Input6
|
||||
"retr"
|
||||
|
||||
#Input7
|
||||
"dele"
|
||||
|
||||
#Input8
|
||||
"pasv"
|
||||
|
||||
#Input9
|
||||
"epsv"
|
||||
|
||||
#Input10
|
||||
"type"
|
||||
"size"
|
||||
|
||||
#Input11
|
||||
"mode"
|
||||
|
||||
#Input12
|
||||
"rnfr"
|
||||
"rnto"
|
||||
|
||||
#Input13
|
||||
"appe"
|
||||
|
||||
#Input14
|
||||
"allo"
|
||||
"quit"
|
||||
|
||||
#Input15
|
||||
"connect"
|
||||
|
||||
#Input16
|
||||
"esta"
|
||||
"estp"
|
||||
|
||||
#Input17
|
||||
"mdtm"
|
||||
"opts"
|
||||
"eprt"
|
||||
|
||||
#Input18
|
||||
"mfmt"
|
||||
"pret"
|
||||
"stou"
|
||||
"rest"
|
||||
|
||||
|
||||
#-------------------------------------
|
||||
"\x00"
|
||||
"\x0d\x0a"
|
||||
"\x0d"
|
||||
"\x0a"
|
||||
"-"
|
||||
"-a "
|
||||
"-C "
|
||||
"-d "
|
||||
"-F "
|
||||
"-l "
|
||||
"-r "
|
||||
"-R "
|
||||
"-S "
|
||||
"-t"
|
||||
" "
|
||||
"fuzzing"
|
||||
"test"
|
||||
"teste"
|
||||
".txt"
|
||||
"test.txt"
|
||||
" UTC"
|
||||
"C"
|
||||
"E"
|
||||
"P"
|
||||
"S"
|
||||
"abor"
|
||||
|
||||
#ifdef WITH_TLS
|
||||
"pbsz"
|
||||
"auth"
|
||||
"prot"
|
||||
"ccc"
|
||||
|
||||
#ifdef DEBUG
|
||||
"xdbg"
|
||||
|
||||
# ifdef WITH_DIRALIASES
|
||||
"alias"
|
@ -2,7 +2,7 @@
|
||||
# AFL dictionary for GIF images
|
||||
# -----------------------------
|
||||
#
|
||||
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||
# Created by Michal Zalewski
|
||||
#
|
||||
|
||||
header_87a="87a"
|
||||
|
373
dictionaries/graphviz.dict
Normal file
373
dictionaries/graphviz.dict
Normal file
@ -0,0 +1,373 @@
|
||||
# Semi-manually curated list of interesting words within a graphviz input file.
|
||||
# TODO(robhart): Consider expanding from:
|
||||
# - htmllex.c
|
||||
# - ?
|
||||
# Not included exhaustive list of colortables, fontnames, etc. that are unlikely
|
||||
# to influence core graphviz behaviour.
|
||||
|
||||
# Attributes (from http://www.graphviz.org/doc/info/attrs.html)
|
||||
"Damping"
|
||||
"K"
|
||||
"URL"
|
||||
"_background"
|
||||
"area"
|
||||
"arrowhead"
|
||||
"arrowsize"
|
||||
"arrowtail"
|
||||
"bb"
|
||||
"bgcolor"
|
||||
"colorList"
|
||||
"center"
|
||||
"charset"
|
||||
"clusterrank"
|
||||
"color"
|
||||
"colorList"
|
||||
"colorscheme"
|
||||
"comment"
|
||||
"compound"
|
||||
"concentrate"
|
||||
"constraint"
|
||||
"decorate"
|
||||
"defaultdist"
|
||||
"dim"
|
||||
"dimen"
|
||||
"dir"
|
||||
"diredgeconstraints"
|
||||
"distortion"
|
||||
"dpi"
|
||||
"edgeURL"
|
||||
"edgehref"
|
||||
"edgetarget"
|
||||
"edgetooltip"
|
||||
"epsilon"
|
||||
"esep"
|
||||
"fillcolor"
|
||||
"fixedsize"
|
||||
"fontcolor"
|
||||
"fontname"
|
||||
"fontnames"
|
||||
"fontpath"
|
||||
"fontsize"
|
||||
"forcelabels"
|
||||
"gradientangle"
|
||||
"group"
|
||||
"headURL"
|
||||
"head_lp"
|
||||
"headclip"
|
||||
"headhref"
|
||||
"headlabel"
|
||||
"headport"
|
||||
"headtarget"
|
||||
"headtooltip"
|
||||
"height"
|
||||
"href"
|
||||
"id"
|
||||
"image"
|
||||
"imagepath"
|
||||
"imagescale"
|
||||
"inputscale"
|
||||
"label"
|
||||
"labelURL"
|
||||
"label_scheme"
|
||||
"labelangle"
|
||||
"labeldistance"
|
||||
"labelfloat"
|
||||
"labelfontcolor"
|
||||
"labelfontname"
|
||||
"labelfontsize"
|
||||
"labelhref"
|
||||
"labeljust"
|
||||
"labelloc"
|
||||
"labeltarget"
|
||||
"labeltooltip"
|
||||
"landscape"
|
||||
"layer"
|
||||
"layerlistsep"
|
||||
"layers"
|
||||
"layerselect"
|
||||
"layersep"
|
||||
"layout"
|
||||
"len"
|
||||
"levels"
|
||||
"levelsgap"
|
||||
"lhead"
|
||||
"lheight"
|
||||
"lp"
|
||||
"ltail"
|
||||
"lwidth"
|
||||
"margin"
|
||||
"maxiter"
|
||||
"mclimit"
|
||||
"mindist"
|
||||
"minlen"
|
||||
"mode"
|
||||
"model"
|
||||
"mosek"
|
||||
"newrank"
|
||||
"nodesep"
|
||||
"nojustify"
|
||||
"normalize"
|
||||
"notranslate"
|
||||
"nslimit "
|
||||
"nslimit1"
|
||||
"ordering"
|
||||
"orientation"
|
||||
"OrientationGraph"
|
||||
"outputorder"
|
||||
"overlap"
|
||||
"overlap_scaling"
|
||||
"overlap_shrink"
|
||||
"pack"
|
||||
"packmode"
|
||||
"pad"
|
||||
"point"
|
||||
"page"
|
||||
"point"
|
||||
"pagedir"
|
||||
"pencolor"
|
||||
"penwidth"
|
||||
"peripheries"
|
||||
"pin"
|
||||
"pos"
|
||||
"splineType"
|
||||
"quadtree"
|
||||
"quantum"
|
||||
"rank"
|
||||
"rankdir"
|
||||
"ranksep"
|
||||
"ratio"
|
||||
"string"
|
||||
"rects"
|
||||
"regular"
|
||||
"remincross"
|
||||
"RemoveOverlaps"
|
||||
"repulsiveforce"
|
||||
"resolution"
|
||||
"root"
|
||||
"rotate"
|
||||
"rotation"
|
||||
"samehead"
|
||||
"sametail"
|
||||
"samplepoints"
|
||||
"scale"
|
||||
"searchsize"
|
||||
"sep"
|
||||
"setlinewidth"
|
||||
"shape"
|
||||
"shapefile"
|
||||
"showboxes"
|
||||
"sides"
|
||||
"size"
|
||||
"skew"
|
||||
"smoothing"
|
||||
"sortv"
|
||||
"splines"
|
||||
"string"
|
||||
"start"
|
||||
"style"
|
||||
"stylesheet"
|
||||
"tailURL"
|
||||
"tail_lp"
|
||||
"tailclip"
|
||||
"tailhref"
|
||||
"taillabel"
|
||||
"tailport"
|
||||
"tailtarget"
|
||||
"tailtooltip"
|
||||
"target"
|
||||
"tooltip"
|
||||
"truecolor"
|
||||
"vertices"
|
||||
"viewport"
|
||||
"voro_margin"
|
||||
"weight"
|
||||
"width"
|
||||
"xdotversion"
|
||||
"xlabel"
|
||||
"xlp"
|
||||
"z"
|
||||
|
||||
# Shapes (from shapes.c)
|
||||
"box"
|
||||
"polygon"
|
||||
"ellipse"
|
||||
"oval"
|
||||
"circle"
|
||||
"point"
|
||||
"egg"
|
||||
"triangle"
|
||||
"none"
|
||||
"plaintext"
|
||||
"plain"
|
||||
"diamond"
|
||||
"trapezium"
|
||||
"parallelogram"
|
||||
"house"
|
||||
"pentagon"
|
||||
"hexagon"
|
||||
"septagon"
|
||||
"octagon"
|
||||
"note"
|
||||
"tab"
|
||||
"folder"
|
||||
"box3d"
|
||||
"component"
|
||||
"cylinder"
|
||||
"rect"
|
||||
"rectangle"
|
||||
"square"
|
||||
"doublecircle"
|
||||
"doubleoctagon"
|
||||
"tripleoctagon"
|
||||
"invtriangle"
|
||||
"invtrapezium"
|
||||
"invhouse"
|
||||
"underline"
|
||||
"Mdiamond"
|
||||
"Msquare"
|
||||
"Mcircle"
|
||||
"DotGraphs"
|
||||
|
||||
"promoter"
|
||||
"cds"
|
||||
"terminator"
|
||||
"utr"
|
||||
"insulator"
|
||||
"ribosite"
|
||||
"rnastab"
|
||||
"proteasesite"
|
||||
"proteinstab"
|
||||
|
||||
"primersite"
|
||||
"restrictionsite"
|
||||
"fivepoverhang"
|
||||
"threepoverhang"
|
||||
"noverhang"
|
||||
"assembly"
|
||||
"signature"
|
||||
"rpromoter"
|
||||
"larrow"
|
||||
"rarrow"
|
||||
"lpromoter"
|
||||
|
||||
"record"
|
||||
"Mrecord"
|
||||
"epsf"
|
||||
"star"
|
||||
|
||||
# styles
|
||||
"bold"
|
||||
"dashed"
|
||||
"diagonals"
|
||||
"dotted"
|
||||
"filled"
|
||||
"invis"
|
||||
"radial"
|
||||
"rounded"
|
||||
"solid"
|
||||
"striped"
|
||||
"tapered"
|
||||
"wedged"
|
||||
|
||||
|
||||
# misc -- https://graphviz.gitlab.io/_pages/doc/info/lang.html
|
||||
"node"
|
||||
"edge"
|
||||
"digraph"
|
||||
"subgraph"
|
||||
"strict"
|
||||
"same"
|
||||
"->"
|
||||
"--"
|
||||
" {A B} "
|
||||
" a -- b "
|
||||
# Special value for the "shape" attribute
|
||||
"epsf"
|
||||
|
||||
# html
|
||||
"=\""
|
||||
"<table"
|
||||
"<tr"
|
||||
"<td"
|
||||
"<font"
|
||||
"<br"
|
||||
"<img"
|
||||
"<i"
|
||||
"<b"
|
||||
"<u"
|
||||
"<o"
|
||||
"<sub"
|
||||
"<sup"
|
||||
"<s"
|
||||
"<hr"
|
||||
"<vr"
|
||||
|
||||
# html attributes
|
||||
"align"
|
||||
"balign"
|
||||
"bgcolor"
|
||||
"border"
|
||||
"cellborder"
|
||||
"cellpadding"
|
||||
"cellspacing"
|
||||
"color"
|
||||
"colspan"
|
||||
"columns"
|
||||
"face"
|
||||
"fixedsize"
|
||||
"gradientangle"
|
||||
"height"
|
||||
"href"
|
||||
"id"
|
||||
"point-size"
|
||||
"port"
|
||||
"rows"
|
||||
"rowspan"
|
||||
"scale"
|
||||
"sides"
|
||||
"src"
|
||||
"style"
|
||||
"target"
|
||||
"title"
|
||||
"tooltip"
|
||||
"valign"
|
||||
"width"
|
||||
|
||||
# arrow spaces
|
||||
"box"
|
||||
"crow"
|
||||
"curve"
|
||||
"icurve"
|
||||
"diamond"
|
||||
"dot"
|
||||
"inv"
|
||||
"none"
|
||||
"normal"
|
||||
"tee"
|
||||
"vee"
|
||||
|
||||
|
||||
# Examples of parameters
|
||||
"%f"
|
||||
"50,50,.5,'2.8 BSD'"
|
||||
"100,100,2,450,-1"
|
||||
"none"
|
||||
"avg_dist"
|
||||
"graph_dist"
|
||||
"power_dist"
|
||||
"rng"
|
||||
"spring"
|
||||
"triangle"
|
||||
"same"
|
||||
"min"
|
||||
"source"
|
||||
"max"
|
||||
"sink"
|
||||
"node"
|
||||
"clust"
|
||||
"graph"
|
||||
"array_flags"
|
||||
"%2x"
|
||||
"%s"
|
||||
"%99$p"
|
||||
"%n"
|
76
dictionaries/heif.dict
Normal file
76
dictionaries/heif.dict
Normal file
@ -0,0 +1,76 @@
|
||||
# https://standards.iso.org/ittf/PubliclyAvailableStandards/c066067_ISO_IEC_23008-12_2017.zip
|
||||
|
||||
"altr"
|
||||
"auxC"
|
||||
"auxc"
|
||||
"auxi"
|
||||
"auxv"
|
||||
"avcC"
|
||||
"avci"
|
||||
"avcs"
|
||||
"ccst"
|
||||
"cdsc"
|
||||
"clap"
|
||||
"colr"
|
||||
"dimg"
|
||||
"dinf"
|
||||
"dref"
|
||||
"elst"
|
||||
"equi"
|
||||
"free"
|
||||
"frma"
|
||||
"ftyp"
|
||||
"grid"
|
||||
"grp1"
|
||||
"hdlr"
|
||||
"heic"
|
||||
"heim"
|
||||
"heis"
|
||||
"heix"
|
||||
"hevc"
|
||||
"hevx"
|
||||
"hvc1"
|
||||
"hvc2"
|
||||
"hvcC"
|
||||
"idat"
|
||||
"iden"
|
||||
"iinf"
|
||||
"iloc"
|
||||
"imir"
|
||||
"infe"
|
||||
"iovl"
|
||||
"ipro"
|
||||
"iprp"
|
||||
"iref"
|
||||
"irot"
|
||||
"ispe"
|
||||
"jpeg"
|
||||
"jpgC"
|
||||
"jpgs"
|
||||
"lhv1"
|
||||
"lhvC"
|
||||
"lsel"
|
||||
"mdat"
|
||||
"meta"
|
||||
"mif1"
|
||||
"mime"
|
||||
"mjpg"
|
||||
"msf1"
|
||||
"oinf"
|
||||
"pasp"
|
||||
"pict"
|
||||
"pitm"
|
||||
"pixi"
|
||||
"refs"
|
||||
"rloc"
|
||||
"schi"
|
||||
"schm"
|
||||
"sgpd"
|
||||
"sinf"
|
||||
"skip"
|
||||
"stsz"
|
||||
"subs"
|
||||
"thmb"
|
||||
"tkhd"
|
||||
"tols"
|
||||
"trak"
|
49
dictionaries/hoextdown.dict
Normal file
49
dictionaries/hoextdown.dict
Normal file
@ -0,0 +1,49 @@
|
||||
asterisk="*"
|
||||
attr_generic=" a=\"1\""
|
||||
attr_href=" href=\"1\""
|
||||
attr_xml_lang=" xml:lang=\"1\""
|
||||
attr_xmlns=" xmlns=\"1\""
|
||||
backslash="\\"
|
||||
backtick="`"
|
||||
colon=":"
|
||||
dashes="---"
|
||||
double_quote="\""
|
||||
entity_builtin="<"
|
||||
entity_decimal=""
|
||||
entity_external="&a;"
|
||||
entity_hex=""
|
||||
equals="==="
|
||||
exclamation="!"
|
||||
greater_than=">"
|
||||
hash="#"
|
||||
hyphen="-"
|
||||
indent=" "
|
||||
left_bracket="["
|
||||
left_paren="("
|
||||
less_than="<"
|
||||
plus="+"
|
||||
right_bracket="]"
|
||||
right_paren=")"
|
||||
single_quote="'"
|
||||
string_any="ANY"
|
||||
string_brackets="[]"
|
||||
string_cdata="CDATA"
|
||||
string_dashes="--"
|
||||
string_empty_dblquotes="\"\""
|
||||
string_empty_quotes="''"
|
||||
string_idrefs="IDREFS"
|
||||
string_parentheses="()"
|
||||
string_pcdata="#PCDATA"
|
||||
tag_cdata="<![CDATA["
|
||||
tag_close="</a>"
|
||||
tag_doctype="<!DOCTYPE"
|
||||
tag_element="<!ELEMENT"
|
||||
tag_entity="<!ENTITY"
|
||||
tag_notation="<!NOTATION"
|
||||
tag_open="<a>"
|
||||
tag_open_close="<a />"
|
||||
tag_open_exclamation="<!"
|
||||
tag_open_q="<?"
|
||||
tag_sq2_close="]]>"
|
||||
tag_xml_q="<?xml?>"
|
||||
underscore="_"
|
@ -5,7 +5,7 @@
|
||||
# A basic collection of HTML tags likely to matter to HTML parsers. Does *not*
|
||||
# include any attributes or attribute values.
|
||||
#
|
||||
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||
# Created by Michal Zalewski
|
||||
#
|
||||
|
||||
tag_a="<a>"
|
||||
|
119
dictionaries/http.dict
Normal file
119
dictionaries/http.dict
Normal file
@ -0,0 +1,119 @@
|
||||
# Sources: https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
|
||||
|
||||
# misc
|
||||
"HTTP/1.1"
|
||||
|
||||
# verbs
|
||||
"CONNECT"
|
||||
"DELETE"
|
||||
"GET"
|
||||
"HEAD"
|
||||
"OPTIONS"
|
||||
"PATCH"
|
||||
"POST"
|
||||
"PUT"
|
||||
"TRACE"
|
||||
|
||||
|
||||
# Fields
|
||||
"A-IM"
|
||||
"Accept"
|
||||
"Accept-Charset"
|
||||
"Accept-Datetime"
|
||||
"Accept-Encoding"
|
||||
"Accept-Language"
|
||||
"Accept-Patch"
|
||||
"Accept-Ranges"
|
||||
"Access-Control-Allow-Credentials"
|
||||
"Access-Control-Allow-Headers"
|
||||
"Access-Control-Allow-Methods"
|
||||
"Access-Control-Allow-Origin"
|
||||
"Access-Control-Expose-Headers"
|
||||
"Access-Control-Max-Age"
|
||||
"Access-Control-Request-Headers"
|
||||
"Access-Control-Request-Method"
|
||||
"Age"
|
||||
"Allow"
|
||||
"Alt-Svc"
|
||||
"Authorization"
|
||||
"Cache-Control"
|
||||
"Connection"
|
||||
"Connection:"
|
||||
"Content-Disposition"
|
||||
"Content-Encoding"
|
||||
"Content-Language"
|
||||
"Content-Length"
|
||||
"Content-Location"
|
||||
"Content-MD5"
|
||||
"Content-Range"
|
||||
"Content-Security-Policy"
|
||||
"Content-Type"
|
||||
"Cookie"
|
||||
"DNT"
|
||||
"Date"
|
||||
"Delta-Base"
|
||||
"ETag"
|
||||
"Expect"
|
||||
"Expires"
|
||||
"Forwarded"
|
||||
"From"
|
||||
"Front-End-Https"
|
||||
"HTTP2-Settings"
|
||||
"Host"
|
||||
"IM"
|
||||
"If-Match"
|
||||
"If-Modified-Since"
|
||||
"If-None-Match"
|
||||
"If-Range"
|
||||
"If-Unmodified-Since"
|
||||
"Last-Modified"
|
||||
"Link"
|
||||
"Location"
|
||||
"Max-Forwards"
|
||||
"Origin"
|
||||
"P3P"
|
||||
"Pragma"
|
||||
"Proxy-Authenticate"
|
||||
"Proxy-Authorization"
|
||||
"Proxy-Connection"
|
||||
"Public-Key-Pins"
|
||||
"Range"
|
||||
"Referer"
|
||||
"Refresh"
|
||||
"Retry-After"
|
||||
"Save-Data"
|
||||
"Server"
|
||||
"Set-Cookie"
|
||||
"Status"
|
||||
"Strict-Transport-Security"
|
||||
"TE"
|
||||
"Timing-Allow-Origin"
|
||||
"Tk"
|
||||
"Trailer"
|
||||
"Transfer-Encoding"
|
||||
"Upgrade"
|
||||
"Upgrade-Insecure-Requests"
|
||||
"User-Agent"
|
||||
"Vary"
|
||||
"Via"
|
||||
"WWW-Authenticate"
|
||||
"Warning"
|
||||
"X-ATT-DeviceId"
|
||||
"X-Content-Duration"
|
||||
"X-Content-Security-Policy"
|
||||
"X-Content-Type-Options"
|
||||
"X-Correlation-ID"
|
||||
"X-Csrf-Token"
|
||||
"X-Forwarded-For"
|
||||
"X-Forwarded-Host"
|
||||
"X-Forwarded-Proto"
|
||||
"X-Frame-Options"
|
||||
"X-Http-Method-Override"
|
||||
"X-Powered-By"
|
||||
"X-Request-ID"
|
||||
"X-Requested-With"
|
||||
"X-UA-Compatible"
|
||||
"X-UIDH"
|
||||
"X-Wap-Profile"
|
||||
"X-WebKit-CSP"
|
||||
"X-XSS-Protection"
|
591
dictionaries/icc.dict
Normal file
591
dictionaries/icc.dict
Normal file
@ -0,0 +1,591 @@
|
||||
# See http://www.color.org/specification/ICC.2-2019.pdf
|
||||
|
||||
magic="acsp"
|
||||
|
||||
# spectral encoding
|
||||
"rs"
|
||||
"ts"
|
||||
"es"
|
||||
"bs"
|
||||
"sm"
|
||||
"mc"
|
||||
|
||||
# Profile classes
|
||||
"scnr"
|
||||
"mntr"
|
||||
"prtr"
|
||||
"link"
|
||||
"spac"
|
||||
"abst"
|
||||
"nmcl"
|
||||
"cenc"
|
||||
"mod "
|
||||
"mlnk"
|
||||
"mvis"
|
||||
|
||||
# Data colour space field
|
||||
"XYZ "
|
||||
"Lab "
|
||||
"Luv "
|
||||
"YVbr"
|
||||
"Yxy "
|
||||
"LMS "
|
||||
"RGB "
|
||||
"GRAY"
|
||||
"HSV "
|
||||
"HLS "
|
||||
"CMYK"
|
||||
"CMY "
|
||||
"2CLR"
|
||||
"3CLR"
|
||||
"4CLR"
|
||||
"5CLR"
|
||||
"6CLR"
|
||||
"7CLR"
|
||||
"8CLR"
|
||||
"9CLR"
|
||||
"ACLR"
|
||||
"BCLR"
|
||||
"CCLR"
|
||||
"DCLR"
|
||||
"ECLR"
|
||||
"FCLR"
|
||||
"nc"
|
||||
"YCC"
|
||||
|
||||
# primary platforms
|
||||
"APPL"
|
||||
"MSFT"
|
||||
"SGI "
|
||||
"SUNW"
|
||||
|
||||
|
||||
# Tags
|
||||
"A2B0"
|
||||
"A2B1"
|
||||
"A2B2"
|
||||
"A2B3"
|
||||
"A2M0"
|
||||
"bcp0"
|
||||
"bcp1"
|
||||
"bcp2"
|
||||
"bcp3"
|
||||
"bsp0"
|
||||
"bsp1"
|
||||
"bsp2"
|
||||
"bsp3"
|
||||
"bAB0"
|
||||
"bAB1"
|
||||
"bAB2"
|
||||
"bAB3"
|
||||
"bBA0"
|
||||
"bBA1"
|
||||
"bBA2"
|
||||
"bBA3"
|
||||
"bBD0"
|
||||
"bBD1"
|
||||
"bBD2"
|
||||
"bBD3"
|
||||
"bDB0"
|
||||
"bDB1"
|
||||
"bDB2"
|
||||
"bDB3"
|
||||
"bMB0"
|
||||
"bMB1"
|
||||
"bMB2"
|
||||
"bMB3"
|
||||
"bMS0"
|
||||
"bMS1"
|
||||
"bMS2"
|
||||
"bMS3"
|
||||
"B2A0"
|
||||
"B2A1"
|
||||
"B2A2"
|
||||
"B2A3"
|
||||
"B2D0"
|
||||
"B2D1"
|
||||
"B2D2"
|
||||
"B2D3"
|
||||
"calt"
|
||||
"targ"
|
||||
"cept"
|
||||
"csnm"
|
||||
"clro"
|
||||
"cloo"
|
||||
"clin"
|
||||
"clio"
|
||||
"ciis"
|
||||
"cprt"
|
||||
"c2sp"
|
||||
"cxF "
|
||||
"dmnd"
|
||||
"dmdd"
|
||||
"dAB0"
|
||||
"dAB2"
|
||||
"dAB3"
|
||||
"dAB4"
|
||||
"dBA0"
|
||||
"dBA1"
|
||||
"dBA2"
|
||||
"dBA3"
|
||||
"dBD0"
|
||||
"dBD1"
|
||||
"dBD2"
|
||||
"dBD3"
|
||||
"dDB0"
|
||||
"dDB1"
|
||||
"dDB2"
|
||||
"dDB3"
|
||||
"d2B0"
|
||||
"d2B1"
|
||||
"d2B2"
|
||||
"d2B3"
|
||||
"gbd0"
|
||||
"gbd1"
|
||||
"gbd2"
|
||||
"gbd3"
|
||||
"mdv "
|
||||
"mcta"
|
||||
"minf"
|
||||
"miin"
|
||||
"wtpt"
|
||||
"meta"
|
||||
"M2A0"
|
||||
"M2B0"
|
||||
"M2B1"
|
||||
"M2B2"
|
||||
"M2B3"
|
||||
"M2S0"
|
||||
"M2S1"
|
||||
"M2S2"
|
||||
"M2S3"
|
||||
"nmcl"
|
||||
"rig0"
|
||||
"desc"
|
||||
"psin"
|
||||
"rfnm"
|
||||
"rig2"
|
||||
"svcn"
|
||||
"swpt"
|
||||
"s2cp"
|
||||
"smap"
|
||||
"tech"
|
||||
|
||||
# tag types
|
||||
"clro"
|
||||
"curv"
|
||||
"data"
|
||||
"dtim"
|
||||
"dict"
|
||||
"ehim"
|
||||
"enim"
|
||||
"fl16"
|
||||
"fl32"
|
||||
"fl64"
|
||||
"gbd "
|
||||
"mAB "
|
||||
"mBA "
|
||||
"meas"
|
||||
"mluc"
|
||||
"mpet"
|
||||
"para"
|
||||
"sf32"
|
||||
"sig "
|
||||
"smat"
|
||||
"tary"
|
||||
"tstr"
|
||||
"ui32"
|
||||
"ui64"
|
||||
"ui08"
|
||||
"ut16"
|
||||
"utf8"
|
||||
"zut8"
|
||||
"zxml"
|
||||
|
||||
# Function operands
|
||||
"calc"
|
||||
"func"
|
||||
"true"
|
||||
"ndef"
|
||||
"env "
|
||||
"in "
|
||||
"out "
|
||||
"tget"
|
||||
"tput"
|
||||
"tsav"
|
||||
"curv"
|
||||
"mtx "
|
||||
"clut"
|
||||
"tint"
|
||||
"elem"
|
||||
"copy"
|
||||
"rotl"
|
||||
"rotr"
|
||||
"posd"
|
||||
"flip"
|
||||
"pop "
|
||||
"solv"
|
||||
"tran"
|
||||
"sum "
|
||||
"prod"
|
||||
"min "
|
||||
"max "
|
||||
"and "
|
||||
"or "
|
||||
"pi "
|
||||
"+INF"
|
||||
"-INF"
|
||||
"NaN "
|
||||
"add "
|
||||
"sub "
|
||||
"mul "
|
||||
"dic "
|
||||
"mod "
|
||||
"pow "
|
||||
"gama"
|
||||
"sadd"
|
||||
"ssub"
|
||||
"sdiv"
|
||||
"smul"
|
||||
"sq "
|
||||
"sqrt"
|
||||
"cb "
|
||||
"cbrt"
|
||||
"abs "
|
||||
"neg "
|
||||
"rond"
|
||||
"flor"
|
||||
"ceil"
|
||||
"trnc"
|
||||
"sign"
|
||||
"exp "
|
||||
"log "
|
||||
"ln "
|
||||
"sin "
|
||||
"cos "
|
||||
"tan "
|
||||
"asin"
|
||||
"acos"
|
||||
"atan"
|
||||
"atn2"
|
||||
"ctop"
|
||||
"ptoc"
|
||||
"rnum"
|
||||
"lt "
|
||||
"le "
|
||||
"eq"
|
||||
"near"
|
||||
"ge "
|
||||
"gt "
|
||||
"vmin"
|
||||
"vmax"
|
||||
"vand"
|
||||
"vor "
|
||||
"tLab"
|
||||
"tXYZ"
|
||||
"if "
|
||||
"else"
|
||||
"sel "
|
||||
"case"
|
||||
"dflt"
|
||||
"cvst"
|
||||
"sngf"
|
||||
"curf"
|
||||
"parf"
|
||||
"smaf"
|
||||
"clut"
|
||||
"eclt"
|
||||
"emtx"
|
||||
"eobs"
|
||||
"xclt"
|
||||
"iemx"
|
||||
"JtoX"
|
||||
"matf"
|
||||
"smet"
|
||||
"rclt"
|
||||
"robs"
|
||||
"tint"
|
||||
"XtoJ"
|
||||
"bACS"
|
||||
"eACS"
|
||||
"brdf"
|
||||
"type"
|
||||
"func"
|
||||
"nump"
|
||||
"xfrm"
|
||||
"BPh0"
|
||||
"BPh1"
|
||||
"CT10"
|
||||
"CT20"
|
||||
"CT30"
|
||||
"CT11"
|
||||
"CT21"
|
||||
"CT31"
|
||||
"War0"
|
||||
"War1"
|
||||
"La10"
|
||||
"La20"
|
||||
"La30"
|
||||
"La11"
|
||||
"La21"
|
||||
"La31"
|
||||
"name"
|
||||
"lcnm"
|
||||
"pcs "
|
||||
"spec"
|
||||
"spcb"
|
||||
"spcg"
|
||||
"ncol"
|
||||
"pinf"
|
||||
|
||||
# from oss-fuzz, some duplicates
|
||||
# Fuzzing dictionary for icc
|
||||
# Extracted from lcms2.h of Little-CMS project 2.8.
|
||||
|
||||
magic="acsp"
|
||||
sig="lcms"
|
||||
|
||||
# Base ICC type definitions
|
||||
"chrm"
|
||||
"clro"
|
||||
"clrt"
|
||||
"crdi"
|
||||
"curv"
|
||||
"data"
|
||||
"dict"
|
||||
"dtim"
|
||||
"devs"
|
||||
"mft2"
|
||||
"mft1"
|
||||
"mAB "
|
||||
"mBA "
|
||||
"meas"
|
||||
"mluc"
|
||||
"mpet"
|
||||
"ncol"
|
||||
"ncl2"
|
||||
"para"
|
||||
"pseq"
|
||||
"psid"
|
||||
"rcs2"
|
||||
"sf32"
|
||||
"scrn"
|
||||
"sig "
|
||||
"text"
|
||||
"desc"
|
||||
"uf32"
|
||||
"bfd "
|
||||
"ui16"
|
||||
"ui32"
|
||||
"ui64"
|
||||
"ui08"
|
||||
"vcgt"
|
||||
"view"
|
||||
"XYZ "
|
||||
|
||||
# Base ICC tag definitions
|
||||
"A2B0"
|
||||
"A2B1"
|
||||
"A2B2"
|
||||
"bXYZ"
|
||||
"bXYZ"
|
||||
"bTRC"
|
||||
"B2A0"
|
||||
"B2A1"
|
||||
"B2A2"
|
||||
"calt"
|
||||
"targ"
|
||||
"chad"
|
||||
"chrm"
|
||||
"clro"
|
||||
"clrt"
|
||||
"clot"
|
||||
"ciis"
|
||||
"cprt"
|
||||
"crdi"
|
||||
"data"
|
||||
"dtim"
|
||||
"dmnd"
|
||||
"dmdd"
|
||||
"devs"
|
||||
"D2B0"
|
||||
"D2B1"
|
||||
"D2B2"
|
||||
"D2B3"
|
||||
"B2D0"
|
||||
"B2D1"
|
||||
"B2D2"
|
||||
"B2D3"
|
||||
"gamt"
|
||||
"kTRC"
|
||||
"gXYZ"
|
||||
"gXYZ"
|
||||
"gTRC"
|
||||
"lumi"
|
||||
"meas"
|
||||
"bkpt"
|
||||
"wtpt"
|
||||
"ncol"
|
||||
"ncl2"
|
||||
"resp"
|
||||
"rig0"
|
||||
"pre0"
|
||||
"pre1"
|
||||
"pre2"
|
||||
"desc"
|
||||
"dscm"
|
||||
"pseq"
|
||||
"psid"
|
||||
"psd0"
|
||||
"psd1"
|
||||
"psd2"
|
||||
"psd3"
|
||||
"ps2s"
|
||||
"ps2i"
|
||||
"rXYZ"
|
||||
"rXYZ"
|
||||
"rTRC"
|
||||
"rig2"
|
||||
"scrd"
|
||||
"scrn"
|
||||
"tech"
|
||||
"bfd "
|
||||
"vued"
|
||||
"view"
|
||||
"vcgt"
|
||||
"meta"
|
||||
"arts"
|
||||
|
||||
# ICC Technology tag
|
||||
"dcam"
|
||||
"fscn"
|
||||
"rscn"
|
||||
"ijet"
|
||||
"twax"
|
||||
"epho"
|
||||
"esta"
|
||||
"dsub"
|
||||
"rpho"
|
||||
"fprn"
|
||||
"vidm"
|
||||
"vidc"
|
||||
"pjtv"
|
||||
"CRT "
|
||||
"PMD "
|
||||
"AMD "
|
||||
"KPCD"
|
||||
"imgs"
|
||||
"grav"
|
||||
"offs"
|
||||
"silk"
|
||||
"flex"
|
||||
"mpfs"
|
||||
"mpfr"
|
||||
"dmpc"
|
||||
"dcpj"
|
||||
|
||||
# ICC Color spaces
|
||||
"XYZ "
|
||||
"Lab "
|
||||
"Luv "
|
||||
"YCbr"
|
||||
"Yxy "
|
||||
"RGB "
|
||||
"GRAY"
|
||||
"HSV "
|
||||
"HLS "
|
||||
"CMYK"
|
||||
"CMY "
|
||||
"MCH1"
|
||||
"MCH2"
|
||||
"MCH3"
|
||||
"MCH4"
|
||||
"MCH5"
|
||||
"MCH6"
|
||||
"MCH7"
|
||||
"MCH8"
|
||||
"MCH9"
|
||||
"MCHA"
|
||||
"MCHB"
|
||||
"MCHC"
|
||||
"MCHD"
|
||||
"MCHE"
|
||||
"MCHF"
|
||||
"nmcl"
|
||||
"1CLR"
|
||||
"2CLR"
|
||||
"3CLR"
|
||||
"4CLR"
|
||||
"5CLR"
|
||||
"6CLR"
|
||||
"7CLR"
|
||||
"8CLR"
|
||||
"9CLR"
|
||||
"ACLR"
|
||||
"BCLR"
|
||||
"CCLR"
|
||||
"DCLR"
|
||||
"ECLR"
|
||||
"FCLR"
|
||||
"LuvK"
|
||||
|
||||
# ICC Profile Class
|
||||
"scnr"
|
||||
"mntr"
|
||||
"prtr"
|
||||
"link"
|
||||
"abst"
|
||||
"spac"
|
||||
"nmcl"
|
||||
|
||||
# ICC Platforms
|
||||
"APPL"
|
||||
"MSFT"
|
||||
"SUNW"
|
||||
"SGI "
|
||||
"TGNT"
|
||||
"*nix"
|
||||
|
||||
# Reference gamut
|
||||
"prmg"
|
||||
|
||||
# For cmsSigColorimetricIntentImageStateTag
|
||||
"scoe"
|
||||
"sape"
|
||||
"fpce"
|
||||
"rhoc"
|
||||
"rpoc"
|
||||
|
||||
# Multi process elements types
|
||||
"cvst"
|
||||
"matf"
|
||||
"clut"
|
||||
"bACS"
|
||||
"eACS"
|
||||
"l2x "
|
||||
"x2l "
|
||||
"ncl "
|
||||
"2 4 "
|
||||
"4 2 "
|
||||
"idn "
|
||||
"d2l "
|
||||
"l2d "
|
||||
"d2x "
|
||||
"x2d "
|
||||
"clp "
|
||||
|
||||
# Types of CurveElements
|
||||
"parf"
|
||||
"samf"
|
||||
"curf"
|
||||
|
||||
# Used in ResponseCurveType
|
||||
"StaA"
|
||||
"StaE"
|
||||
"StaI"
|
||||
"StaT"
|
||||
"StaM"
|
||||
"DN "
|
||||
"DN P"
|
||||
"DNN "
|
||||
"DNNP"
|
25
dictionaries/iccprofile.dict
Normal file
25
dictionaries/iccprofile.dict
Normal file
@ -0,0 +1,25 @@
|
||||
# Dict for ICC profiles parsed by skcms.
|
||||
|
||||
"mft1"
|
||||
"mft2"
|
||||
"mAB "
|
||||
"rXYZ"
|
||||
"gXYZ"
|
||||
"bXYZ"
|
||||
"rTRC"
|
||||
"gTRC"
|
||||
"bTRC"
|
||||
"kTRC"
|
||||
"A2B0"
|
||||
"curv"
|
||||
"para"
|
||||
"mluc"
|
||||
"XYZ "
|
||||
"Lab "
|
||||
"RGB "
|
||||
"CMYK"
|
||||
"GRAY"
|
||||
"mntr"
|
||||
"scnr"
|
||||
"prtr"
|
||||
"spac"
|
43
dictionaries/icns.dict
Normal file
43
dictionaries/icns.dict
Normal file
@ -0,0 +1,43 @@
|
||||
# https://en.wikipedia.org/wiki/Apple_Icon_Image_format
|
||||
|
||||
"ICN#"
|
||||
"ICON"
|
||||
"TOC "
|
||||
"h8mk"
|
||||
"ic04"
|
||||
"ic05"
|
||||
"ic07"
|
||||
"ic08"
|
||||
"ic09"
|
||||
"ic10"
|
||||
"ic11"
|
||||
"ic12"
|
||||
"ic13"
|
||||
"ic14"
|
||||
"ich#"
|
||||
"ich4"
|
||||
"ich8"
|
||||
"icl4"
|
||||
"icl8"
|
||||
"icm#"
|
||||
"icm4"
|
||||
"icm8"
|
||||
"icnV"
|
||||
"icns"
|
||||
"icp4"
|
||||
"icp5"
|
||||
"icp6"
|
||||
"ics#"
|
||||
"ics4"
|
||||
"ics8"
|
||||
"icsB"
|
||||
"icsb"
|
||||
"ih32"
|
||||
"il32"
|
||||
"info"
|
||||
"is32"
|
||||
"it32"
|
||||
"l8mk"
|
||||
"name"
|
||||
"s8mk"
|
||||
"t8mk"
|
688
dictionaries/initfile.dict
Normal file
688
dictionaries/initfile.dict
Normal file
@ -0,0 +1,688 @@
|
||||
#SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS;
|
||||
ACCESSIBLE="ACCESSIBLE"
|
||||
ACCOUNT="ACCOUNT"
|
||||
ACTION="ACTION"
|
||||
ACTIVE="ACTIVE"
|
||||
ADD="ADD"
|
||||
ADMIN="ADMIN"
|
||||
AFTER="AFTER"
|
||||
AGAINST="AGAINST"
|
||||
AGGREGATE="AGGREGATE"
|
||||
ALGORITHM="ALGORITHM"
|
||||
ALL="ALL"
|
||||
ALTER="ALTER"
|
||||
ALWAYS="ALWAYS"
|
||||
ANALYZE="ANALYZE"
|
||||
AND="AND"
|
||||
ANY="ANY"
|
||||
AS="AS"
|
||||
ASC="ASC"
|
||||
ASCII="ASCII"
|
||||
ASENSITIVE="ASENSITIVE"
|
||||
AT="AT"
|
||||
AUTOEXTEND_SIZE="AUTOEXTEND_SIZE"
|
||||
AUTO_INCREMENT="AUTO_INCREMENT"
|
||||
AVG="AVG"
|
||||
AVG_ROW_LENGTH="AVG_ROW_LENGTH"
|
||||
BACKUP="BACKUP"
|
||||
BEFORE="BEFORE"
|
||||
BEGIN="BEGIN"
|
||||
BETWEEN="BETWEEN"
|
||||
BIGINT="BIGINT"
|
||||
BINARY="BINARY"
|
||||
BINLOG="BINLOG"
|
||||
BIT="BIT"
|
||||
BLOB="BLOB"
|
||||
BLOCK="BLOCK"
|
||||
BOOL="BOOL"
|
||||
BOOLEAN="BOOLEAN"
|
||||
BOTH="BOTH"
|
||||
BTREE="BTREE"
|
||||
BUCKETS="BUCKETS"
|
||||
BY="BY"
|
||||
BYTE="BYTE"
|
||||
CACHE="CACHE"
|
||||
CALL="CALL"
|
||||
CASCADE="CASCADE"
|
||||
CASCADED="CASCADED"
|
||||
CASE="CASE"
|
||||
CATALOG_NAME="CATALOG_NAME"
|
||||
CHAIN="CHAIN"
|
||||
CHANGE="CHANGE"
|
||||
CHANGED="CHANGED"
|
||||
CHANNEL="CHANNEL"
|
||||
CHAR="CHAR"
|
||||
CHARACTER="CHARACTER"
|
||||
CHARSET="CHARSET"
|
||||
CHECK="CHECK"
|
||||
CHECKSUM="CHECKSUM"
|
||||
CIPHER="CIPHER"
|
||||
CLASS_ORIGIN="CLASS_ORIGIN"
|
||||
CLIENT="CLIENT"
|
||||
CLONE="CLONE"
|
||||
CLOSE="CLOSE"
|
||||
COALESCE="COALESCE"
|
||||
CODE="CODE"
|
||||
COLLATE="COLLATE"
|
||||
COLLATION="COLLATION"
|
||||
COLUMN="COLUMN"
|
||||
COLUMNS="COLUMNS"
|
||||
COLUMN_FORMAT="COLUMN_FORMAT"
|
||||
COLUMN_NAME="COLUMN_NAME"
|
||||
COMMENT="COMMENT"
|
||||
COMMIT="COMMIT"
|
||||
COMMITTED="COMMITTED"
|
||||
COMPACT="COMPACT"
|
||||
COMPLETION="COMPLETION"
|
||||
COMPONENT="COMPONENT"
|
||||
COMPRESSED="COMPRESSED"
|
||||
COMPRESSION="COMPRESSION"
|
||||
CONCURRENT="CONCURRENT"
|
||||
CONDITION="CONDITION"
|
||||
CONNECTION="CONNECTION"
|
||||
CONSISTENT="CONSISTENT"
|
||||
CONSTRAINT="CONSTRAINT"
|
||||
CONSTRAINT_CATALOG="CONSTRAINT_CATALOG"
|
||||
CONSTRAINT_NAME="CONSTRAINT_NAME"
|
||||
CONSTRAINT_SCHEMA="CONSTRAINT_SCHEMA"
|
||||
CONTAINS="CONTAINS"
|
||||
CONTEXT="CONTEXT"
|
||||
CONTINUE="CONTINUE"
|
||||
CONVERT="CONVERT"
|
||||
CPU="CPU"
|
||||
CREATE="CREATE"
|
||||
CROSS="CROSS"
|
||||
CUBE="CUBE"
|
||||
CUME_DIST="CUME_DIST"
|
||||
CURRENT="CURRENT"
|
||||
CURRENT_DATE="CURRENT_DATE"
|
||||
CURRENT_TIME="CURRENT_TIME"
|
||||
CURRENT_TIMESTAMP="CURRENT_TIMESTAMP"
|
||||
CURRENT_USER="CURRENT_USER"
|
||||
CURSOR="CURSOR"
|
||||
CURSOR_NAME="CURSOR_NAME"
|
||||
DATA="DATA"
|
||||
DATABASE="DATABASE"
|
||||
DATABASES="DATABASES"
|
||||
DATAFILE="DATAFILE"
|
||||
DATE="DATE"
|
||||
DATETIME="DATETIME"
|
||||
DAY="DAY"
|
||||
DAY_HOUR="DAY_HOUR"
|
||||
DAY_MICROSECOND="DAY_MICROSECOND"
|
||||
DAY_MINUTE="DAY_MINUTE"
|
||||
DAY_SECOND="DAY_SECOND"
|
||||
DEALLOCATE="DEALLOCATE"
|
||||
DEC="DEC"
|
||||
DECIMAL="DECIMAL"
|
||||
DECLARE="DECLARE"
|
||||
DEFAULT="DEFAULT"
|
||||
DEFAULT_AUTH="DEFAULT_AUTH"
|
||||
DEFINER="DEFINER"
|
||||
DEFINITION="DEFINITION"
|
||||
DELAYED="DELAYED"
|
||||
DELAY_KEY_WRITE="DELAY_KEY_WRITE"
|
||||
DELETE="DELETE"
|
||||
DENSE_RANK="DENSE_RANK"
|
||||
DESC="DESC"
|
||||
DESCRIBE="DESCRIBE"
|
||||
DESCRIPTION="DESCRIPTION"
|
||||
DETERMINISTIC="DETERMINISTIC"
|
||||
DIAGNOSTICS="DIAGNOSTICS"
|
||||
DIRECTORY="DIRECTORY"
|
||||
DISABLE="DISABLE"
|
||||
DISCARD="DISCARD"
|
||||
DISK="DISK"
|
||||
DISTINCT="DISTINCT"
|
||||
DISTINCTROW="DISTINCTROW"
|
||||
DIV="DIV"
|
||||
DO="DO"
|
||||
DOUBLE="DOUBLE"
|
||||
DROP="DROP"
|
||||
DUAL="DUAL"
|
||||
DUMPFILE="DUMPFILE"
|
||||
DUPLICATE="DUPLICATE"
|
||||
DYNAMIC="DYNAMIC"
|
||||
EACH="EACH"
|
||||
ELSE="ELSE"
|
||||
ELSEIF="ELSEIF"
|
||||
EMPTY="EMPTY"
|
||||
ENABLE="ENABLE"
|
||||
ENCLOSED="ENCLOSED"
|
||||
ENCRYPTION="ENCRYPTION"
|
||||
END="END"
|
||||
ENDS="ENDS"
|
||||
ENFORCED="ENFORCED"
|
||||
ENGINE="ENGINE"
|
||||
ENGINES="ENGINES"
|
||||
ENUM="ENUM"
|
||||
ERROR="ERROR"
|
||||
ERRORS="ERRORS"
|
||||
ESCAPE="ESCAPE"
|
||||
ESCAPED="ESCAPED"
|
||||
EVENT="EVENT"
|
||||
EVENTS="EVENTS"
|
||||
EVERY="EVERY"
|
||||
EXCEPT="EXCEPT"
|
||||
EXCHANGE="EXCHANGE"
|
||||
EXCLUDE="EXCLUDE"
|
||||
EXECUTE="EXECUTE"
|
||||
EXISTS="EXISTS"
|
||||
EXIT="EXIT"
|
||||
EXPANSION="EXPANSION"
|
||||
EXPIRE="EXPIRE"
|
||||
EXPLAIN="EXPLAIN"
|
||||
EXPORT="EXPORT"
|
||||
EXTENDED="EXTENDED"
|
||||
EXTENT_SIZE="EXTENT_SIZE"
|
||||
FALSE="FALSE"
|
||||
FAST="FAST"
|
||||
FAULTS="FAULTS"
|
||||
FETCH="FETCH"
|
||||
FIELDS="FIELDS"
|
||||
FILE="FILE"
|
||||
FILE_BLOCK_SIZE="FILE_BLOCK_SIZE"
|
||||
FILTER="FILTER"
|
||||
FIRST="FIRST"
|
||||
FIRST_VALUE="FIRST_VALUE"
|
||||
FIXED="FIXED"
|
||||
FLOAT="FLOAT"
|
||||
FLOAT4="FLOAT4"
|
||||
FLOAT8="FLOAT8"
|
||||
FLUSH="FLUSH"
|
||||
FOLLOWING="FOLLOWING"
|
||||
FOLLOWS="FOLLOWS"
|
||||
FOR="FOR"
|
||||
FORCE="FORCE"
|
||||
FOREIGN="FOREIGN"
|
||||
FORMAT="FORMAT"
|
||||
FOUND="FOUND"
|
||||
FROM="FROM"
|
||||
FULL="FULL"
|
||||
FULLTEXT="FULLTEXT"
|
||||
FUNCTION="FUNCTION"
|
||||
GENERAL="GENERAL"
|
||||
GENERATED="GENERATED"
|
||||
GEOMCOLLECTION="GEOMCOLLECTION"
|
||||
GEOMETRY="GEOMETRY"
|
||||
GEOMETRYCOLLECTION="GEOMETRYCOLLECTION"
|
||||
GET="GET"
|
||||
GET_FORMAT="GET_FORMAT"
|
||||
GET_MASTER_PUBLIC_KEY="GET_MASTER_PUBLIC_KEY"
|
||||
GLOBAL="GLOBAL"
|
||||
GRANT="GRANT"
|
||||
GRANTS="GRANTS"
|
||||
GROUP="GROUP"
|
||||
GROUPING="GROUPING"
|
||||
GROUPS="GROUPS"
|
||||
GROUP_REPLICATION="GROUP_REPLICATION"
|
||||
HANDLER="HANDLER"
|
||||
HASH="HASH"
|
||||
HAVING="HAVING"
|
||||
HELP="HELP"
|
||||
HIGH_PRIORITY="HIGH_PRIORITY"
|
||||
HISTOGRAM="HISTOGRAM"
|
||||
HISTORY="HISTORY"
|
||||
HOST="HOST"
|
||||
HOSTS="HOSTS"
|
||||
HOUR="HOUR"
|
||||
HOUR_MICROSECOND="HOUR_MICROSECOND"
|
||||
HOUR_MINUTE="HOUR_MINUTE"
|
||||
HOUR_SECOND="HOUR_SECOND"
|
||||
IDENTIFIED="IDENTIFIED"
|
||||
IF="IF"
|
||||
IGNORE="IGNORE"
|
||||
IGNORE_SERVER_IDS="IGNORE_SERVER_IDS"
|
||||
IMPORT="IMPORT"
|
||||
IN="IN"
|
||||
INACTIVE="INACTIVE"
|
||||
INDEX="INDEX"
|
||||
INDEXES="INDEXES"
|
||||
INFILE="INFILE"
|
||||
INITIAL_SIZE="INITIAL_SIZE"
|
||||
INNER="INNER"
|
||||
INOUT="INOUT"
|
||||
INSENSITIVE="INSENSITIVE"
|
||||
INSERT="INSERT"
|
||||
INSERT_METHOD="INSERT_METHOD"
|
||||
INSTALL="INSTALL"
|
||||
INSTANCE="INSTANCE"
|
||||
INT="INT"
|
||||
INT1="INT1"
|
||||
INT2="INT2"
|
||||
INT3="INT3"
|
||||
INT4="INT4"
|
||||
INT8="INT8"
|
||||
INTEGER="INTEGER"
|
||||
INTERVAL="INTERVAL"
|
||||
INTO="INTO"
|
||||
INVISIBLE="INVISIBLE"
|
||||
INVOKER="INVOKER"
|
||||
IO="IO"
|
||||
IO_AFTER_GTIDS="IO_AFTER_GTIDS"
|
||||
IO_BEFORE_GTIDS="IO_BEFORE_GTIDS"
|
||||
IO_THREAD="IO_THREAD"
|
||||
IPC="IPC"
|
||||
IS="IS"
|
||||
ISOLATION="ISOLATION"
|
||||
ISSUER="ISSUER"
|
||||
ITERATE="ITERATE"
|
||||
JOIN="JOIN"
|
||||
JSON="JSON"
|
||||
JSON_TABLE="JSON_TABLE"
|
||||
KEY="KEY"
|
||||
KEYS="KEYS"
|
||||
KEY_BLOCK_SIZE="KEY_BLOCK_SIZE"
|
||||
KILL="KILL"
|
||||
LAG="LAG"
|
||||
LANGUAGE="LANGUAGE"
|
||||
LAST="LAST"
|
||||
LAST_VALUE="LAST_VALUE"
|
||||
LATERAL="LATERAL"
|
||||
LEAD="LEAD"
|
||||
LEADING="LEADING"
|
||||
LEAVE="LEAVE"
|
||||
LEAVES="LEAVES"
|
||||
LEFT="LEFT"
|
||||
LESS="LESS"
|
||||
LEVEL="LEVEL"
|
||||
LIKE="LIKE"
|
||||
LIMIT="LIMIT"
|
||||
LINEAR="LINEAR"
|
||||
LINES="LINES"
|
||||
LINESTRING="LINESTRING"
|
||||
LIST="LIST"
|
||||
LOAD="LOAD"
|
||||
LOCAL="LOCAL"
|
||||
LOCALTIME="LOCALTIME"
|
||||
LOCALTIMESTAMP="LOCALTIMESTAMP"
|
||||
LOCK="LOCK"
|
||||
LOCKED="LOCKED"
|
||||
LOCKS="LOCKS"
|
||||
LOGFILE="LOGFILE"
|
||||
LOGS="LOGS"
|
||||
LONG="LONG"
|
||||
LONGBLOB="LONGBLOB"
|
||||
LONGTEXT="LONGTEXT"
|
||||
LOOP="LOOP"
|
||||
LOW_PRIORITY="LOW_PRIORITY"
|
||||
MASTER="MASTER"
|
||||
MASTER_AUTO_POSITION="MASTER_AUTO_POSITION"
|
||||
MASTER_BIND="MASTER_BIND"
|
||||
MASTER_CONNECT_RETRY="MASTER_CONNECT_RETRY"
|
||||
MASTER_DELAY="MASTER_DELAY"
|
||||
MASTER_HEARTBEAT_PERIOD="MASTER_HEARTBEAT_PERIOD"
|
||||
MASTER_HOST="MASTER_HOST"
|
||||
MASTER_LOG_FILE="MASTER_LOG_FILE"
|
||||
MASTER_LOG_POS="MASTER_LOG_POS"
|
||||
MASTER_PASSWORD="MASTER_PASSWORD"
|
||||
MASTER_PORT="MASTER_PORT"
|
||||
MASTER_PUBLIC_KEY_PATH="MASTER_PUBLIC_KEY_PATH"
|
||||
MASTER_RETRY_COUNT="MASTER_RETRY_COUNT"
|
||||
MASTER_SERVER_ID="MASTER_SERVER_ID"
|
||||
MASTER_SSL="MASTER_SSL"
|
||||
MASTER_SSL_CA="MASTER_SSL_CA"
|
||||
MASTER_SSL_CAPATH="MASTER_SSL_CAPATH"
|
||||
MASTER_SSL_CERT="MASTER_SSL_CERT"
|
||||
MASTER_SSL_CIPHER="MASTER_SSL_CIPHER"
|
||||
MASTER_SSL_CRL="MASTER_SSL_CRL"
|
||||
MASTER_SSL_CRLPATH="MASTER_SSL_CRLPATH"
|
||||
MASTER_SSL_KEY="MASTER_SSL_KEY"
|
||||
MASTER_SSL_VERIFY_SERVER_CERT="MASTER_SSL_VERIFY_SERVER_CERT"
|
||||
MASTER_TLS_VERSION="MASTER_TLS_VERSION"
|
||||
MASTER_USER="MASTER_USER"
|
||||
MATCH="MATCH"
|
||||
MAXVALUE="MAXVALUE"
|
||||
MAX_CONNECTIONS_PER_HOUR="MAX_CONNECTIONS_PER_HOUR"
|
||||
MAX_QUERIES_PER_HOUR="MAX_QUERIES_PER_HOUR"
|
||||
MAX_ROWS="MAX_ROWS"
|
||||
MAX_SIZE="MAX_SIZE"
|
||||
MAX_UPDATES_PER_HOUR="MAX_UPDATES_PER_HOUR"
|
||||
MAX_USER_CONNECTIONS="MAX_USER_CONNECTIONS"
|
||||
MEDIUM="MEDIUM"
|
||||
MEDIUMBLOB="MEDIUMBLOB"
|
||||
MEDIUMINT="MEDIUMINT"
|
||||
MEDIUMTEXT="MEDIUMTEXT"
|
||||
MEMORY="MEMORY"
|
||||
MERGE="MERGE"
|
||||
MESSAGE_TEXT="MESSAGE_TEXT"
|
||||
MICROSECOND="MICROSECOND"
|
||||
MIDDLEINT="MIDDLEINT"
|
||||
MIGRATE="MIGRATE"
|
||||
MINUTE="MINUTE"
|
||||
MINUTE_MICROSECOND="MINUTE_MICROSECOND"
|
||||
MINUTE_SECOND="MINUTE_SECOND"
|
||||
MIN_ROWS="MIN_ROWS"
|
||||
MOD="MOD"
|
||||
MODE="MODE"
|
||||
MODIFIES="MODIFIES"
|
||||
MODIFY="MODIFY"
|
||||
MONTH="MONTH"
|
||||
MULTILINESTRING="MULTILINESTRING"
|
||||
MULTIPOINT="MULTIPOINT"
|
||||
MULTIPOLYGON="MULTIPOLYGON"
|
||||
MUTEX="MUTEX"
|
||||
MYSQL_ERRNO="MYSQL_ERRNO"
|
||||
NAME="NAME"
|
||||
NAMES="NAMES"
|
||||
NATIONAL="NATIONAL"
|
||||
NATURAL="NATURAL"
|
||||
NCHAR="NCHAR"
|
||||
NDB="NDB"
|
||||
NDBCLUSTER="NDBCLUSTER"
|
||||
NESTED="NESTED"
|
||||
NETWORK_NAMESPACE="NETWORK_NAMESPACE"
|
||||
NEVER="NEVER"
|
||||
NEW="NEW"
|
||||
NEXT="NEXT"
|
||||
NO="NO"
|
||||
NODEGROUP="NODEGROUP"
|
||||
NONE="NONE"
|
||||
NOT="NOT"
|
||||
NOWAIT="NOWAIT"
|
||||
NO_WAIT="NO_WAIT"
|
||||
NO_WRITE_TO_BINLOG="NO_WRITE_TO_BINLOG"
|
||||
NTH_VALUE="NTH_VALUE"
|
||||
NTILE="NTILE"
|
||||
NULL="NULL"
|
||||
NULLS="NULLS"
|
||||
NUMBER="NUMBER"
|
||||
NUMERIC="NUMERIC"
|
||||
NVARCHAR="NVARCHAR"
|
||||
OF="OF"
|
||||
OFFSET="OFFSET"
|
||||
OJ="OJ"
|
||||
OLD="OLD"
|
||||
ON="ON"
|
||||
ONE="ONE"
|
||||
ONLY="ONLY"
|
||||
OPEN="OPEN"
|
||||
OPTIMIZE="OPTIMIZE"
|
||||
OPTIMIZER_COSTS="OPTIMIZER_COSTS"
|
||||
OPTION="OPTION"
|
||||
OPTIONAL="OPTIONAL"
|
||||
OPTIONALLY="OPTIONALLY"
|
||||
OPTIONS="OPTIONS"
|
||||
OR="OR"
|
||||
ORDER="ORDER"
|
||||
ORDINALITY="ORDINALITY"
|
||||
ORGANIZATION="ORGANIZATION"
|
||||
OTHERS="OTHERS"
|
||||
OUT="OUT"
|
||||
OUTER="OUTER"
|
||||
OUTFILE="OUTFILE"
|
||||
OVER="OVER"
|
||||
OWNER="OWNER"
|
||||
PACK_KEYS="PACK_KEYS"
|
||||
PAGE="PAGE"
|
||||
PARSER="PARSER"
|
||||
PARTIAL="PARTIAL"
|
||||
PARTITION="PARTITION"
|
||||
PARTITIONING="PARTITIONING"
|
||||
PARTITIONS="PARTITIONS"
|
||||
PASSWORD="PASSWORD"
|
||||
PATH="PATH"
|
||||
PERCENT_RANK="PERCENT_RANK"
|
||||
PERSIST="PERSIST"
|
||||
PERSIST_ONLY="PERSIST_ONLY"
|
||||
PHASE="PHASE"
|
||||
PLUGIN="PLUGIN"
|
||||
PLUGINS="PLUGINS"
|
||||
PLUGIN_DIR="PLUGIN_DIR"
|
||||
POINT="POINT"
|
||||
POLYGON="POLYGON"
|
||||
PORT="PORT"
|
||||
PRECEDES="PRECEDES"
|
||||
PRECEDING="PRECEDING"
|
||||
PRECISION="PRECISION"
|
||||
PREPARE="PREPARE"
|
||||
PRESERVE="PRESERVE"
|
||||
PREV="PREV"
|
||||
PRIMARY="PRIMARY"
|
||||
PRIVILEGES="PRIVILEGES"
|
||||
PROCEDURE="PROCEDURE"
|
||||
PROCESS="PROCESS"
|
||||
PROCESSLIST="PROCESSLIST"
|
||||
PROFILE="PROFILE"
|
||||
PROFILES="PROFILES"
|
||||
PROXY="PROXY"
|
||||
PURGE="PURGE"
|
||||
QUARTER="QUARTER"
|
||||
QUERY="QUERY"
|
||||
QUICK="QUICK"
|
||||
RANGE="RANGE"
|
||||
RANK="RANK"
|
||||
READ="READ"
|
||||
READS="READS"
|
||||
READ_ONLY="READ_ONLY"
|
||||
READ_WRITE="READ_WRITE"
|
||||
REAL="REAL"
|
||||
REBUILD="REBUILD"
|
||||
RECOVER="RECOVER"
|
||||
RECURSIVE="RECURSIVE"
|
||||
REDO_BUFFER_SIZE="REDO_BUFFER_SIZE"
|
||||
REDUNDANT="REDUNDANT"
|
||||
REFERENCE="REFERENCE"
|
||||
REFERENCES="REFERENCES"
|
||||
REGEXP="REGEXP"
|
||||
RELAY="RELAY"
|
||||
RELAYLOG="RELAYLOG"
|
||||
RELAY_LOG_FILE="RELAY_LOG_FILE"
|
||||
RELAY_LOG_POS="RELAY_LOG_POS"
|
||||
RELAY_THREAD="RELAY_THREAD"
|
||||
RELEASE="RELEASE"
|
||||
RELOAD="RELOAD"
|
||||
REMOVE="REMOVE"
|
||||
RENAME="RENAME"
|
||||
REORGANIZE="REORGANIZE"
|
||||
REPAIR="REPAIR"
|
||||
REPEAT="REPEAT"
|
||||
REPEATABLE="REPEATABLE"
|
||||
REPLACE="REPLACE"
|
||||
REPLICATE_DO_DB="REPLICATE_DO_DB"
|
||||
REPLICATE_DO_TABLE="REPLICATE_DO_TABLE"
|
||||
REPLICATE_IGNORE_DB="REPLICATE_IGNORE_DB"
|
||||
REPLICATE_IGNORE_TABLE="REPLICATE_IGNORE_TABLE"
|
||||
REPLICATE_REWRITE_DB="REPLICATE_REWRITE_DB"
|
||||
REPLICATE_WILD_DO_TABLE="REPLICATE_WILD_DO_TABLE"
|
||||
REPLICATE_WILD_IGNORE_TABLE="REPLICATE_WILD_IGNORE_TABLE"
|
||||
REPLICATION="REPLICATION"
|
||||
REQUIRE="REQUIRE"
|
||||
RESET="RESET"
|
||||
RESIGNAL="RESIGNAL"
|
||||
RESOURCE="RESOURCE"
|
||||
RESPECT="RESPECT"
|
||||
RESTART="RESTART"
|
||||
RESTORE="RESTORE"
|
||||
RESTRICT="RESTRICT"
|
||||
RESUME="RESUME"
|
||||
RETAIN="RETAIN"
|
||||
RETURN="RETURN"
|
||||
RETURNED_SQLSTATE="RETURNED_SQLSTATE"
|
||||
RETURNS="RETURNS"
|
||||
REUSE="REUSE"
|
||||
REVERSE="REVERSE"
|
||||
REVOKE="REVOKE"
|
||||
RIGHT="RIGHT"
|
||||
RLIKE="RLIKE"
|
||||
ROLE="ROLE"
|
||||
ROLLBACK="ROLLBACK"
|
||||
ROLLUP="ROLLUP"
|
||||
ROTATE="ROTATE"
|
||||
ROUTINE="ROUTINE"
|
||||
ROW="ROW"
|
||||
ROWS="ROWS"
|
||||
ROW_COUNT="ROW_COUNT"
|
||||
ROW_FORMAT="ROW_FORMAT"
|
||||
ROW_NUMBER="ROW_NUMBER"
|
||||
RTREE="RTREE"
|
||||
SAVEPOINT="SAVEPOINT"
|
||||
SCHEDULE="SCHEDULE"
|
||||
SCHEMA="SCHEMA"
|
||||
SCHEMAS="SCHEMAS"
|
||||
SCHEMA_NAME="SCHEMA_NAME"
|
||||
SECOND="SECOND"
|
||||
SECONDARY="SECONDARY"
|
||||
SECONDARY_ENGINE="SECONDARY_ENGINE"
|
||||
SECONDARY_LOAD="SECONDARY_LOAD"
|
||||
SECONDARY_UNLOAD="SECONDARY_UNLOAD"
|
||||
SECOND_MICROSECOND="SECOND_MICROSECOND"
|
||||
SECURITY="SECURITY"
|
||||
SELECT="SELECT"
|
||||
SENSITIVE="SENSITIVE"
|
||||
SEPARATOR="SEPARATOR"
|
||||
SERIAL="SERIAL"
|
||||
SERIALIZABLE="SERIALIZABLE"
|
||||
SERVER="SERVER"
|
||||
SESSION="SESSION"
|
||||
SET="SET"
|
||||
SHARE="SHARE"
|
||||
SHOW="SHOW"
|
||||
SHUTDOWN="SHUTDOWN"
|
||||
SIGNAL="SIGNAL"
|
||||
SIGNED="SIGNED"
|
||||
SIMPLE="SIMPLE"
|
||||
SKIP="SKIP"
|
||||
SLAVE="SLAVE"
|
||||
SLOW="SLOW"
|
||||
SMALLINT="SMALLINT"
|
||||
SNAPSHOT="SNAPSHOT"
|
||||
SOCKET="SOCKET"
|
||||
SOME="SOME"
|
||||
SONAME="SONAME"
|
||||
SOUNDS="SOUNDS"
|
||||
SOURCE="SOURCE"
|
||||
SPATIAL="SPATIAL"
|
||||
SPECIFIC="SPECIFIC"
|
||||
SQL="SQL"
|
||||
SQLEXCEPTION="SQLEXCEPTION"
|
||||
SQLSTATE="SQLSTATE"
|
||||
SQLWARNING="SQLWARNING"
|
||||
SQL_AFTER_GTIDS="SQL_AFTER_GTIDS"
|
||||
SQL_AFTER_MTS_GAPS="SQL_AFTER_MTS_GAPS"
|
||||
SQL_BEFORE_GTIDS="SQL_BEFORE_GTIDS"
|
||||
SQL_BIG_RESULT="SQL_BIG_RESULT"
|
||||
SQL_BUFFER_RESULT="SQL_BUFFER_RESULT"
|
||||
SQL_CALC_FOUND_ROWS="SQL_CALC_FOUND_ROWS"
|
||||
SQL_NO_CACHE="SQL_NO_CACHE"
|
||||
SQL_SMALL_RESULT="SQL_SMALL_RESULT"
|
||||
SQL_THREAD="SQL_THREAD"
|
||||
SQL_TSI_DAY="SQL_TSI_DAY"
|
||||
SQL_TSI_HOUR="SQL_TSI_HOUR"
|
||||
SQL_TSI_MINUTE="SQL_TSI_MINUTE"
|
||||
SQL_TSI_MONTH="SQL_TSI_MONTH"
|
||||
SQL_TSI_QUARTER="SQL_TSI_QUARTER"
|
||||
SQL_TSI_SECOND="SQL_TSI_SECOND"
|
||||
SQL_TSI_WEEK="SQL_TSI_WEEK"
|
||||
SQL_TSI_YEAR="SQL_TSI_YEAR"
|
||||
SRID="SRID"
|
||||
SSL="SSL"
|
||||
STACKED="STACKED"
|
||||
START="START"
|
||||
STARTING="STARTING"
|
||||
STARTS="STARTS"
|
||||
STATS_AUTO_RECALC="STATS_AUTO_RECALC"
|
||||
STATS_PERSISTENT="STATS_PERSISTENT"
|
||||
STATS_SAMPLE_PAGES="STATS_SAMPLE_PAGES"
|
||||
STATUS="STATUS"
|
||||
STOP="STOP"
|
||||
STORAGE="STORAGE"
|
||||
STORED="STORED"
|
||||
STRAIGHT_JOIN="STRAIGHT_JOIN"
|
||||
STRING="STRING"
|
||||
SUBCLASS_ORIGIN="SUBCLASS_ORIGIN"
|
||||
SUBJECT="SUBJECT"
|
||||
SUBPARTITION="SUBPARTITION"
|
||||
SUBPARTITIONS="SUBPARTITIONS"
|
||||
SUPER="SUPER"
|
||||
SUSPEND="SUSPEND"
|
||||
SWAPS="SWAPS"
|
||||
SWITCHES="SWITCHES"
|
||||
SYSTEM="SYSTEM"
|
||||
TABLE="TABLE"
|
||||
TABLES="TABLES"
|
||||
TABLESPACE="TABLESPACE"
|
||||
TABLE_CHECKSUM="TABLE_CHECKSUM"
|
||||
TABLE_NAME="TABLE_NAME"
|
||||
TEMPORARY="TEMPORARY"
|
||||
TEMPTABLE="TEMPTABLE"
|
||||
TERMINATED="TERMINATED"
|
||||
TEXT="TEXT"
|
||||
THAN="THAN"
|
||||
THEN="THEN"
|
||||
THREAD_PRIORITY="THREAD_PRIORITY"
|
||||
TIES="TIES"
|
||||
TIME="TIME"
|
||||
TIMESTAMP="TIMESTAMP"
|
||||
TIMESTAMPADD="TIMESTAMPADD"
|
||||
TIMESTAMPDIFF="TIMESTAMPDIFF"
|
||||
TINYBLOB="TINYBLOB"
|
||||
TINYINT="TINYINT"
|
||||
TINYTEXT="TINYTEXT"
|
||||
TO="TO"
|
||||
TRAILING="TRAILING"
|
||||
TRANSACTION="TRANSACTION"
|
||||
TRIGGER="TRIGGER"
|
||||
TRIGGERS="TRIGGERS"
|
||||
TRUE="TRUE"
|
||||
TRUNCATE="TRUNCATE"
|
||||
TYPE="TYPE"
|
||||
TYPES="TYPES"
|
||||
UNBOUNDED="UNBOUNDED"
|
||||
UNCOMMITTED="UNCOMMITTED"
|
||||
UNDEFINED="UNDEFINED"
|
||||
UNDO="UNDO"
|
||||
UNDOFILE="UNDOFILE"
|
||||
UNDO_BUFFER_SIZE="UNDO_BUFFER_SIZE"
|
||||
UNICODE="UNICODE"
|
||||
UNINSTALL="UNINSTALL"
|
||||
UNION="UNION"
|
||||
UNIQUE="UNIQUE"
|
||||
UNKNOWN="UNKNOWN"
|
||||
UNLOCK="UNLOCK"
|
||||
UNSIGNED="UNSIGNED"
|
||||
UNTIL="UNTIL"
|
||||
UPDATE="UPDATE"
|
||||
UPGRADE="UPGRADE"
|
||||
USAGE="USAGE"
|
||||
USE="USE"
|
||||
USER="USER"
|
||||
USER_RESOURCES="USER_RESOURCES"
|
||||
USE_FRM="USE_FRM"
|
||||
USING="USING"
|
||||
UTC_DATE="UTC_DATE"
|
||||
UTC_TIME="UTC_TIME"
|
||||
UTC_TIMESTAMP="UTC_TIMESTAMP"
|
||||
VALIDATION="VALIDATION"
|
||||
VALUE="VALUE"
|
||||
VALUES="VALUES"
|
||||
VARBINARY="VARBINARY"
|
||||
VARCHAR="VARCHAR"
|
||||
VARCHARACTER="VARCHARACTER"
|
||||
VARIABLES="VARIABLES"
|
||||
VARYING="VARYING"
|
||||
VCPU="VCPU"
|
||||
VIEW="VIEW"
|
||||
VIRTUAL="VIRTUAL"
|
||||
VISIBLE="VISIBLE"
|
||||
WAIT="WAIT"
|
||||
WARNINGS="WARNINGS"
|
||||
WEEK="WEEK"
|
||||
WEIGHT_STRING="WEIGHT_STRING"
|
||||
WHEN="WHEN"
|
||||
WHERE="WHERE"
|
||||
WHILE="WHILE"
|
||||
WINDOW="WINDOW"
|
||||
WITH="WITH"
|
||||
WITHOUT="WITHOUT"
|
||||
WORK="WORK"
|
||||
WRAPPER="WRAPPER"
|
||||
WRITE="WRITE"
|
||||
X509="X509"
|
||||
XA="XA"
|
||||
XID="XID"
|
||||
XML="XML"
|
||||
XOR="XOR"
|
||||
YEAR="YEAR"
|
||||
YEAR_MONTH="YEAR_MONTH"
|
||||
ZEROFILL="ZEROFILL"
|
98
dictionaries/jbig2.dict
Normal file
98
dictionaries/jbig2.dict
Normal file
@ -0,0 +1,98 @@
|
||||
# AFL dictionary for jbig2 images
|
||||
# by Sebastian Rasmussen <sebras@gmail.com>
|
||||
|
||||
id_string="\x97\x4a\x42\x32\x0d\x0a\x1a\x0a"
|
||||
|
||||
# segments
|
||||
|
||||
noretain_allpages_symbol_dictionary="\x00"
|
||||
noretain_allpages_intermediate_text_region="\x04"
|
||||
noretain_allpages_immediate_text_region="\x06"
|
||||
noretain_allpages_immediate_lossless_text_region="\x07"
|
||||
noretain_allpages_pattern_dictionary="\x10"
|
||||
noretain_allpages_intermediate_halftone_region="\x14"
|
||||
noretain_allpages_immediate_halftone_region="\x16"
|
||||
noretain_allpages_immediate_lossless_halftone_region="\x17"
|
||||
noretain_allpages_intermediate_generic_region="\x24"
|
||||
noretain_allpages_immediate_generic_region="\x26"
|
||||
noretain_allpages_immediate_lossless_generic_region="\x27"
|
||||
noretain_allpages_intermediate_generic_refinement_region="\x28"
|
||||
noretain_allpages_immediate_generic_refinement_region="\x2a"
|
||||
noretain_allpages_immediate_lossless_generic_refinement_region="\x2b"
|
||||
noretain_allpages_page_information="\x30"
|
||||
noretain_allpages_end_of_page="\x31"
|
||||
noretain_allpages_end_of_stripe="\x32"
|
||||
noretain_allpages_end_of_file="\x33"
|
||||
noretain_allpages_profiles="\x34"
|
||||
noretain_allpages_tables="\x35"
|
||||
noretain_allpages_color_palette="\x36"
|
||||
noretain_allpages_extension="\x3e"
|
||||
|
||||
noretain_specificpage_symbol_dictionary="\x40"
|
||||
noretain_specificpage_intermediate_text_region="\x44"
|
||||
noretain_specificpage_immediate_text_region="\x46"
|
||||
noretain_specificpage_immediate_lossless_text_region="\x47"
|
||||
noretain_specificpage_pattern_dictionary="\x50"
|
||||
noretain_specificpage_intermediate_halftone_region="\x54"
|
||||
noretain_specificpage_immediate_halftone_region="\x56"
|
||||
noretain_specificpage_immediate_lossless_halftone_region="\x57"
|
||||
noretain_specificpage_intermediate_generic_region="\x64"
|
||||
noretain_specificpage_immediate_generic_region="\x66"
|
||||
noretain_specificpage_immediate_lossless_generic_region="\x67"
|
||||
noretain_specificpage_intermediate_generic_refinement_region="\x68"
|
||||
noretain_specificpage_immediate_generic_refinement_region="\x6a"
|
||||
noretain_specificpage_immediate_lossless_generic_refinement_regio6="\x6b"
|
||||
noretain_specificpage_page_information="\x70"
|
||||
noretain_specificpage_end_of_page="\x71"
|
||||
noretain_specificpage_end_of_stripe="\x72"
|
||||
noretain_specificpage_end_of_file="\x73"
|
||||
noretain_specificpage_profiles="\x74"
|
||||
noretain_specificpage_tables="\x75"
|
||||
noretain_specificpage_color_palette="\x76"
|
||||
noretain_specificpage_extension="\x7e"
|
||||
|
||||
retain_allpages_symbol_dictionary="\x80"
|
||||
retain_allpages_intermediate_text_region="\x84"
|
||||
retain_allpages_immediate_text_region="\x86"
|
||||
retain_allpages_immediate_lossless_text_region="\x87"
|
||||
retain_allpages_pattern_dictionary="\x90"
|
||||
retain_allpages_intermediate_halftone_region="\x94"
|
||||
retain_allpages_immediate_halftone_region="\x96"
|
||||
retain_allpages_immediate_lossless_halftone_region="\x97"
|
||||
retain_allpages_intermediate_generic_region="\xa4"
|
||||
retain_allpages_immediate_generic_region="\xa6"
|
||||
retain_allpages_immediate_lossless_generic_region="\xa7"
|
||||
retain_allpages_intermediate_generic_refinement_region="\xa8"
|
||||
retain_allpages_immediate_generic_refinement_region="\xaa"
|
||||
retain_allpages_immediate_lossless_generic_refinement_regio6="\xab"
|
||||
retain_allpages_page_information="\xb0"
|
||||
retain_allpages_end_of_page="\xb1"
|
||||
retain_allpages_end_of_stripe="\xb2"
|
||||
retain_allpages_end_of_file="\xb3"
|
||||
retain_allpages_profiles="\xb4"
|
||||
retain_allpages_tables="\xb5"
|
||||
retain_allpages_color_palette="\xb6"
|
||||
retain_allpages_extension="\xbe"
|
||||
|
||||
retain_specificpage_symbol_dictionary="\xc0"
|
||||
retain_specificpage_intermediate_text_region="\xc4"
|
||||
retain_specificpage_immediate_text_region="\xc6"
|
||||
retain_specificpage_immediate_lossless_text_region="\xc7"
|
||||
retain_specificpage_pattern_dictionary="\xd0"
|
||||
retain_specificpage_intermediate_halftone_region="\xd4"
|
||||
retain_specificpage_immediate_halftone_region="\xd6"
|
||||
retain_specificpage_immediate_lossless_halftone_region="\xd7"
|
||||
retain_specificpage_intermediate_generic_region="\xe4"
|
||||
retain_specificpage_immediate_generic_region="\xe6"
|
||||
retain_specificpage_immediate_lossless_generic_region="\xe7"
|
||||
retain_specificpage_intermediate_generic_refinement_region="\xe8"
|
||||
retain_specificpage_immediate_generic_refinement_region="\xea"
|
||||
retain_specificpage_immediate_lossless_generic_refinement_regio6="\xeb"
|
||||
retain_specificpage_page_information="\xf0"
|
||||
retain_specificpage_end_of_page="\xf1"
|
||||
retain_specificpage_end_of_stripe="\xf2"
|
||||
retain_specificpage_end_of_file="\xf3"
|
||||
retain_specificpage_profiles="\xf4"
|
||||
retain_specificpage_tables="\xf5"
|
||||
retain_specificpage_color_palette="\xf6"
|
||||
retain_specificpage_extension="\xfe"
|
@ -2,7 +2,7 @@
|
||||
# AFL dictionary for JPEG images
|
||||
# ------------------------------
|
||||
#
|
||||
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||
# Created by Michal Zalewski
|
||||
#
|
||||
|
||||
header_jfif="JFIF\x00"
|
||||
|
22
dictionaries/jpeg2000.dict
Normal file
22
dictionaries/jpeg2000.dict
Normal file
@ -0,0 +1,22 @@
|
||||
type="jP "
|
||||
ftyp="ftyp"
|
||||
subtype1="jp2 "
|
||||
subtype2="jp20"
|
||||
subtype3="jpm "
|
||||
subtype4="jpx "
|
||||
subtype5="jp2h"
|
||||
subtype6="jpxb"
|
||||
subtype7="mjp2"
|
||||
subtype8="mj2s"
|
||||
subtype9="jp2c"
|
||||
subtype10="jpch"
|
||||
subtype11="jplh"
|
||||
codestream="\xFF\x4F\xFF\x51"
|
||||
signature="\x0d\x0a\x87\x0a"
|
||||
tag1="hdr"
|
||||
tag2="colr"
|
||||
tag3="url"
|
||||
tag4="req"
|
||||
tag5="res"
|
||||
tag6="page"
|
||||
tag7="obj"
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# Contains basic reserved keywords and syntax building blocks.
|
||||
#
|
||||
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||
# Created by Michal Zalewski
|
||||
#
|
||||
|
||||
keyword_arguments="arguments"
|
||||
|
@ -50,3 +50,12 @@
|
||||
"\"\":0"
|
||||
"//"
|
||||
"/**/"
|
||||
|
||||
"$ref"
|
||||
"type"
|
||||
"coordinates"
|
||||
"@context"
|
||||
"@id"
|
||||
|
||||
","
|
||||
":"
|
||||
|
60
dictionaries/jsonnet.dict
Normal file
60
dictionaries/jsonnet.dict
Normal file
@ -0,0 +1,60 @@
|
||||
# https://jsonnet.org/ref/spec.html
|
||||
|
||||
# Keywords
|
||||
"assert"
|
||||
"else"
|
||||
"error"
|
||||
"false"
|
||||
"for"
|
||||
"function"
|
||||
"if"
|
||||
"import"
|
||||
"importstr"
|
||||
"in"
|
||||
"local"
|
||||
"null"
|
||||
"self"
|
||||
"super"
|
||||
"tailstrict"
|
||||
"then"
|
||||
"true"
|
||||
"super"
|
||||
"local"
|
||||
|
||||
# operators
|
||||
"|||"
|
||||
"@\""
|
||||
"@'"
|
||||
"!="
|
||||
"=="
|
||||
"[::]"
|
||||
"+:::"
|
||||
|
||||
# functions
|
||||
"std.acos("
|
||||
"std.asin("
|
||||
"std.atan("
|
||||
"std.ceil("
|
||||
"std.char("
|
||||
"std.codepoint("
|
||||
"std.cos("
|
||||
"std.equals("
|
||||
"std.exp("
|
||||
"std.exponent("
|
||||
"std.floor("
|
||||
"std.join("
|
||||
"std.length("
|
||||
"std.log("
|
||||
"std.makeArray("
|
||||
"std.mantissa("
|
||||
"std.mod"
|
||||
"std.modulo("
|
||||
"std.objectFiledsEx("
|
||||
"std.objectsHasEx("
|
||||
"std.pow("
|
||||
"std.primitiveEquals("
|
||||
"std.sin("
|
||||
"std.slice("
|
||||
"std.sqrt("
|
||||
"std.tan("
|
||||
"std.type("
|
28
dictionaries/markdown.dict
Normal file
28
dictionaries/markdown.dict
Normal file
@ -0,0 +1,28 @@
|
||||
strike="~~"
|
||||
list="2."
|
||||
link="[a]("
|
||||
link_without_ref="[a]["
|
||||
image=""
|
||||
"fread()"
|
||||
":raw:utf8"
|
||||
":raw:eol(LF)"
|
||||
"Perl_invert()"
|
||||
":raw:eol(CRLF)"
|
||||
"Perl_PerlIO_eof()"
|
@ -5,7 +5,7 @@
|
||||
# Just the basic, standard-originating sections; does not include vendor
|
||||
# extensions.
|
||||
#
|
||||
# Created by Michal Zalewski <lcamtuf@google.com>
|
||||
# Created by Michal Zalewski
|
||||
#
|
||||
|
||||
header_png="\x89PNG\x0d\x0a\x1a\x0a"
|
||||
|
249
dictionaries/proj4.dict
Normal file
249
dictionaries/proj4.dict
Normal file
@ -0,0 +1,249 @@
|
||||
# Dictionary developed for proj4 standard_fuzzer.cpp
|
||||
|
||||
# valid proj types (lines 1,2), generated from seeds
|
||||
# $ grep -hoe 'proj=\w*' -o seeds/* | sort -u
|
||||
"+proj=aea"
|
||||
"+proj=aeqd"
|
||||
"+proj=calcofi"
|
||||
"+proj=cass"
|
||||
"+proj=cea"
|
||||
"+proj=comill"
|
||||
"+proj=eck4"
|
||||
"+proj=eck6"
|
||||
"+proj=eqc"
|
||||
"+proj=eqdc"
|
||||
"+proj=etmerc"
|
||||
"+proj=gall"
|
||||
"+proj=geocent"
|
||||
"+proj=geos"
|
||||
"+proj=gstmerc"
|
||||
"+proj=hammer"
|
||||
"+proj=healpix"
|
||||
"+proj=helmert"
|
||||
"+proj=kav5"
|
||||
"+proj=krovak"
|
||||
"+proj=labrd"
|
||||
"+proj=laea"
|
||||
"+proj=latlong"
|
||||
"+proj=lcc"
|
||||
"+proj=longlat"
|
||||
"+proj=merc"
|
||||
"+proj=mill"
|
||||
"+proj=misrsom"
|
||||
"+proj=moll"
|
||||
"+proj=natearth"
|
||||
"+proj=natearth2"
|
||||
"+proj=nzmg"
|
||||
"+proj=ob_tran"
|
||||
"+proj=omerc"
|
||||
"+proj=omerc"
|
||||
"+proj=patterson"
|
||||
"+proj=pconic"
|
||||
"+proj=poly"
|
||||
"+proj=qsc"
|
||||
"+proj=rhealpix"
|
||||
"+proj=robin"
|
||||
"+proj=sch"
|
||||
"+proj=sinu"
|
||||
"+proj=somerc"
|
||||
"+proj=stere"
|
||||
"+proj=sterea"
|
||||
"+proj=tmerc"
|
||||
"+proj=utm"
|
||||
"+proj=vandg"
|
||||
|
||||
# valid datum types (lines 1,2), generated from seeds
|
||||
# $ grep -hoe 'datum=\w*' -o seeds/* | sort -u
|
||||
"+datum=GGRS87"
|
||||
"+datum=NAD27"
|
||||
"+datum=NAD83"
|
||||
"+datum=OSGB36"
|
||||
"+datum=WGS84"
|
||||
"+datum=carthage"
|
||||
"+datum=hermannskogel"
|
||||
"+datum=ire65"
|
||||
"+datum=nzgd49"
|
||||
"+datum=potsdam"
|
||||
|
||||
# valid ellps types
|
||||
# $ grep -hoe 'elps=\w*' -o seeds/* | sort -u
|
||||
"+ellps=GRS67"
|
||||
"+ellps=GRS80"
|
||||
"+ellps=WGS66"
|
||||
"+ellps=WGS72"
|
||||
"+ellps=WGS84"
|
||||
"+ellps=airy"
|
||||
"+ellps=aust_SA"
|
||||
"+ellps=bess_nam"
|
||||
"+ellps=bessel"
|
||||
"+ellps=clrk66"
|
||||
"+ellps=clrk80"
|
||||
"+ellps=everest"
|
||||
"+ellps=evrstSS"
|
||||
"+ellps=fschr60m"
|
||||
"+ellps=helmert"
|
||||
"+ellps=intl"
|
||||
"+ellps=krass"
|
||||
"+ellps=mod_airy"
|
||||
"+ellps=sphere"
|
||||
|
||||
# other various valid types
|
||||
"+epoch=1988"
|
||||
"+gamma=53d7"
|
||||
"+geoidgrids=egm08_25"
|
||||
"+geoidgrids=g2012a_conus"
|
||||
"+lastupdate=1993"
|
||||
"+lat_0=44d00"
|
||||
"+lat_0=46"
|
||||
"+lat_1=18d49"
|
||||
"+lat_2=40d43"
|
||||
"+lat_ts=33"
|
||||
"+llps=bessel"
|
||||
"+llps=clrk66"
|
||||
"+lon_0=7"
|
||||
"+lon_1=62"
|
||||
"+lon_2=53"
|
||||
"+lonc=78d00"
|
||||
"+lpha=55d40"
|
||||
"+nadgrids=MD"
|
||||
"+nadgrids=chenyx06etrs"
|
||||
"+nadgrids=conus"
|
||||
"+nadgrids=ntf_r93"
|
||||
"+nadgrids=ntv1_can"
|
||||
"+nadgrids=ntv2_0"
|
||||
"+nadgrids=null"
|
||||
"+north=0"
|
||||
"+north_square=0"
|
||||
"+o_lat_p=LAT_POLE"
|
||||
"+o_lon_p=LON_POLE"
|
||||
"+o_proj=moll"
|
||||
"+origin=EPSG"
|
||||
"+origin=Esri"
|
||||
"+origin=IGNF"
|
||||
"+origin=Swisstopo"
|
||||
"+origin=ftp"
|
||||
"+origin=http"
|
||||
"+pm=jakarta"
|
||||
"+pm=lisbon"
|
||||
"+pm=madrid"
|
||||
"+pm=oslo"
|
||||
"+pm=paris"
|
||||
"+pm=rome"
|
||||
"+pm=stockholm"
|
||||
"+title=Amsterdam"
|
||||
"+towgs84=103"
|
||||
"+units=ft"
|
||||
"+units=km"
|
||||
"+units=link"
|
||||
"+units=m"
|
||||
"+units=us"
|
||||
"+vunits=m"
|
||||
"+vunits=us"
|
||||
|
||||
# binary prefix for line 3
|
||||
"BINARY2D:"
|
||||
"BINARY3D:"
|
||||
|
||||
# floating point numbers
|
||||
"-0.100000 "
|
||||
"0.000000 "
|
||||
"0.100000 "
|
||||
"1.100000 "
|
||||
"4294967295.000000 "
|
||||
"9007199254740992.000000 "
|
||||
"\x9a\x99\x99\x99\x99\x99\xf1\xbf"
|
||||
"\x9a\x99\x99\x99\x99\x99\xb9\xbf"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x9a\x99\x99\x99\x99\x99\xb9\x3f"
|
||||
"\x9a\x99\x99\x99\x99\x99\xf1\x3f"
|
||||
"\x00\x00\xe0\xff\xff\xff\xef\x41"
|
||||
"\x00\x00\x00\x00\x00\x00\x40\x43"
|
||||
|
||||
|
||||
# valid prefixes
|
||||
"+R="
|
||||
"+RES="
|
||||
"+W="
|
||||
"+a="
|
||||
"+alpha="
|
||||
"+axis="
|
||||
"+azi="
|
||||
"+b="
|
||||
"+bs="
|
||||
"+d="
|
||||
"+datum="
|
||||
"+depmode="
|
||||
"+dest="
|
||||
"+dir="
|
||||
"+drx="
|
||||
"+dry="
|
||||
"+drz="
|
||||
"+ds="
|
||||
"+dx="
|
||||
"+dy="
|
||||
"+dz="
|
||||
"+e="
|
||||
"+ellps="
|
||||
"+epoch="
|
||||
"+es="
|
||||
"+f="
|
||||
"+files="
|
||||
"+flg="
|
||||
"+gamma="
|
||||
"+geoidgrids="
|
||||
"+h="
|
||||
"+has_opt="
|
||||
"+init="
|
||||
"+k="
|
||||
"+k_0="
|
||||
"+lastupdate="
|
||||
"+lat_0="
|
||||
"+lat_1="
|
||||
"+lat_2="
|
||||
"+lat_ts="
|
||||
"+lib="
|
||||
"+list="
|
||||
"+lon_0="
|
||||
"+lon_1="
|
||||
"+lon_2="
|
||||
"+lon_wrap="
|
||||
"+lonc="
|
||||
"+nadgrids="
|
||||
"+north="
|
||||
"+north_square="
|
||||
"+o_lat_p="
|
||||
"+o_lon_p="
|
||||
"+o_proj="
|
||||
"+origin="
|
||||
"+path="
|
||||
"+phdg_0="
|
||||
"+plat_0="
|
||||
"+plon_0="
|
||||
"+pm="
|
||||
"+prefix="
|
||||
"+proj="
|
||||
"+r_a="
|
||||
"+rf="
|
||||
"+rx="
|
||||
"+ry="
|
||||
"+rz="
|
||||
"+s="
|
||||
"+skip_next="
|
||||
"+south="
|
||||
"+south_square="
|
||||
"+srcdirstrip="
|
||||
"+sweep="
|
||||
"+target_option="
|
||||
"+title="
|
||||
"+to_meter="
|
||||
"+topsrcdirstrip="
|
||||
"+towgs84="
|
||||
"+units="
|
||||
"+version="
|
||||
"+vunits="
|
||||
"+x="
|
||||
"+x_0="
|
||||
"+y="
|
||||
"+y_0="
|
||||
"+z="
|
||||
"+zone="
|
40
dictionaries/protobuf.dict
Normal file
40
dictionaries/protobuf.dict
Normal file
@ -0,0 +1,40 @@
|
||||
# Keywords taken from https://developers.google.com/protocol-buffers/docs/reference/proto2-spec
|
||||
|
||||
bool="bool"
|
||||
bytes="bytes"
|
||||
double="double"
|
||||
enum="enum"
|
||||
extend="extend"
|
||||
extension="extension"
|
||||
false="false"
|
||||
fixed32="fixed32"
|
||||
fixed64="fixed64"
|
||||
float="float"
|
||||
group="group"
|
||||
import="import"
|
||||
inner="inner"
|
||||
int32="int32"
|
||||
int64="int64"
|
||||
map="map<"
|
||||
message="message"
|
||||
option="option"
|
||||
optional="optional"
|
||||
package="package"
|
||||
public="public"
|
||||
repeated="repeated"
|
||||
required="required"
|
||||
reserved="reserved"
|
||||
returns="returns"
|
||||
rpc="rpc"
|
||||
service="service"
|
||||
sfixed32="sfixed32"
|
||||
sfixed64="sfixed64"
|
||||
sint32="sint32"
|
||||
sint64="sint64"
|
||||
stream="stream"
|
||||
string="string"
|
||||
syntax="syntax"
|
||||
true="true"
|
||||
uint32="uint32"
|
||||
uint64="uint64"
|
||||
weak="weak"
|
433
dictionaries/ps.dict
Normal file
433
dictionaries/ps.dict
Normal file
@ -0,0 +1,433 @@
|
||||
# https://web.archive.org/web/20170218093716/https://www.adobe.com/products/postscript/pdfs/PLRM.pdf
|
||||
# TODO(jvoisin) Add more, starting from page 318
|
||||
|
||||
|
||||
header="%!PS"
|
||||
|
||||
#types
|
||||
"array"
|
||||
"packedarray"
|
||||
"dict"
|
||||
"string"
|
||||
"userdict"
|
||||
"$error"
|
||||
"statusdict"
|
||||
"FontDirectory"
|
||||
"globaldict"
|
||||
"systemdict"
|
||||
"GlobalFontDirectory"
|
||||
"Order"
|
||||
"DateSource"
|
||||
"BitsPerSample"
|
||||
"Encode"
|
||||
"Decode"
|
||||
"Size"
|
||||
|
||||
# Stack operators
|
||||
"dup"
|
||||
"exch"
|
||||
"pop"
|
||||
"copy"
|
||||
"roll"
|
||||
"index"
|
||||
"mark"
|
||||
"clear"
|
||||
"count"
|
||||
"counttomark"
|
||||
"cleartomark"
|
||||
|
||||
# maths
|
||||
"add"
|
||||
"sub"
|
||||
"mul"
|
||||
"div"
|
||||
"idiv"
|
||||
"mod"
|
||||
"abs"
|
||||
"neg"
|
||||
"ceiling"
|
||||
"floor"
|
||||
"round"
|
||||
"truncate"
|
||||
"sqrt"
|
||||
"exp"
|
||||
"ln"
|
||||
"log"
|
||||
"rand"
|
||||
"srang"
|
||||
"rrand"
|
||||
|
||||
# arrays
|
||||
"get"
|
||||
"put"
|
||||
"copy"
|
||||
"length"
|
||||
"forall"
|
||||
"getinterval"
|
||||
"putinterval"
|
||||
"aload"
|
||||
"astore"
|
||||
"mark"
|
||||
"setpacking"
|
||||
"currentpacking"
|
||||
"begin"
|
||||
"end"
|
||||
"def"
|
||||
"store"
|
||||
"load"
|
||||
"where"
|
||||
"countdictstack"
|
||||
"cleardictstack"
|
||||
"dictstack"
|
||||
"known"
|
||||
"maxlength"
|
||||
"undef"
|
||||
"<<"
|
||||
">>"
|
||||
"search"
|
||||
"anchorsearch"
|
||||
"token"
|
||||
|
||||
# relational operators
|
||||
"eq"
|
||||
"ne"
|
||||
"gt"
|
||||
"ge"
|
||||
"lt"
|
||||
"le"
|
||||
"and"
|
||||
"or"
|
||||
"xor"
|
||||
"true"
|
||||
"false"
|
||||
"bitshift"
|
||||
|
||||
|
||||
#control operators
|
||||
"if"
|
||||
"else"
|
||||
"ifelse"
|
||||
"exec"
|
||||
"for"
|
||||
"repeat"
|
||||
"loop"
|
||||
"forall"
|
||||
"pathforall"
|
||||
"kshow"
|
||||
"exit"
|
||||
"countexecstack"
|
||||
"execstack"
|
||||
"stop"
|
||||
"errordict"
|
||||
"stopped"
|
||||
|
||||
|
||||
# type
|
||||
"type"
|
||||
"xcheck"
|
||||
"rcheck"
|
||||
"wcheck"
|
||||
"cvlit"
|
||||
"cvx"
|
||||
"readonly"
|
||||
"executeonly"
|
||||
"noacces"
|
||||
"cvi"
|
||||
"cvr"
|
||||
"cns"
|
||||
"cvs"
|
||||
"cvrs"
|
||||
|
||||
#misc
|
||||
"print"
|
||||
"invalidaccess"
|
||||
"gcheck"
|
||||
"showpage"
|
||||
"currentgstate"
|
||||
"currentfile"
|
||||
"status"
|
||||
"byteavailable"
|
||||
"setdevparams"
|
||||
"currentdevparams"
|
||||
"Predictor"
|
||||
"Columns"
|
||||
"Colors"
|
||||
"BitsPerComponent"
|
||||
"Uncompressed"
|
||||
"EndOfLine"
|
||||
"EncodedByteAlign"
|
||||
"EndOfBlock"
|
||||
"Blackls1"
|
||||
"DamagedRowsBeforeError"
|
||||
"CloseTarget"
|
||||
"HuffTables"
|
||||
"ColorTransform"
|
||||
|
||||
|
||||
# vm
|
||||
"load"
|
||||
"save"
|
||||
"restore"
|
||||
"setglobal"
|
||||
"grestoreall"
|
||||
"invalidrestore"
|
||||
"startjob"
|
||||
"exitserver"
|
||||
|
||||
# User objects
|
||||
"defineuserobject"
|
||||
"undefineuserobject"
|
||||
"execuserobject"
|
||||
"UserObjects"
|
||||
|
||||
#i/o
|
||||
"read"
|
||||
"write"
|
||||
"readstring"
|
||||
"readline"
|
||||
"writestring"
|
||||
"readhexstring"
|
||||
"writehexstring"
|
||||
"token"
|
||||
"flush"
|
||||
"flushfile"
|
||||
|
||||
|
||||
# files
|
||||
"file"
|
||||
"deletefile"
|
||||
"renamefile"
|
||||
"status"
|
||||
"filenameforall"
|
||||
"setfileposition"
|
||||
"fileposition"
|
||||
"%stdin"
|
||||
"%stdout"
|
||||
"%stderr"
|
||||
"%statementedit"
|
||||
"%lineedit"
|
||||
|
||||
# Filters
|
||||
"ASCII85Decode"
|
||||
"ASCII85Encode"
|
||||
"ASCIIHexDecode"
|
||||
"ASCIIHexEncode"
|
||||
"Decode"
|
||||
"Encode"
|
||||
"RunLengthEncode"
|
||||
"RunLengthDecode"
|
||||
"CCITTFaxEncode"
|
||||
"CCITTFaxDecode"
|
||||
"DCTEncode"
|
||||
"DCTDecode"
|
||||
"ReusableStreamDecode"
|
||||
"NullEncode"
|
||||
"SubFileDecode"
|
||||
"filter"
|
||||
"LWZEncode"
|
||||
"LWZDecode"
|
||||
"FlateEncode"
|
||||
"FlateDecode"
|
||||
"EODCount"
|
||||
"EODString"
|
||||
"CloseSource"
|
||||
|
||||
|
||||
# Resources
|
||||
"findresource"
|
||||
"resourcestatus"
|
||||
"resourceforall"
|
||||
"definerresource"
|
||||
"undefineresource"
|
||||
"findfont"
|
||||
"definefont"
|
||||
"resourcestatsu"
|
||||
"Font"
|
||||
"CIDFont"
|
||||
"CMap"
|
||||
"FontSet"
|
||||
"Encoding"
|
||||
"Form"
|
||||
"Pattern"
|
||||
"ProcSet"
|
||||
"ColorSpace"
|
||||
"Halftone"
|
||||
"ColorRendering"
|
||||
"IdiomSet"
|
||||
"Inkparam"
|
||||
"TrapParams"
|
||||
"OutputDevice"
|
||||
"Controllangue"
|
||||
"Localization"
|
||||
"PDL"
|
||||
"HWOptions"
|
||||
"Filter"
|
||||
"ColorSpaceFamily"
|
||||
"Emulator"
|
||||
"IODevice"
|
||||
"ColorRenderingType"
|
||||
"FMapType"
|
||||
"FontType"
|
||||
"FormType"
|
||||
"HalftoneType"
|
||||
"ImageType"
|
||||
"PatternType"
|
||||
"FunctionType"
|
||||
"ShadingType"
|
||||
"TrappingType"
|
||||
"Category"
|
||||
"Generic"
|
||||
"BitMapFontInit"
|
||||
"CIDInit"
|
||||
"ColorRendering"
|
||||
"FontSetInit"
|
||||
"Trapping"
|
||||
"ColorSpace"
|
||||
"ColorSpaceFamily"
|
||||
"sethalftone"
|
||||
"DefineResource"
|
||||
"UndefineResource"
|
||||
"FindResource"
|
||||
"ResourceStatus"
|
||||
"ResourceForAll"
|
||||
"Category"
|
||||
"InstaceType"
|
||||
"ResourceFileName"
|
||||
"Intent"
|
||||
"AsyncRead"
|
||||
"Times-Roman"
|
||||
|
||||
|
||||
# Error handling
|
||||
"errorname"
|
||||
"errorinfo"
|
||||
"command"
|
||||
"newerror"
|
||||
"ostack"
|
||||
"estack"
|
||||
"dstack"
|
||||
"recordstacks"
|
||||
"binary"
|
||||
"bind"
|
||||
"average"
|
||||
|
||||
|
||||
# Image models
|
||||
"CTM"
|
||||
"DeviceGray"
|
||||
"arc"
|
||||
"arcn"
|
||||
"artct"
|
||||
"clip"
|
||||
"cliprestore"
|
||||
"clipsave"
|
||||
"closepath"
|
||||
"currentlinewidth"
|
||||
"curveto"
|
||||
"fill"
|
||||
"grestone"
|
||||
"gsave"
|
||||
"image"
|
||||
"ineofill"
|
||||
"infill"
|
||||
"instroke"
|
||||
"inueofill"
|
||||
"inustroke"
|
||||
"lineto"
|
||||
"moveto"
|
||||
"newpath"
|
||||
"nocurrentpoint"
|
||||
"path"
|
||||
"position"
|
||||
"rcurveto"
|
||||
"rlineto"
|
||||
"setbox"
|
||||
"setlinewidth"
|
||||
"show"
|
||||
"stroke"
|
||||
"ucache"
|
||||
"ufill"
|
||||
"ustroke"
|
||||
"cvlit"
|
||||
"ufill"
|
||||
"ueofill"
|
||||
"rectfill"
|
||||
"rectstoke"
|
||||
"rectclip"
|
||||
"execform"
|
||||
"FormType"
|
||||
"XIUD"
|
||||
"BBox"
|
||||
"Matrix"
|
||||
"PaintProc"
|
||||
"Implementation"
|
||||
|
||||
|
||||
# Colorspace
|
||||
"setcolorspace"
|
||||
"setgray"
|
||||
"setrgbcolor"
|
||||
"setcmykcolor"
|
||||
"image"
|
||||
"colorimage"
|
||||
"sethsbcolor"
|
||||
"CIEBasedABC"
|
||||
"CIEBasedA"
|
||||
"CIEBaseDEF"
|
||||
"CIEBaseDEFG"
|
||||
"Pattern"
|
||||
"Indexed"
|
||||
"Separation"
|
||||
"DeviceN"
|
||||
"setpattern"
|
||||
"currentgray"
|
||||
"currentrgbcolor"
|
||||
"currentcmykcolor"
|
||||
"setcachedevice"
|
||||
"setcachedevice2"
|
||||
"BuildGlyph"
|
||||
"BuildChar"
|
||||
"CharString"
|
||||
"shfill"
|
||||
"setundercolorremoval"
|
||||
"settransfer"
|
||||
"setscreen"
|
||||
"sethalftone"
|
||||
"setcolortransfer"
|
||||
"DeviceRGB"
|
||||
"DeviceCMYK"
|
||||
"DeviceGray"
|
||||
"RangeABC"
|
||||
"DecodeABC"
|
||||
"MatrixABC"
|
||||
"RangeLMN"
|
||||
"DecodeLMN"
|
||||
"MatrixLMN"
|
||||
"WhitePoint"
|
||||
"BlackPoint"
|
||||
|
||||
|
||||
# Patterns
|
||||
"PatternType"
|
||||
"XUID"
|
||||
"PaintProc"
|
||||
"BBox"
|
||||
"XStep"
|
||||
"YStep"
|
||||
"PaintType"
|
||||
"TilingType"
|
||||
"Implementation"
|
||||
"Shading"
|
||||
"ShadingType"
|
||||
"AntiAlias"
|
||||
"Coords"
|
||||
"BitsPerFlag"
|
||||
"BitsPerCoordinate"
|
||||
"MultipleDataSources"
|
||||
|
||||
|
||||
# Misc things
|
||||
"[-1, 1, -1, 1]"
|
||||
"[-1 1]"
|
||||
"1337"
|
||||
"<</"
|
180
dictionaries/psd.dict
Normal file
180
dictionaries/psd.dict
Normal file
@ -0,0 +1,180 @@
|
||||
# https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
|
||||
|
||||
"8BPS"
|
||||
"8BIM"
|
||||
"8B64"
|
||||
|
||||
# blend mode keys
|
||||
"pass"
|
||||
"norm"
|
||||
"diss"
|
||||
"dark"
|
||||
"mul "
|
||||
"idiv"
|
||||
"lbrn"
|
||||
"dkCl"
|
||||
"lite"
|
||||
"scrn"
|
||||
"deiv"
|
||||
"lddg"
|
||||
"lgCl"
|
||||
"over"
|
||||
"sLit"
|
||||
"hLit"
|
||||
"vLit"
|
||||
"lLit"
|
||||
"pLit"
|
||||
"hMix"
|
||||
"diff"
|
||||
"smud"
|
||||
"fsub"
|
||||
"fdiv"
|
||||
"hue "
|
||||
"sat "
|
||||
"colr"
|
||||
"lum "
|
||||
|
||||
# adjustment layers
|
||||
"SoCo"
|
||||
"GdFl"
|
||||
"PtFl"
|
||||
"brit"
|
||||
"levl"
|
||||
"curv"
|
||||
"expA"
|
||||
"vibA"
|
||||
"hue "
|
||||
"hue2"
|
||||
"blnc"
|
||||
"blwh"
|
||||
"phfl"
|
||||
"mixr"
|
||||
"clrL"
|
||||
"nvrt"
|
||||
"post"
|
||||
"thrs"
|
||||
"grdm"
|
||||
"selc"
|
||||
|
||||
# effect signatures
|
||||
"cmnS"
|
||||
"dsdw"
|
||||
"isdw"
|
||||
"oglw"
|
||||
"iglw"
|
||||
"bevl"
|
||||
"sofi"
|
||||
|
||||
# keys
|
||||
"Layr"
|
||||
"Lr16"
|
||||
"Lr32"
|
||||
"TySh"
|
||||
"tySt"
|
||||
"lrFX"
|
||||
"luni"
|
||||
"lyid"
|
||||
"lfx2"
|
||||
"Patt"
|
||||
"Pat2"
|
||||
"Pat3"
|
||||
"Anno"
|
||||
"clbl"
|
||||
"infx"
|
||||
"knko"
|
||||
"lspf"
|
||||
"lclr"
|
||||
"fxrp"
|
||||
"grdm"
|
||||
"lsct"
|
||||
"brst"
|
||||
"SoCo"
|
||||
"PtFl"
|
||||
"GdFl"
|
||||
"vmsk"
|
||||
"vsms"
|
||||
"vscg"
|
||||
"ffxi"
|
||||
"lnsr"
|
||||
"shpa"
|
||||
"shmd"
|
||||
"lyvr"
|
||||
"tsly"
|
||||
"lmgm"
|
||||
"vmgm"
|
||||
"brit"
|
||||
"mixr"
|
||||
"clrL"
|
||||
"plLd"
|
||||
"lnkD"
|
||||
"lnk2"
|
||||
"lnk3"
|
||||
"phfl"
|
||||
"blwh"
|
||||
"CgEd"
|
||||
"Txt2"
|
||||
"vibA"
|
||||
"pths"
|
||||
"anFX"
|
||||
"FMsk"
|
||||
"SoLd"
|
||||
"vstk"
|
||||
"vscg"
|
||||
"sn2P"
|
||||
"vogk"
|
||||
"PxSc"
|
||||
"cinf"
|
||||
"PxSD"
|
||||
"artb"
|
||||
"artd"
|
||||
"abdd"
|
||||
"SoLE"
|
||||
"Mtrn"
|
||||
"Mt16"
|
||||
"Mt32"
|
||||
"LMsk"
|
||||
"expA"
|
||||
"FXid"
|
||||
"FEid"
|
||||
|
||||
# color handling
|
||||
"conv"
|
||||
"avod"
|
||||
"lumi"
|
||||
|
||||
# descriptor structure
|
||||
"obj "
|
||||
"Objc"
|
||||
"VlLs"
|
||||
"doub"
|
||||
"UntF"
|
||||
"TEXT"
|
||||
"enum"
|
||||
"long"
|
||||
"comp"
|
||||
"bool"
|
||||
"GlbO"
|
||||
"type"
|
||||
"GlbC"
|
||||
"alis"
|
||||
"tdta"
|
||||
|
||||
# reference structure
|
||||
"prop"
|
||||
"Clss"
|
||||
"Enmr"
|
||||
"rele"
|
||||
"Idnt"
|
||||
"indx"
|
||||
"name"
|
||||
|
||||
# misc
|
||||
"txtA"
|
||||
"sndA"
|
||||
"txtC"
|
||||
"sndM"
|
||||
"plcL"
|
||||
"liFD"
|
||||
"liFE"
|
||||
"lifA"
|
||||
"soLD"
|
244
dictionaries/regexp.dict
Normal file
244
dictionaries/regexp.dict
Normal file
@ -0,0 +1,244 @@
|
||||
#
|
||||
# AFL dictionary for regex
|
||||
# --------------------------
|
||||
#
|
||||
# Contains various regular expressions.
|
||||
#
|
||||
# Created by Yang Guo <yangguo@chromium.org>
|
||||
#
|
||||
# Contributed by Dhiraj Mishra <dhiraj@inputzero.io>
|
||||
#
|
||||
"()"
|
||||
"(?<!)"
|
||||
"(?<=)"
|
||||
"(?=)"
|
||||
"?"
|
||||
"[\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ ]"
|
||||
"[]"
|
||||
"\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ "
|
||||
"]"
|
||||
"{"
|
||||
"{,}"
|
||||
"{}"
|
||||
"}"
|
||||
"[\\0]"
|
||||
"[\\00011]"
|
||||
"[\\011]"
|
||||
"\\011"
|
||||
"?:\\1"
|
||||
"[\\11]"
|
||||
"\\11"
|
||||
"[\\111]"
|
||||
"\\111"
|
||||
"[\\1111]"
|
||||
"\\1111"
|
||||
"\\1112"
|
||||
"[\\118]"
|
||||
"\\118"
|
||||
"[\\11a]"
|
||||
"\\11a"
|
||||
"{12,"
|
||||
"[-123]"
|
||||
"[^123]"
|
||||
"{12,3b"
|
||||
"\\1\\2(a(?:\\1\\2))\\2)\\1"
|
||||
"\\1\\2(a(?:\\1(b\\1\\2))\\2)\\1"
|
||||
"\\1\\2(b\\1\\2))\\2)\\1"
|
||||
"\\1(a)"
|
||||
"(\\1a)"
|
||||
"(?!\\1(a\\1)\\1)\\1"
|
||||
"\\1(b\\1\\2))\\2)\\1"
|
||||
"{1z}"
|
||||
"(\\2)(\\1)"
|
||||
"\\8"
|
||||
"\\9"
|
||||
"{93}"
|
||||
"(?:a*)*"
|
||||
"(?:a*)+"
|
||||
"(?:a+)*"
|
||||
"(?:a+)+"
|
||||
"(?:a+)?"
|
||||
"(?:a?)*"
|
||||
"(?:a?)+"
|
||||
"(?:a?)?"
|
||||
"(?:a?)??"
|
||||
"(?<!a)"
|
||||
"(?<=a)"
|
||||
"(?<a>)"
|
||||
"(?<a>.)"
|
||||
"(a)"
|
||||
"a"
|
||||
"a*?"
|
||||
"a+"
|
||||
"a+?"
|
||||
"a."
|
||||
"a?"
|
||||
"a??"
|
||||
"a{"
|
||||
"a{,}"
|
||||
"a{}"
|
||||
"a$"
|
||||
"a{0}"
|
||||
"(?:a+){0,0}"
|
||||
"a{0,1}?"
|
||||
"(?=a){0,10}a"
|
||||
"(?!(a))\\1"
|
||||
"(a)\\1"
|
||||
"(a\\1)"
|
||||
"(?=a){1,10}a"
|
||||
"a{1,2}?"
|
||||
"a{12,"
|
||||
"a{12,3b"
|
||||
"a{12z}"
|
||||
"a{12za?)?"
|
||||
"(?:a{5,1000000}){3,1000000}"
|
||||
"(?=a){9,10}a"
|
||||
"(?!a)?a"
|
||||
"a[^a]"
|
||||
"a[a]"
|
||||
"(?!a)?a\\1"
|
||||
"(?:(?=a))a\\1"
|
||||
"a[a-z]"
|
||||
"(?:ab)"
|
||||
"(?:ab)+"
|
||||
"(?:ab)?"
|
||||
"(ab)"
|
||||
"a(?!b)"
|
||||
"a(?:b)"
|
||||
"a(?=b)"
|
||||
"a*b"
|
||||
"a+b"
|
||||
"a\\b!"
|
||||
"a|b"
|
||||
"a*b\\+\\|[0-9]\\|\\d{1,9}"
|
||||
"(ab)\\1"
|
||||
"(?:ab){4,7}"
|
||||
"a\\Bb"
|
||||
"a(?!bbb|bb)c"
|
||||
"a(?=bbb|bb)c"
|
||||
"ab\\b\\d\\bcd"
|
||||
"[a-b-c]"
|
||||
"a(?=b)c"
|
||||
"a*b|c"
|
||||
"a+b|c"
|
||||
"a\\bc"
|
||||
"a||bc"
|
||||
"a|bc"
|
||||
"ab|c"
|
||||
"abc"
|
||||
"abc+"
|
||||
"abc+?"
|
||||
"a[bc]d"
|
||||
"(?:ab)|cde"
|
||||
"(?:ab|cde)"
|
||||
"(ab|cde)"
|
||||
"(ab|cde)\\1"
|
||||
"abc|def"
|
||||
"abc|def|ghi"
|
||||
"a\\D"
|
||||
"a\\fb\\nc\\rd\\te\\vf"
|
||||
"(?<a>.)\\k<a>"
|
||||
"a\\n"
|
||||
"a\\nb\\bc"
|
||||
"a\\q"
|
||||
"a\\s"
|
||||
"a\\S"
|
||||
"a\\sc"
|
||||
"a\\Sc"
|
||||
"a\\w"
|
||||
"a\\W"
|
||||
"a?)"xyz{93}"
|
||||
"a{z}"
|
||||
"[a-zA-Z0-9]"
|
||||
"[\\c!]"
|
||||
"[\\c_]"
|
||||
"[\\c~]"
|
||||
"\\c!"
|
||||
"\\c"
|
||||
"\\c_"
|
||||
"\\c~"
|
||||
"[\\c1]"
|
||||
"[\\ca]"
|
||||
"[\\cA]"
|
||||
"\\cA"
|
||||
"\\cj\\cJ\\ci\\cI\\ck\\cK"
|
||||
"[\\cz]"
|
||||
"[\\cZ]"
|
||||
"/^\\d*\\./"
|
||||
"/\\d{1,2}\\/\\d{1,2}\\/\\d{4}/"
|
||||
"\\[DataMember\\((.+?)\\)\\]"
|
||||
"[\\d-\\d]"
|
||||
"[\\d-z]"
|
||||
"(?: foo )"
|
||||
"(?:foo)"
|
||||
"foo(?=bar)bar)az"
|
||||
"foo(?=bar)bar)baz"
|
||||
"foo(?!bar)baz"
|
||||
"foo(?<!bar)baz"
|
||||
"foo(?<=bar)baz"
|
||||
"foo(?=bar)baz"
|
||||
"foo|(bar|baz)|quux"
|
||||
"fo(?o(?o(?o(?=bar)baz"
|
||||
"foo[z]*"
|
||||
"\\P{Any}"
|
||||
"\\p{Changes_When_NFKC_Casefolded}"
|
||||
"\\P{Decimal_Number}"
|
||||
"\\P{gc=Decimal_Number}"
|
||||
"\\p{gc=Nd}"
|
||||
"\\p{General_Category=Decimal_Number}"
|
||||
"\\p{Nd}"
|
||||
"\\P{sc=Greek}"
|
||||
"\\p{Script_Extensions=Greek}"
|
||||
"\\p{Script=Greek}"
|
||||
"\\P{scx=Greek}"
|
||||
"\\q"
|
||||
"\\u0034"
|
||||
"\\u003z"
|
||||
"\\u0060"
|
||||
"\\u{12345}"
|
||||
"\\u{12345}*"
|
||||
"\\u{12345}{3}"
|
||||
"\\u{12345}\\u{23456}"
|
||||
"\\ud808\\udf45*"
|
||||
"[\\ud808\\udf45-\\ud809\\udccc]"
|
||||
"\\w|\\d"
|
||||
"[x]"
|
||||
"\x01"
|
||||
"\x0f"
|
||||
"\\x3z"
|
||||
"\\x60"
|
||||
"[\x8f]"
|
||||
"[\x92\xa9-\xf4\x8f\xbf\xbf]"
|
||||
"[x\\dz]"
|
||||
"[\xe2\x81\xa3]"
|
||||
"\xe2\x81\xa3"
|
||||
"\xed\xa0\x80"
|
||||
"((\xed\xa0\x80))\x02"
|
||||
"\xed\xb0\x80"
|
||||
"(\xed\xb0\x80)\x01"
|
||||
"[-\xf0\x9f\x92\xa9]+"
|
||||
"\xf0\x9f\x92\xa9"
|
||||
"[\xf0\x9f\x92\xa9-\xf4\x8f\xbf\x92\xa9-\xf4\x8f\xbf\xbf]"
|
||||
"[\xf0\x9f\x92\xa9-\xf4\x8f\xbf\xbf]"
|
||||
"^xxx$"
|
||||
"(x)(x)(x)\\1"
|
||||
"(x)(x)(x)\\1*"
|
||||
"(x)(x)(x)\\2"
|
||||
"(x)(x)(x)\\3"
|
||||
"(x)(x)(x)\\3*"
|
||||
"(x)(x)(x)\\4"
|
||||
"(x)(x)(x)\\4*"
|
||||
"(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\10"
|
||||
"(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\11"
|
||||
"[xyz]"
|
||||
"xyz?"
|
||||
"xyz??"
|
||||
"xyz{0,1}"
|
||||
"xyz{0,1}?"
|
||||
"xyz{1,}"
|
||||
"xyz{1,}?"
|
||||
"xyz{1,32}"
|
||||
"xyz{1,32}?"
|
||||
"xyz{93}"
|
||||
"{z}"
|
||||
"[z-\\d]"
|
17
dictionaries/riff.dict
Normal file
17
dictionaries/riff.dict
Normal file
@ -0,0 +1,17 @@
|
||||
# https://developers.google.com/speed/webp/docs/riff_container
|
||||
|
||||
# FourCC
|
||||
"ALPH"
|
||||
"ANIM"
|
||||
"ANMF"
|
||||
"EXIF"
|
||||
"ICCP"
|
||||
"RIFF"
|
||||
"VP8 "
|
||||
"VP8L"
|
||||
"VP8X"
|
||||
"WEBP"
|
||||
"XMP "
|
||||
|
||||
# VP8 signature
|
||||
"\x9D\x01\x2A"
|
31
dictionaries/rss.dict
Normal file
31
dictionaries/rss.dict
Normal file
@ -0,0 +1,31 @@
|
||||
# https://en.wikipedia.org/wiki/RSS
|
||||
|
||||
"<?xml version='1.0' encoding='UTF-8' ?>"
|
||||
"<rss version='2.0'>"
|
||||
"<author>"
|
||||
"<category>"
|
||||
"<channel>"
|
||||
"<cloud>"
|
||||
"<comments>"
|
||||
"<copyright>"
|
||||
"<description>"
|
||||
"<docs>"
|
||||
"<enclosure>"
|
||||
"<generator>"
|
||||
"<guid>"
|
||||
"<image>"
|
||||
"<item>"
|
||||
"<language>"
|
||||
"<lastBuildDate>"
|
||||
"<link>"
|
||||
"<managingEditor>"
|
||||
"<pubDate>"
|
||||
"<rating>"
|
||||
"<skipDays>"
|
||||
"<skipHours>"
|
||||
"<source>"
|
||||
"<textInput>"
|
||||
"<title>"
|
||||
"<ttl>"
|
||||
"<url>"
|
||||
"<webMaster>"
|
21
dictionaries/rst.dict
Normal file
21
dictionaries/rst.dict
Normal file
@ -0,0 +1,21 @@
|
||||
# https://docutils.readthedocs.io/en/sphinx-docs/ref/rst/restructuredtext.html
|
||||
|
||||
bold="**"
|
||||
list1="1. "
|
||||
list2="(1) "
|
||||
list3="1) "
|
||||
list4="I. "
|
||||
list5="i. "
|
||||
list6="* "
|
||||
list7="- "
|
||||
list8="+ "
|
||||
end_of_paragraph="::"
|
||||
title="====="
|
||||
image=".. image:: "
|
||||
image_attr=" :a: 1"
|
||||
doctest=">>>"
|
||||
table1="+--+""
|
||||
table2="+==+""
|
||||
footnote_and_citation=".. [a] "
|
||||
hyperlink=".. _a: http://a "
|
||||
macro=".. |b| a"
|
419
dictionaries/rtf.dict
Normal file
419
dictionaries/rtf.dict
Normal file
@ -0,0 +1,419 @@
|
||||
# http://latex2rtf.sourceforge.net/RTF-Spec-1.0.txt
|
||||
|
||||
# charset
|
||||
"\\ansi"
|
||||
"\\mac"
|
||||
"\\pca"
|
||||
|
||||
# font table
|
||||
"\\fnil"
|
||||
"\\fswiss"
|
||||
"\\fmodern"
|
||||
"\\fscript"
|
||||
"\\fdecor"
|
||||
"\\ftech"
|
||||
|
||||
|
||||
# stylesheet
|
||||
"\\sbasedon"
|
||||
"\\snext"
|
||||
"\\keycode"
|
||||
|
||||
|
||||
# colors
|
||||
"\\red"
|
||||
"\\green"
|
||||
"\\blue"
|
||||
"\\cf"
|
||||
"\\cb"
|
||||
|
||||
# pictures
|
||||
"\\macpict"
|
||||
"\\pmmetafile"
|
||||
"\\wmetafile"
|
||||
"\\dibitmap"
|
||||
"\\wbitmap"
|
||||
"\\wbmbitspixel"
|
||||
"\\wbmplanes"
|
||||
"\\wbmwidthbytes"
|
||||
"\\picw"
|
||||
"\\pich"
|
||||
"\\picwgoal"
|
||||
"\\pichgoal"
|
||||
"\\picscaley"
|
||||
"\\picscaled"
|
||||
"\\piccropt"
|
||||
"\\piccropb"
|
||||
"\\piccropl"
|
||||
"\\piccropr"
|
||||
"\\brdrs"
|
||||
"\\brdrdb"
|
||||
"\\brdrth"
|
||||
"\\brdrsh"
|
||||
"\\brdrdot"
|
||||
"\\brdrhair"
|
||||
"\\brdrw"
|
||||
"\\brdrcf"
|
||||
"\\shading"
|
||||
"\\bghoriz"
|
||||
"\\bgvert"
|
||||
"\\bgfdiag"
|
||||
"\\bgbdiag"
|
||||
"\\bgcross"
|
||||
"\\bgdcross"
|
||||
"\\bgdkhoriz"
|
||||
"\\bgdkvert"
|
||||
"\\bgdkfdiag"
|
||||
"\\bgdkbdiag"
|
||||
"\\bgdkcross"
|
||||
"\\bgdkdcross"
|
||||
"\\cfpat"
|
||||
"\\cbpat"
|
||||
"\\bin"
|
||||
"MM_TEXT"
|
||||
"MM_LOMETRIC"
|
||||
"MM_HIMETRIC"
|
||||
"MM_LOENGLISH"
|
||||
"MM_HIENGLISH"
|
||||
"MM_TWIPS"
|
||||
"MM_ISOTROPIC"
|
||||
"MM_ANISOTROPIC"
|
||||
"PU_ARBITRARY"
|
||||
"PU_PELS"
|
||||
"PU_LOMETRIC"
|
||||
"PU_HIMETRIC"
|
||||
"PU_LOENGLISH"
|
||||
"PU_HIENGLISH"
|
||||
"PU_TWIPS"
|
||||
|
||||
# headers and gooters
|
||||
"\headerr"
|
||||
"\headerf"
|
||||
"\footerl"
|
||||
"\footerr"
|
||||
"\footerf"
|
||||
|
||||
# misc
|
||||
"\\chftn"
|
||||
"\\*\\footnote"
|
||||
"\\*\\annotation"
|
||||
"\\bxe"
|
||||
"\\ixe"
|
||||
"\\tcf"
|
||||
"\\tcl"
|
||||
"\\*\\bkmkstart"
|
||||
"\\*\\bkmkend"
|
||||
|
||||
# metadata
|
||||
"\\title"
|
||||
"\\subject"
|
||||
"\\author"
|
||||
"\\operator"
|
||||
"\\keywords"
|
||||
"\\comment"
|
||||
"\\version"
|
||||
"\\doccomm"
|
||||
"\\vern"
|
||||
"\\creatim"
|
||||
"\\revtim"
|
||||
"\\printim"
|
||||
"\\buptim"
|
||||
"\\edmins"
|
||||
"\\yr"
|
||||
"\\mo"
|
||||
"\\dy"
|
||||
"\\hr"
|
||||
"\\min"
|
||||
"\\nofpages"
|
||||
"\\nofwords"
|
||||
"\\nofchars"
|
||||
"\\id"
|
||||
"\\flddirty"
|
||||
"\\fldedit"
|
||||
"\\fldlock"
|
||||
"\\fldpriv"
|
||||
|
||||
# objects
|
||||
"\\objemb"
|
||||
"\\objlink"
|
||||
"\\objautlink"
|
||||
"\\objsub"
|
||||
"\\objicemb"
|
||||
"\\linkself"
|
||||
"\\objlock"
|
||||
"\\objclass"
|
||||
"\\objname"
|
||||
"\\objh"
|
||||
"\\objw"
|
||||
"\\objsetsize"
|
||||
"\\objtransy"
|
||||
"\\objcropt"
|
||||
"\\objcropb"
|
||||
"\\objcropl"
|
||||
"\\objcropr"
|
||||
"\\objscalex"
|
||||
"\\objscaley"
|
||||
"\\objdata"
|
||||
"\\objalias"
|
||||
"\\objsect"
|
||||
"\\rsltrtf"
|
||||
"\\rsltpict"
|
||||
"\\rsltbmp"
|
||||
"\\rslttxt"
|
||||
"\\rsltmerge"
|
||||
"\\result"
|
||||
|
||||
# macintosh editor
|
||||
"\\bkmkpub"
|
||||
"\\pubauto"
|
||||
"\\objalias"
|
||||
"\\objsect"
|
||||
|
||||
# formating
|
||||
"\\deftab"
|
||||
"\\hyphhotz"
|
||||
"\\linestart"
|
||||
"\\fracwidth"
|
||||
"\\*\nextfile"
|
||||
"\\*\template"
|
||||
"\\makebackup"
|
||||
"\\defformat"
|
||||
"\\psover"
|
||||
"\\deflang"
|
||||
"\\ftnsep"
|
||||
"\\ftnsepc"
|
||||
"\\ftncn"
|
||||
"\\endnotes"
|
||||
"\\enddoc"
|
||||
"\\ftntj"
|
||||
"\\ftnbj"
|
||||
"\\ftnstart"
|
||||
"\\ftnrestart"
|
||||
"\\paperw"
|
||||
"\\paperh"
|
||||
"\\margl"
|
||||
"\\margr"
|
||||
"\\margt"
|
||||
"\\margb"
|
||||
"\\facingp"
|
||||
"\\gutter"
|
||||
"\\margmirror"
|
||||
"\\landscape"
|
||||
"\\pgnstart"
|
||||
"\\widowctrl"
|
||||
"\\revisions"
|
||||
"\\revprop"
|
||||
"\\revbar"
|
||||
"\\sectd"
|
||||
"\\endnhere"
|
||||
"\\binfsxn"
|
||||
"\\binsxn"
|
||||
"\\sbknone"
|
||||
"\\sbkcol"
|
||||
"\\sbkpage"
|
||||
"\\sbkeven"
|
||||
"\\sbkodd"
|
||||
"\\cols"
|
||||
"\\colsx"
|
||||
"\\linebetcol"
|
||||
"\\linemod"
|
||||
"\\linex"
|
||||
"\\linestarts"
|
||||
"\\linerestart"
|
||||
"\\lineppage"
|
||||
"\\linecont"
|
||||
"\\pgwsxn"
|
||||
"\\pghsxn"
|
||||
"\\marglsxn"
|
||||
"\\margrsxn"
|
||||
"\\margtsxn"
|
||||
"\\margbsxn"
|
||||
"\\guttersxn"
|
||||
"\\lndscpsxn"
|
||||
"\\titlepg"
|
||||
"\\headery"
|
||||
"\\footery"
|
||||
"\\pgnstarts"
|
||||
"\\pgncont"
|
||||
"\\pgnrestart"
|
||||
"\\pgnx"
|
||||
"\\pgny"
|
||||
"\\pgndec"
|
||||
"\\pgnucrm"
|
||||
"\\pgnlcrm"
|
||||
"\\pgnucltr"
|
||||
"\\pgnlcltr"
|
||||
"\\vertalt"
|
||||
"\\vertal"
|
||||
"\\vertalc"
|
||||
"\\vertalj"
|
||||
"\\pard"
|
||||
"\\s"
|
||||
"\\intbl"
|
||||
"\\keep"
|
||||
"\\keepn"
|
||||
"\\noline"
|
||||
"\\pagebb"
|
||||
"\\sbys"
|
||||
"\\ql"
|
||||
"\\qr"
|
||||
"\\qj"
|
||||
"\\qc"
|
||||
"\\fi"
|
||||
"\\li"
|
||||
"\\ri"
|
||||
"\\sb"
|
||||
"\\sa"
|
||||
"\\sl"
|
||||
"\\tx"
|
||||
"\\tqr"
|
||||
"\\tqc"
|
||||
"\\tqdec"
|
||||
"\\tb"
|
||||
"\\tldot"
|
||||
"\\tlhyph"
|
||||
"\\tlul"
|
||||
"\\tlth"
|
||||
"\\tleq"
|
||||
"\\brdrt"
|
||||
"\\brdrb"
|
||||
"\\brdrl"
|
||||
"\\brdrr"
|
||||
"\\brdrbtw"
|
||||
"\\brdrbar"
|
||||
"\\box"
|
||||
"\\brdrs"
|
||||
"\\brdrth"
|
||||
"\\brdrsh"
|
||||
"\\brdrdb"
|
||||
"\\brdrdot"
|
||||
"\\brdrhair"
|
||||
"\\brdrw"
|
||||
"\\brdrcf"
|
||||
"\\brsp"
|
||||
"\\shading"
|
||||
"\\bghoriz"
|
||||
"\\bgvert"
|
||||
"\\bgfdiag"
|
||||
"\\bgbdiag"
|
||||
"\\bgcross"
|
||||
"\\bgdcross"
|
||||
"\\bgdkhoriz"
|
||||
"\\bgdkvert"
|
||||
"\\bgdkfdiag"
|
||||
"\\bgdkbdiag"
|
||||
"\\bgdkcross"
|
||||
"\\bgdkdcross"
|
||||
"\\cfpat"
|
||||
"\\cbpat"
|
||||
"\\absw"
|
||||
"\\absh"
|
||||
"\\phmrg"
|
||||
"\\phpg"
|
||||
"\\phcol"
|
||||
"\\posx"
|
||||
"\\posxc"
|
||||
"\\posxi"
|
||||
"\\posxo"
|
||||
"\\posxr"
|
||||
"\\posxl"
|
||||
"\\pvmrg"
|
||||
"\\pvpg"
|
||||
"\\pvpara"
|
||||
"\\posy"
|
||||
"\\posyil"
|
||||
"\\posyt"
|
||||
"\\posyc"
|
||||
"\\posyb"
|
||||
"\\dxfrtext"
|
||||
"\\dyfrtext"
|
||||
|
||||
#tables
|
||||
"\\trowd"
|
||||
"\\trgaph"
|
||||
"\\cellx"
|
||||
"\\clmgf"
|
||||
"\\clmrg"
|
||||
"\\clbrdrt"
|
||||
"\\clbrdrl"
|
||||
"\\clbrdrr"
|
||||
"\\trql"
|
||||
"\\trqr"
|
||||
"\\trqc"
|
||||
"\\trleft"
|
||||
"\\trrh"
|
||||
"\\clshdng"
|
||||
"\\clbghoriz"
|
||||
"\\clbgvert"
|
||||
"\\clbgfdiag"
|
||||
"\\clbgbdiag"
|
||||
"\\clbgcross"
|
||||
"\\clbgdcross"
|
||||
"\\clbgdkhor"
|
||||
"\\clbgdkvert"
|
||||
"\\clbgdkfdiag"
|
||||
"\\clbgdkbdiag"
|
||||
"\\clbgdkcross"
|
||||
"\\clbgdkdcross"
|
||||
"\\clcfpat"
|
||||
"\\clcbpat"
|
||||
|
||||
# char format
|
||||
"\\plain"
|
||||
"\\b"
|
||||
"\\caps"
|
||||
"\\deleted"
|
||||
"\\dn"
|
||||
"\\expnd"
|
||||
"\\f"
|
||||
"\\fs"
|
||||
"\\i"
|
||||
"\\outl"
|
||||
"\\revised"
|
||||
"\\scaps"
|
||||
"\\shad"
|
||||
"\\strike"
|
||||
"\\ul"
|
||||
"\\uld"
|
||||
"\\uldb"
|
||||
"\\ulnone"
|
||||
"\\ulw"
|
||||
"\\up"
|
||||
"\\v"
|
||||
"\\lang"
|
||||
|
||||
# special chars
|
||||
"\\chdate"
|
||||
"\\chdpl"
|
||||
"\\chdpa"
|
||||
"\\chtime"
|
||||
"\\chpgn"
|
||||
"\\chftn"
|
||||
"\\chatn"
|
||||
"\\chftnsep"
|
||||
"\\chftnsepc"
|
||||
"\\cell"
|
||||
"\\row"
|
||||
"\\par"
|
||||
"\\sect"
|
||||
"\\page"
|
||||
"\\column"
|
||||
"\\line"
|
||||
"\\tab"
|
||||
"\\emdash"
|
||||
"\\endash"
|
||||
"\\bullet"
|
||||
"\\lquote"
|
||||
"\\rquote"
|
||||
"\\ldblquote"
|
||||
"\\rdblquote"
|
||||
"\\|"
|
||||
"\\~"
|
||||
"\\-"
|
||||
"\\_"
|
||||
"\\:"
|
||||
"\\*"
|
||||
"\\'hh"
|
||||
"\\alt"
|
||||
"\\shift"
|
||||
"\\ctrl"
|
37
dictionaries/sas.dict
Normal file
37
dictionaries/sas.dict
Normal file
@ -0,0 +1,37 @@
|
||||
" "
|
||||
"#"
|
||||
"$"
|
||||
"$CHAR"
|
||||
"%LET"
|
||||
"("
|
||||
")"
|
||||
"*/"
|
||||
"/*"
|
||||
";"
|
||||
"@"
|
||||
"ATTRIB"
|
||||
"CLEAR"
|
||||
"CONTENTS"
|
||||
"DATA"
|
||||
"DATE"
|
||||
"FILENAME"
|
||||
"FOOTNOTE"
|
||||
"FORMAT"
|
||||
"IF"
|
||||
"INFILE"
|
||||
"INPUT"
|
||||
"INVALUE"
|
||||
"LABEL"
|
||||
"LENGTH"
|
||||
"LIBNAME"
|
||||
"LIST"
|
||||
"MISSING"
|
||||
"OPTIONS"
|
||||
"OTHER"
|
||||
"PRINT"
|
||||
"PROC"
|
||||
"RUN"
|
||||
"VALUE"
|
||||
"_ALL_"
|
||||
"dlm"
|
||||
"firstobs"
|
46
dictionaries/spss.dict
Normal file
46
dictionaries/spss.dict
Normal file
@ -0,0 +1,46 @@
|
||||
"("
|
||||
"(NOMINAL)"
|
||||
"(ORDINAL)"
|
||||
"(SCALE)"
|
||||
")"
|
||||
"."
|
||||
"/"
|
||||
"/VARIABLES"
|
||||
"="
|
||||
" "
|
||||
"A"
|
||||
"ADATE"
|
||||
"COMMENT"
|
||||
"DATA"
|
||||
"DATASET"
|
||||
"DATE"
|
||||
"DELIMITERS"
|
||||
"DICTIONARY"
|
||||
"DISPLAY"
|
||||
"END"
|
||||
"EXECUTE"
|
||||
"F"
|
||||
"FILE"
|
||||
"FIRSTCASE"
|
||||
"FIXED"
|
||||
"FORMATS"
|
||||
"HANDLE"
|
||||
"IF"
|
||||
"INPUT"
|
||||
"LABEL"
|
||||
"LABELS"
|
||||
"LEVEL"
|
||||
"LIST"
|
||||
"NAME"
|
||||
"OUTFILE"
|
||||
"PROGRAM"
|
||||
"RECODE"
|
||||
"RECORD"
|
||||
"SAVE"
|
||||
"SELECT"
|
||||
"SET"
|
||||
"SYSMIS"
|
||||
"TABLE"
|
||||
"VALUE"
|
||||
"VARIABLE"
|
||||
"WINDOW"
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user