-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtracebb.h
54 lines (44 loc) · 1.33 KB
/
tracebb.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef TRACEBB_H
#define TRACEBB_H
#include "shadow.h"
#include "instructions.h"
#include "resultvector.h"
#include <vector>
#include <set>
#include <unordered_map>
#include <atomic>
extern atomic<unsigned> instructionCount;
extern unordered_map<ADDRINT,instructionLocationsData > instructionLocations;
extern list<long long> loopStack;
struct ExecutionContex
{
vector<pair<ADDRINT,UINT32> > addrs;
vector<bool> pred;
};
class BBData
{
vector<instructionLocationsData> instructions;
set<ADDRINT> successors;
int execution_count;
public:
USIZE expected_num_ins;
BBData();
BBData(const BBData& s);
~BBData();
BBData& operator=(const BBData& s);
BBData& operator=(BBData&& rhs);
void swap(BBData &s);
VOID pushInstruction(const instructionLocationsData *ins);
VOID printBlock(FILE *out);
#ifdef NOSHAODWCACHE
VOID execute(ExecutionContex &contexts, ShadowMemoryNoCache &shadowMemory, ShadowRegisters ®isters, unordered_map<ADDRINT, ResultVector > &instructionResults, FILE *out);
#else
VOID execute(ExecutionContex &contexts, ShadowMemory &shadowMemory, ShadowRegisters ®isters, unordered_map<ADDRINT, ResultVector > &instructionResults, FILE *out);
#endif
VOID addSuccessors(ADDRINT successor);
vector<ADDRINT> getAddrs();
int getNumSuccessors() const;
int getNumInstuructions() const;
int getNumExecution() const;
};
#endif