svf-tools 1.0.892 → 1.0.894
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/AbstractExecution_8cpp.html +3 -3
- package/SVF-doxygen/html/AbstractExecution_8cpp_source.html +1746 -1753
- package/SVF-doxygen/html/AbstractExecution_8h.html +0 -2
- package/SVF-doxygen/html/AbstractExecution_8h_source.html +284 -335
- package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +773 -791
- package/SVF-doxygen/html/BufOverflowChecker_8h.html +0 -2
- package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +48 -81
- package/SVF-doxygen/html/ae_8cpp.html +16 -19
- package/SVF-doxygen/html/ae_8cpp_source.html +16 -19
- package/SVF-doxygen/html/annotated.html +434 -436
- package/SVF-doxygen/html/classSVF_1_1AEStat.html +168 -168
- package/SVF-doxygen/html/classSVF_1_1AbstractExecution-members.html +49 -24
- package/SVF-doxygen/html/classSVF_1_1AbstractExecution.html +2533 -1041
- package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +71 -41
- package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +777 -63
- package/SVF-doxygen/html/classes.html +418 -421
- package/SVF-doxygen/html/functions.html +8 -12
- package/SVF-doxygen/html/functions_a.html +10 -11
- package/SVF-doxygen/html/functions_b.html +5 -9
- package/SVF-doxygen/html/functions_c.html +26 -28
- package/SVF-doxygen/html/functions_d.html +2 -2
- package/SVF-doxygen/html/functions_e.html +2 -2
- package/SVF-doxygen/html/functions_enum.html +1 -1
- package/SVF-doxygen/html/functions_eval_m.html +2 -2
- package/SVF-doxygen/html/functions_eval_s.html +2 -2
- package/SVF-doxygen/html/functions_eval_u.html +1 -1
- package/SVF-doxygen/html/functions_func.html +9 -12
- package/SVF-doxygen/html/functions_func_b.html +2 -5
- package/SVF-doxygen/html/functions_func_c.html +25 -27
- package/SVF-doxygen/html/functions_func_d.html +2 -2
- package/SVF-doxygen/html/functions_func_g.html +15 -16
- package/SVF-doxygen/html/functions_func_h.html +6 -6
- package/SVF-doxygen/html/functions_func_i.html +9 -13
- package/SVF-doxygen/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/functions_func_s.html +19 -20
- package/SVF-doxygen/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/functions_func_~.html +0 -3
- package/SVF-doxygen/html/functions_g.html +21 -22
- package/SVF-doxygen/html/functions_h.html +6 -6
- package/SVF-doxygen/html/functions_i.html +15 -19
- package/SVF-doxygen/html/functions_l.html +5 -5
- package/SVF-doxygen/html/functions_m.html +2 -2
- package/SVF-doxygen/html/functions_o.html +15 -15
- package/SVF-doxygen/html/functions_p.html +13 -13
- package/SVF-doxygen/html/functions_r.html +4 -2
- package/SVF-doxygen/html/functions_s.html +21 -22
- package/SVF-doxygen/html/functions_t.html +5 -5
- package/SVF-doxygen/html/functions_type_c.html +1 -1
- package/SVF-doxygen/html/functions_u.html +1 -1
- package/SVF-doxygen/html/functions_vars.html +8 -12
- package/SVF-doxygen/html/functions_vars_b.html +0 -3
- package/SVF-doxygen/html/functions_w.html +7 -13
- package/SVF-doxygen/html/functions_~.html +0 -3
- package/SVF-doxygen/html/hierarchy.html +629 -631
- package/SVF-doxygen/html/namespaceSVF.html +5 -9
- package/SVF-doxygen/html/search/all_0.js +11 -11
- package/SVF-doxygen/html/search/all_1.js +5 -5
- package/SVF-doxygen/html/search/all_10.js +325 -325
- package/SVF-doxygen/html/search/all_11.js +226 -226
- package/SVF-doxygen/html/search/all_12.js +570 -570
- package/SVF-doxygen/html/search/all_13.js +207 -207
- package/SVF-doxygen/html/search/all_14.js +70 -70
- package/SVF-doxygen/html/search/all_15.js +176 -176
- package/SVF-doxygen/html/search/all_16.js +77 -77
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +26 -26
- package/SVF-doxygen/html/search/all_1a.js +179 -180
- package/SVF-doxygen/html/search/all_2.js +65 -66
- package/SVF-doxygen/html/search/all_3.js +640 -640
- package/SVF-doxygen/html/search/all_4.js +235 -235
- package/SVF-doxygen/html/search/all_5.js +126 -126
- package/SVF-doxygen/html/search/all_6.js +232 -232
- package/SVF-doxygen/html/search/all_7.js +1047 -1047
- package/SVF-doxygen/html/search/all_8.js +215 -215
- package/SVF-doxygen/html/search/all_9.js +629 -630
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +115 -115
- package/SVF-doxygen/html/search/all_d.js +204 -204
- package/SVF-doxygen/html/search/all_e.js +209 -209
- package/SVF-doxygen/html/search/all_f.js +122 -122
- package/SVF-doxygen/html/search/classes_0.js +28 -29
- package/SVF-doxygen/html/search/classes_1.js +11 -12
- package/SVF-doxygen/html/search/classes_10.js +74 -74
- package/SVF-doxygen/html/search/classes_11.js +14 -14
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +19 -19
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +73 -73
- package/SVF-doxygen/html/search/classes_3.js +35 -35
- package/SVF-doxygen/html/search/classes_4.js +8 -8
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +98 -98
- package/SVF-doxygen/html/search/classes_7.js +38 -38
- package/SVF-doxygen/html/search/classes_8.js +59 -59
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +19 -19
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +3 -3
- package/SVF-doxygen/html/search/defines_10.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/search/defines_4.js +3 -3
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +4 -4
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +8 -8
- package/SVF-doxygen/html/search/defines_f.js +4 -4
- package/SVF-doxygen/html/search/enums_0.js +4 -4
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +4 -4
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_1.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +47 -47
- package/SVF-doxygen/html/search/files_0.js +16 -16
- package/SVF-doxygen/html/search/files_1.js +9 -9
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +53 -53
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +10 -10
- package/SVF-doxygen/html/search/files_7.js +17 -17
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +4 -4
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +13 -13
- package/SVF-doxygen/html/search/functions_1.js +368 -369
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +140 -140
- package/SVF-doxygen/html/search/functions_12.js +299 -299
- package/SVF-doxygen/html/search/functions_13.js +73 -73
- package/SVF-doxygen/html/search/functions_14.js +41 -41
- package/SVF-doxygen/html/search/functions_15.js +72 -72
- package/SVF-doxygen/html/search/functions_16.js +38 -38
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +179 -180
- package/SVF-doxygen/html/search/functions_2.js +94 -95
- package/SVF-doxygen/html/search/functions_3.js +261 -261
- package/SVF-doxygen/html/search/functions_4.js +84 -84
- package/SVF-doxygen/html/search/functions_5.js +57 -57
- package/SVF-doxygen/html/search/functions_6.js +65 -65
- package/SVF-doxygen/html/search/functions_7.js +863 -863
- package/SVF-doxygen/html/search/functions_8.js +162 -162
- package/SVF-doxygen/html/search/functions_9.js +438 -439
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +25 -25
- package/SVF-doxygen/html/search/functions_d.js +82 -82
- package/SVF-doxygen/html/search/functions_e.js +36 -36
- package/SVF-doxygen/html/search/functions_f.js +58 -58
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +4 -4
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +5 -5
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +2 -2
- package/SVF-doxygen/html/search/related_d.js +12 -12
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_0.js +19 -19
- package/SVF-doxygen/html/search/typedefs_1.js +27 -27
- package/SVF-doxygen/html/search/typedefs_10.js +63 -63
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +40 -40
- package/SVF-doxygen/html/search/typedefs_14.js +11 -11
- package/SVF-doxygen/html/search/typedefs_2.js +125 -125
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +42 -42
- package/SVF-doxygen/html/search/typedefs_6.js +54 -54
- package/SVF-doxygen/html/search/typedefs_7.js +47 -47
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +177 -177
- package/SVF-doxygen/html/search/variables_1.js +76 -76
- package/SVF-doxygen/html/search/variables_10.js +98 -98
- package/SVF-doxygen/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/search/variables_12.js +93 -93
- package/SVF-doxygen/html/search/variables_13.js +76 -76
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +49 -49
- package/SVF-doxygen/html/search/variables_16.js +11 -11
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +17 -17
- package/SVF-doxygen/html/search/variables_2.js +40 -41
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +51 -51
- package/SVF-doxygen/html/search/variables_5.js +39 -39
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +34 -34
- package/SVF-doxygen/html/search/variables_8.js +8 -8
- package/SVF-doxygen/html/search/variables_9.js +79 -79
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +57 -57
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +31 -31
- package/package.json +1 -1
- package/setup.sh +1 -1
- package/svf/include/AE/Svfexe/AbstractExecution.h +55 -102
- package/svf/include/AE/Svfexe/BufOverflowChecker.h +12 -33
- package/svf/lib/AE/Svfexe/AbstractExecution.cpp +59 -64
- package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +44 -59
- package/svf-llvm/tools/AE/ae.cpp +1 -2
|
@@ -43,10 +43,6 @@ class ExeState;
|
|
|
43
43
|
|
|
44
44
|
template<typename T> class FILOWorkList;
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
46
|
enum class AEKind
|
|
51
47
|
{
|
|
52
48
|
AbstractExecution,
|
|
@@ -58,7 +54,7 @@ class AEStat : public SVFStat
|
|
|
58
54
|
{
|
|
59
55
|
public:
|
|
60
56
|
void countStateSize();
|
|
61
|
-
AEStat(AbstractExecution
|
|
57
|
+
AEStat(AbstractExecution* ae) : _ae(ae)
|
|
62
58
|
{
|
|
63
59
|
startTime = getClk(true);
|
|
64
60
|
}
|
|
@@ -76,7 +72,7 @@ public:
|
|
|
76
72
|
void reportBug();
|
|
77
73
|
|
|
78
74
|
public:
|
|
79
|
-
AbstractExecution
|
|
75
|
+
AbstractExecution* _ae;
|
|
80
76
|
s32_t count{0};
|
|
81
77
|
std::string memory_usage;
|
|
82
78
|
std::string memUsage;
|
|
@@ -107,7 +103,6 @@ public:
|
|
|
107
103
|
}
|
|
108
104
|
return generalNumMap["ICFG_Node_Trace"];
|
|
109
105
|
}
|
|
110
|
-
|
|
111
106
|
};
|
|
112
107
|
|
|
113
108
|
class AbstractExecution
|
|
@@ -116,12 +111,11 @@ class AbstractExecution
|
|
|
116
111
|
friend class AEAPI;
|
|
117
112
|
|
|
118
113
|
public:
|
|
119
|
-
|
|
114
|
+
enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
|
|
115
|
+
typedef SCCDetection<PTACallGraph*> CallGraphSCC;
|
|
120
116
|
/// Constructor
|
|
121
117
|
AbstractExecution();
|
|
122
118
|
|
|
123
|
-
virtual void initExtAPI();
|
|
124
|
-
|
|
125
119
|
virtual void runOnModule(ICFG* icfg);
|
|
126
120
|
|
|
127
121
|
/// Destructor
|
|
@@ -153,7 +147,7 @@ protected:
|
|
|
153
147
|
* @param node The ICFGNode to analyse
|
|
154
148
|
* @return if this node has preceding execution state
|
|
155
149
|
*/
|
|
156
|
-
bool hasInEdgesES(const ICFGNode
|
|
150
|
+
bool hasInEdgesES(const ICFGNode* node);
|
|
157
151
|
|
|
158
152
|
/**
|
|
159
153
|
* Check if execution state exist at the branch edge
|
|
@@ -175,7 +169,7 @@ protected:
|
|
|
175
169
|
*
|
|
176
170
|
* @param node ICFGNode which has a single instruction
|
|
177
171
|
*/
|
|
178
|
-
virtual void handleICFGNode(const ICFGNode
|
|
172
|
+
virtual void handleICFGNode(const ICFGNode* node);
|
|
179
173
|
|
|
180
174
|
/**
|
|
181
175
|
* handle call node in ICFGNode
|
|
@@ -189,35 +183,35 @@ protected:
|
|
|
189
183
|
*
|
|
190
184
|
* @param cycle WTOCycle which has weak topo order of basic blocks and nested cycles
|
|
191
185
|
*/
|
|
192
|
-
virtual void handleCycle(const ICFGWTOCycle
|
|
186
|
+
virtual void handleCycle(const ICFGWTOCycle* cycle);
|
|
193
187
|
|
|
194
188
|
/**
|
|
195
189
|
* handle user defined function, ext function is not included.
|
|
196
190
|
*
|
|
197
191
|
* @param func SVFFunction which has a series of basic blocks
|
|
198
192
|
*/
|
|
199
|
-
virtual void handleFunc(const SVFFunction
|
|
193
|
+
virtual void handleFunc(const SVFFunction* func);
|
|
200
194
|
|
|
201
195
|
/**
|
|
202
196
|
* handle SVF Statement like CmpStmt, CallStmt, GepStmt, LoadStmt, StoreStmt, etc.
|
|
203
197
|
*
|
|
204
198
|
* @param stmt SVFStatement which is a value flow of instruction
|
|
205
199
|
*/
|
|
206
|
-
virtual void handleSVFStatement(const SVFStmt
|
|
200
|
+
virtual void handleSVFStatement(const SVFStmt* stmt);
|
|
207
201
|
|
|
208
202
|
/**
|
|
209
203
|
* Check if this callnode is recursive call and skip it.
|
|
210
204
|
*
|
|
211
205
|
* @param callnode CallICFGNode which calls a recursive function
|
|
212
206
|
*/
|
|
213
|
-
virtual void SkipRecursiveCall(const CallICFGNode
|
|
207
|
+
virtual void SkipRecursiveCall(const CallICFGNode* callnode);
|
|
214
208
|
|
|
215
209
|
/**
|
|
216
210
|
* Check if this function is recursive function and skip it.
|
|
217
211
|
*
|
|
218
212
|
* @param func SVFFunction is a recursive function
|
|
219
|
-
|
|
220
|
-
virtual void SkipRecursiveFunc(const SVFFunction
|
|
213
|
+
*/
|
|
214
|
+
virtual void SkipRecursiveFunc(const SVFFunction* func);
|
|
221
215
|
|
|
222
216
|
/**
|
|
223
217
|
* Check if this cmpStmt and succ are satisfiable to the execution state.
|
|
@@ -237,84 +231,6 @@ protected:
|
|
|
237
231
|
*/
|
|
238
232
|
bool hasSwitchBranchES(const SVFVar* var, s64_t succ, IntervalExeState& es);
|
|
239
233
|
|
|
240
|
-
/// protected data members, also used in subclasses
|
|
241
|
-
SVFIR* _svfir;
|
|
242
|
-
PTACallGraph* _callgraph;
|
|
243
|
-
/// Execution State, used to store the Interval Value of every SVF variable
|
|
244
|
-
SVFIR2ItvExeState* _svfir2ExeState;
|
|
245
|
-
AEAPI* _api{nullptr};
|
|
246
|
-
|
|
247
|
-
ICFG* _icfg;
|
|
248
|
-
AEStat* _stat;
|
|
249
|
-
AEKind _kind;
|
|
250
|
-
|
|
251
|
-
Set<std::string> _bugLoc;
|
|
252
|
-
SVFBugReport _recoder;
|
|
253
|
-
std::vector<const CallICFGNode*> _callSiteStack;
|
|
254
|
-
Map<const ICFGNode *, std::string> _nodeToBugInfo;
|
|
255
|
-
AndersenWaveDiff *_ander;
|
|
256
|
-
Map<const SVFFunction*, ICFGWTO *> _funcToWTO;
|
|
257
|
-
Set<const SVFFunction*> _recursiveFuns;
|
|
258
|
-
|
|
259
|
-
private:
|
|
260
|
-
// helper functions in handleCallSite
|
|
261
|
-
virtual bool isExtCall(const CallICFGNode* callNode);
|
|
262
|
-
virtual void extCallPass(const CallICFGNode* callNode);
|
|
263
|
-
virtual bool isRecursiveCall(const CallICFGNode* callNode);
|
|
264
|
-
virtual void recursiveCallPass(const CallICFGNode* callNode);
|
|
265
|
-
virtual bool isDirectCall(const CallICFGNode* callNode);
|
|
266
|
-
virtual void directCallFunPass(const CallICFGNode* callNode);
|
|
267
|
-
virtual bool isIndirectCall(const CallICFGNode* callNode);
|
|
268
|
-
virtual void indirectCallFunPass(const CallICFGNode* callNode);
|
|
269
|
-
|
|
270
|
-
// helper functions in hasInEdgesES
|
|
271
|
-
bool isFunEntry(const ICFGNode* node);
|
|
272
|
-
bool isGlobalEntry(const ICFGNode* node);
|
|
273
|
-
|
|
274
|
-
// helper functions in handleCycle
|
|
275
|
-
bool widenFixpointPass(const ICFGNode* cycle_head, IntervalExeState& pre_es);
|
|
276
|
-
bool narrowFixpointPass(const ICFGNode* cycle_head, IntervalExeState& pre_es);
|
|
277
|
-
|
|
278
|
-
// private data
|
|
279
|
-
Map<const ICFGNode*, IntervalExeState> _preES;
|
|
280
|
-
Map<const ICFGNode*, IntervalExeState> _postES;
|
|
281
|
-
std::string _moduleName;
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
class AEAPI
|
|
287
|
-
{
|
|
288
|
-
public:
|
|
289
|
-
enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
|
|
290
|
-
static bool classof(const AEAPI* api)
|
|
291
|
-
{
|
|
292
|
-
return api->getKind() == AEKind::AbstractExecution;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/**
|
|
296
|
-
* Constructor of AEAPI
|
|
297
|
-
*
|
|
298
|
-
* @param ae Abstract Execution or its subclass
|
|
299
|
-
* @param stat AEStat
|
|
300
|
-
*/
|
|
301
|
-
AEAPI(AbstractExecution* ae, AEStat* stat): _ae(ae), _stat(stat)
|
|
302
|
-
{
|
|
303
|
-
initExtFunMap();
|
|
304
|
-
_kind = AEKind::AbstractExecution;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
virtual ~AEAPI() {}
|
|
308
|
-
|
|
309
|
-
void setModule(SVFIR* svfModule)
|
|
310
|
-
{
|
|
311
|
-
_svfir = svfModule;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
AEKind getKind() const
|
|
315
|
-
{
|
|
316
|
-
return _kind;
|
|
317
|
-
}
|
|
318
234
|
|
|
319
235
|
/**
|
|
320
236
|
* handle external function call
|
|
@@ -414,8 +330,6 @@ public:
|
|
|
414
330
|
|
|
415
331
|
void collectCheckPoint();
|
|
416
332
|
void checkPointAllSet();
|
|
417
|
-
|
|
418
|
-
protected:
|
|
419
333
|
// helper functions for traceMemoryAllocationSize and canSafelyAccessMemory
|
|
420
334
|
void AccessMemoryViaRetNode(const CallICFGNode *callnode, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
|
|
421
335
|
void AccessMemoryViaCopyStmt(const CopyStmt *copy, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
|
|
@@ -423,16 +337,55 @@ protected:
|
|
|
423
337
|
void AccessMemoryViaCallArgs(const SVF::SVFArgument *arg, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
|
|
424
338
|
|
|
425
339
|
|
|
426
|
-
protected
|
|
427
|
-
AbstractExecution* _ae;
|
|
428
|
-
AEStat* _stat;
|
|
340
|
+
/// protected data members, also used in subclasses
|
|
429
341
|
SVFIR* _svfir;
|
|
342
|
+
PTACallGraph* _callgraph;
|
|
343
|
+
/// Execution State, used to store the Interval Value of every SVF variable
|
|
344
|
+
SVFIR2ItvExeState* _svfir2ExeState;
|
|
345
|
+
AEAPI* _api{nullptr};
|
|
346
|
+
|
|
347
|
+
ICFG* _icfg;
|
|
348
|
+
AEStat* _stat;
|
|
430
349
|
AEKind _kind;
|
|
431
350
|
|
|
432
|
-
|
|
351
|
+
Set<std::string> _bugLoc;
|
|
352
|
+
SVFBugReport _recoder;
|
|
353
|
+
std::vector<const CallICFGNode*> _callSiteStack;
|
|
354
|
+
Map<const ICFGNode*, std::string> _nodeToBugInfo;
|
|
355
|
+
AndersenWaveDiff* _ander;
|
|
356
|
+
Map<const SVFFunction*, ICFGWTO*> _funcToWTO;
|
|
357
|
+
Set<const SVFFunction*> _recursiveFuns;
|
|
433
358
|
|
|
359
|
+
private:
|
|
360
|
+
// helper functions in handleCallSite
|
|
361
|
+
virtual bool isExtCall(const CallICFGNode* callNode);
|
|
362
|
+
virtual void extCallPass(const CallICFGNode* callNode);
|
|
363
|
+
virtual bool isRecursiveCall(const CallICFGNode* callNode);
|
|
364
|
+
virtual void recursiveCallPass(const CallICFGNode* callNode);
|
|
365
|
+
virtual bool isDirectCall(const CallICFGNode* callNode);
|
|
366
|
+
virtual void directCallFunPass(const CallICFGNode* callNode);
|
|
367
|
+
virtual bool isIndirectCall(const CallICFGNode* callNode);
|
|
368
|
+
virtual void indirectCallFunPass(const CallICFGNode* callNode);
|
|
369
|
+
|
|
370
|
+
// helper functions in hasInEdgesES
|
|
371
|
+
bool isFunEntry(const ICFGNode* node);
|
|
372
|
+
bool isGlobalEntry(const ICFGNode* node);
|
|
373
|
+
|
|
374
|
+
// helper functions in handleCycle
|
|
375
|
+
bool widenFixpointPass(const ICFGNode* cycle_head,
|
|
376
|
+
IntervalExeState& pre_es);
|
|
377
|
+
bool narrowFixpointPass(const ICFGNode* cycle_head,
|
|
378
|
+
IntervalExeState& pre_es);
|
|
379
|
+
|
|
380
|
+
protected:
|
|
381
|
+
// there data should be shared with subclasses
|
|
382
|
+
Map<std::string, std::function<void(const CallSite &)>> _func_map;
|
|
434
383
|
Set<const CallICFGNode*> _checkpoints;
|
|
435
384
|
Set<std::string> _checkpoint_names;
|
|
436
385
|
|
|
386
|
+
private:
|
|
387
|
+
Map<const ICFGNode*, IntervalExeState> _preES;
|
|
388
|
+
Map<const ICFGNode*, IntervalExeState> _postES;
|
|
389
|
+
std::string _moduleName;
|
|
437
390
|
};
|
|
438
391
|
}
|
|
@@ -100,27 +100,28 @@ protected:
|
|
|
100
100
|
const SVFValue* _allocVar;
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
class
|
|
103
|
+
class BufOverflowChecker: public AbstractExecution
|
|
104
104
|
{
|
|
105
105
|
public:
|
|
106
|
-
|
|
107
|
-
BufOverflowCheckerAPI(AbstractExecution * ae, AEStat * stat): AEAPI(ae, stat)
|
|
106
|
+
BufOverflowChecker() : AbstractExecution()
|
|
108
107
|
{
|
|
109
108
|
initExtFunMap();
|
|
110
|
-
initExtAPIBufOverflowCheckRules();
|
|
111
109
|
_kind = AEKind::BufOverflowChecker;
|
|
110
|
+
initExtAPIBufOverflowCheckRules();
|
|
112
111
|
}
|
|
113
|
-
|
|
112
|
+
|
|
113
|
+
static bool classof(const AbstractExecution* ae)
|
|
114
114
|
{
|
|
115
|
-
return
|
|
115
|
+
return ae->getKind() == AEKind::BufOverflowChecker;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
protected:
|
|
118
119
|
/**
|
|
119
120
|
* the map of external function to its API type
|
|
120
121
|
*
|
|
121
122
|
* it initialize the ext apis about buffer overflow checking
|
|
122
123
|
*/
|
|
123
|
-
virtual void initExtFunMap();
|
|
124
|
+
virtual void initExtFunMap() override;
|
|
124
125
|
|
|
125
126
|
/**
|
|
126
127
|
* the map of ext apis of buffer overflow checking rules
|
|
@@ -136,7 +137,7 @@ public:
|
|
|
136
137
|
*
|
|
137
138
|
* @param call call node whose callee is external function
|
|
138
139
|
*/
|
|
139
|
-
void handleExtAPI(const CallICFGNode *call) ;
|
|
140
|
+
void handleExtAPI(const CallICFGNode *call) override;
|
|
140
141
|
/**
|
|
141
142
|
* detect buffer overflow from strcpy like apis
|
|
142
143
|
* e.g. strcpy(dst, src), if dst is shorter than src, we will throw buffer overflow
|
|
@@ -165,31 +166,6 @@ public:
|
|
|
165
166
|
*/
|
|
166
167
|
bool canSafelyAccessMemory(const SVFValue *value, const IntervalValue &len, const ICFGNode *curNode);
|
|
167
168
|
|
|
168
|
-
|
|
169
|
-
Map<NodeID, const GepStmt*> _addrToGep;
|
|
170
|
-
Map<std::string, std::vector<std::pair<u32_t, u32_t>>> _extAPIBufOverflowCheckRules;
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
class BufOverflowChecker: public AbstractExecution
|
|
174
|
-
{
|
|
175
|
-
friend BufOverflowCheckerAPI;
|
|
176
|
-
|
|
177
|
-
public:
|
|
178
|
-
BufOverflowChecker() : AbstractExecution()
|
|
179
|
-
{
|
|
180
|
-
_kind = AEKind::BufOverflowChecker;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
static bool classof(const AbstractExecution* ae)
|
|
184
|
-
{
|
|
185
|
-
return ae->getKind() == AEKind::BufOverflowChecker;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
void initExtAPI() override
|
|
189
|
-
{
|
|
190
|
-
_api = new BufOverflowCheckerAPI(this, _stat);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
169
|
private:
|
|
194
170
|
/**
|
|
195
171
|
* handle SVF statement regarding buffer overflow checking
|
|
@@ -221,6 +197,9 @@ private:
|
|
|
221
197
|
*/
|
|
222
198
|
void addBugToRecoder(const BufOverflowException& e, const ICFGNode* node);
|
|
223
199
|
|
|
200
|
+
private:
|
|
201
|
+
Map<NodeID, const GepStmt*> _addrToGep;
|
|
202
|
+
Map<std::string, std::vector<std::pair<u32_t, u32_t>>> _extAPIBufOverflowCheckRules;
|
|
224
203
|
|
|
225
204
|
};
|
|
226
205
|
}
|