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