xref: /aosp_15_r20/external/AFLplusplus/include/cmplog.h (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker /*
2*08b48e0bSAndroid Build Coastguard Worker    american fuzzy lop++ - cmplog header
3*08b48e0bSAndroid Build Coastguard Worker    ------------------------------------
4*08b48e0bSAndroid Build Coastguard Worker 
5*08b48e0bSAndroid Build Coastguard Worker    Originally written by Michal Zalewski
6*08b48e0bSAndroid Build Coastguard Worker 
7*08b48e0bSAndroid Build Coastguard Worker    Forkserver design by Jann Horn <[email protected]>
8*08b48e0bSAndroid Build Coastguard Worker 
9*08b48e0bSAndroid Build Coastguard Worker    Now maintained by Marc Heuse <[email protected]>,
10*08b48e0bSAndroid Build Coastguard Worker                      Heiko Eißfeldt <[email protected]>,
11*08b48e0bSAndroid Build Coastguard Worker                      Andrea Fioraldi <[email protected]>,
12*08b48e0bSAndroid Build Coastguard Worker                      Dominik Maier <[email protected]>
13*08b48e0bSAndroid Build Coastguard Worker 
14*08b48e0bSAndroid Build Coastguard Worker    Copyright 2016, 2017 Google Inc. All rights reserved.
15*08b48e0bSAndroid Build Coastguard Worker    Copyright 2019-2024 AFLplusplus Project. All rights reserved.
16*08b48e0bSAndroid Build Coastguard Worker 
17*08b48e0bSAndroid Build Coastguard Worker    Licensed under the Apache License, Version 2.0 (the "License");
18*08b48e0bSAndroid Build Coastguard Worker    you may not use this file except in compliance with the License.
19*08b48e0bSAndroid Build Coastguard Worker    You may obtain a copy of the License at:
20*08b48e0bSAndroid Build Coastguard Worker 
21*08b48e0bSAndroid Build Coastguard Worker      https://www.apache.org/licenses/LICENSE-2.0
22*08b48e0bSAndroid Build Coastguard Worker 
23*08b48e0bSAndroid Build Coastguard Worker    Shared code to handle the shared memory. This is used by the fuzzer
24*08b48e0bSAndroid Build Coastguard Worker    as well the other components like afl-tmin, afl-showmap, etc...
25*08b48e0bSAndroid Build Coastguard Worker 
26*08b48e0bSAndroid Build Coastguard Worker  */
27*08b48e0bSAndroid Build Coastguard Worker 
28*08b48e0bSAndroid Build Coastguard Worker #ifndef _AFL_CMPLOG_H
29*08b48e0bSAndroid Build Coastguard Worker #define _AFL_CMPLOG_H
30*08b48e0bSAndroid Build Coastguard Worker 
31*08b48e0bSAndroid Build Coastguard Worker #include "config.h"
32*08b48e0bSAndroid Build Coastguard Worker 
33*08b48e0bSAndroid Build Coastguard Worker #define CMPLOG_LVL_MAX 3
34*08b48e0bSAndroid Build Coastguard Worker 
35*08b48e0bSAndroid Build Coastguard Worker #define CMP_MAP_W 65536
36*08b48e0bSAndroid Build Coastguard Worker #define CMP_MAP_H 32
37*08b48e0bSAndroid Build Coastguard Worker #define CMP_MAP_RTN_H (CMP_MAP_H / 2)
38*08b48e0bSAndroid Build Coastguard Worker 
39*08b48e0bSAndroid Build Coastguard Worker #define SHAPE_BYTES(x) (x + 1)
40*08b48e0bSAndroid Build Coastguard Worker 
41*08b48e0bSAndroid Build Coastguard Worker #define CMP_TYPE_INS 1
42*08b48e0bSAndroid Build Coastguard Worker #define CMP_TYPE_RTN 2
43*08b48e0bSAndroid Build Coastguard Worker 
44*08b48e0bSAndroid Build Coastguard Worker struct cmp_header {
45*08b48e0bSAndroid Build Coastguard Worker 
46*08b48e0bSAndroid Build Coastguard Worker   unsigned hits : 24;
47*08b48e0bSAndroid Build Coastguard Worker   unsigned id : 24;
48*08b48e0bSAndroid Build Coastguard Worker   unsigned shape : 5;
49*08b48e0bSAndroid Build Coastguard Worker   unsigned type : 2;
50*08b48e0bSAndroid Build Coastguard Worker   unsigned attribute : 4;
51*08b48e0bSAndroid Build Coastguard Worker   unsigned overflow : 1;
52*08b48e0bSAndroid Build Coastguard Worker   unsigned reserved : 4;
53*08b48e0bSAndroid Build Coastguard Worker 
54*08b48e0bSAndroid Build Coastguard Worker } __attribute__((packed));
55*08b48e0bSAndroid Build Coastguard Worker 
56*08b48e0bSAndroid Build Coastguard Worker struct cmp_operands {
57*08b48e0bSAndroid Build Coastguard Worker 
58*08b48e0bSAndroid Build Coastguard Worker   u64 v0;
59*08b48e0bSAndroid Build Coastguard Worker   u64 v1;
60*08b48e0bSAndroid Build Coastguard Worker   u64 v0_128;
61*08b48e0bSAndroid Build Coastguard Worker   u64 v1_128;
62*08b48e0bSAndroid Build Coastguard Worker 
63*08b48e0bSAndroid Build Coastguard Worker } __attribute__((packed));
64*08b48e0bSAndroid Build Coastguard Worker 
65*08b48e0bSAndroid Build Coastguard Worker struct cmpfn_operands {
66*08b48e0bSAndroid Build Coastguard Worker 
67*08b48e0bSAndroid Build Coastguard Worker   u8 v0[31];
68*08b48e0bSAndroid Build Coastguard Worker   u8 v0_len;
69*08b48e0bSAndroid Build Coastguard Worker   u8 v1[31];
70*08b48e0bSAndroid Build Coastguard Worker   u8 v1_len;
71*08b48e0bSAndroid Build Coastguard Worker 
72*08b48e0bSAndroid Build Coastguard Worker } __attribute__((packed));
73*08b48e0bSAndroid Build Coastguard Worker 
74*08b48e0bSAndroid Build Coastguard Worker typedef struct cmp_operands cmp_map_list[CMP_MAP_H];
75*08b48e0bSAndroid Build Coastguard Worker 
76*08b48e0bSAndroid Build Coastguard Worker struct cmp_map {
77*08b48e0bSAndroid Build Coastguard Worker 
78*08b48e0bSAndroid Build Coastguard Worker   struct cmp_header   headers[CMP_MAP_W];
79*08b48e0bSAndroid Build Coastguard Worker   struct cmp_operands log[CMP_MAP_W][CMP_MAP_H];
80*08b48e0bSAndroid Build Coastguard Worker 
81*08b48e0bSAndroid Build Coastguard Worker };
82*08b48e0bSAndroid Build Coastguard Worker 
83*08b48e0bSAndroid Build Coastguard Worker /* Execs the child */
84*08b48e0bSAndroid Build Coastguard Worker 
85*08b48e0bSAndroid Build Coastguard Worker struct afl_forkserver;
86*08b48e0bSAndroid Build Coastguard Worker void cmplog_exec_child(struct afl_forkserver *fsrv, char **argv);
87*08b48e0bSAndroid Build Coastguard Worker 
88*08b48e0bSAndroid Build Coastguard Worker #endif
89*08b48e0bSAndroid Build Coastguard Worker 
90