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
|
@@ -68,6 +68,7 @@ $(function() {
|
|
|
68
68
|
<div class="summary">
|
|
69
69
|
<a href="#pub-methods">Public Member Functions</a> |
|
|
70
70
|
<a href="#pub-static-methods">Static Public Member Functions</a> |
|
|
71
|
+
<a href="#pro-methods">Protected Member Functions</a> |
|
|
71
72
|
<a href="#pri-methods">Private Member Functions</a> |
|
|
72
73
|
<a href="#pri-attribs">Private Attributes</a> |
|
|
73
74
|
<a href="classSVF_1_1BufOverflowChecker-members.html">List of all members</a> </div>
|
|
@@ -91,8 +92,6 @@ Inheritance diagram for SVF::BufOverflowChecker:</div>
|
|
|
91
92
|
Public Member Functions</h2></td></tr>
|
|
92
93
|
<tr class="memitem:adcfa49d892daef07e7d4274ab8d34b6f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#adcfa49d892daef07e7d4274ab8d34b6f">BufOverflowChecker</a> ()</td></tr>
|
|
93
94
|
<tr class="separator:adcfa49d892daef07e7d4274ab8d34b6f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
94
|
-
<tr class="memitem:a4787d2e56aa374763656b7942f0ed52f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a4787d2e56aa374763656b7942f0ed52f">initExtAPI</a> () override</td></tr>
|
|
95
|
-
<tr class="separator:a4787d2e56aa374763656b7942f0ed52f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
96
95
|
<tr class="inherit_header pub_methods_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
|
|
97
96
|
<tr class="memitem:a84d8fedb7e9d23e92ffcb74b4cfbf78c inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">AbstractExecution</a> ()</td></tr>
|
|
98
97
|
<tr class="memdesc:a84d8fedb7e9d23e92ffcb74b4cfbf78c inherit pub_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <a href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">More...</a><br /></td></tr>
|
|
@@ -116,27 +115,20 @@ Static Public Member Functions</h2></td></tr>
|
|
|
116
115
|
<tr class="memitem:a9c23029833558b082c613fa5e0f14c0d inherit pub_static_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a9c23029833558b082c613fa5e0f14c0d">classof</a> (const <a class="el" href="classSVF_1_1AbstractExecution.html">AbstractExecution</a> *ae)</td></tr>
|
|
117
116
|
<tr class="separator:a9c23029833558b082c613fa5e0f14c0d inherit pub_static_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
118
117
|
</table><table class="memberdecls">
|
|
119
|
-
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="
|
|
120
|
-
|
|
121
|
-
<tr class="memitem:
|
|
122
|
-
<tr class="separator:
|
|
123
|
-
<tr class="memitem:
|
|
124
|
-
<tr class="separator:
|
|
125
|
-
<tr class="memitem:
|
|
126
|
-
<tr class="separator:
|
|
127
|
-
<tr class="memitem:
|
|
128
|
-
<tr class="separator:
|
|
129
|
-
|
|
130
|
-
<tr class="
|
|
131
|
-
|
|
132
|
-
<tr class="
|
|
133
|
-
<tr class="separator:a563fed00ad732985dbe7a7e2c6525e6a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
134
|
-
</table><table class="memberdecls">
|
|
135
|
-
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
|
|
136
|
-
Additional Inherited Members</h2></td></tr>
|
|
137
|
-
<tr class="inherit_header pub_types_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
|
|
138
|
-
<tr class="memitem:a8ad0f3d5a0c9de60eff91fcc0dd44aae inherit pub_types_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1SCCDetection.html">SCCDetection</a>< <a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a8ad0f3d5a0c9de60eff91fcc0dd44aae">CallGraphSCC</a></td></tr>
|
|
139
|
-
<tr class="separator:a8ad0f3d5a0c9de60eff91fcc0dd44aae inherit pub_types_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
118
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
|
|
119
|
+
Protected Member Functions</h2></td></tr>
|
|
120
|
+
<tr class="memitem:af0e2276001df7d51c45b22d5d11ca09b"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">initExtFunMap</a> () override</td></tr>
|
|
121
|
+
<tr class="separator:af0e2276001df7d51c45b22d5d11ca09b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
122
|
+
<tr class="memitem:aed959fce840cbea32d3567ee1ac01e82"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">initExtAPIBufOverflowCheckRules</a> ()</td></tr>
|
|
123
|
+
<tr class="separator:aed959fce840cbea32d3567ee1ac01e82"><td class="memSeparator" colspan="2"> </td></tr>
|
|
124
|
+
<tr class="memitem:a1ed3cb0a1a118d9e505b192841a58dde"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a1ed3cb0a1a118d9e505b192841a58dde">handleExtAPI</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call) override</td></tr>
|
|
125
|
+
<tr class="separator:a1ed3cb0a1a118d9e505b192841a58dde"><td class="memSeparator" colspan="2"> </td></tr>
|
|
126
|
+
<tr class="memitem:ad8b2f2fa6f22b9d1655135c819cbad8a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">detectStrcpy</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
|
|
127
|
+
<tr class="separator:ad8b2f2fa6f22b9d1655135c819cbad8a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
128
|
+
<tr class="memitem:aa68f8aef09481d7c07dc59d7dfb83822"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">detectStrcat</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
|
|
129
|
+
<tr class="separator:aa68f8aef09481d7c07dc59d7dfb83822"><td class="memSeparator" colspan="2"> </td></tr>
|
|
130
|
+
<tr class="memitem:ace5ad1d6a63d5392044fee2ecbc9236e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value, const <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> &len, const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curNode)</td></tr>
|
|
131
|
+
<tr class="separator:ace5ad1d6a63d5392044fee2ecbc9236e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
140
132
|
<tr class="inherit_header pro_methods_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
|
|
141
133
|
<tr class="memitem:a7efff2047b2b6017fdd210a8679817cd inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a7efff2047b2b6017fdd210a8679817cd">handleGlobalNode</a> ()</td></tr>
|
|
142
134
|
<tr class="memdesc:a7efff2047b2b6017fdd210a8679817cd inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft"> </td><td class="mdescRight">Global <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> is handled at the entry of the program,. <a href="classSVF_1_1AbstractExecution.html#a7efff2047b2b6017fdd210a8679817cd">More...</a><br /></td></tr>
|
|
@@ -167,6 +159,70 @@ Additional Inherited Members</h2></td></tr>
|
|
|
167
159
|
<tr class="separator:ac7a25ad5cbc1a6132869ae54b805f73a inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
168
160
|
<tr class="memitem:adc740771e712644d08f95fc6c488c1af inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#adc740771e712644d08f95fc6c488c1af">hasSwitchBranchES</a> (const <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *var, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> succ, <a class="el" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &es)</td></tr>
|
|
169
161
|
<tr class="separator:adc740771e712644d08f95fc6c488c1af inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
162
|
+
<tr class="memitem:a598cb7b97bae122d0015c03b72beee9d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a598cb7b97bae122d0015c03b72beee9d">getAllocaInstByteSize</a> (const <a class="el" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr)</td></tr>
|
|
163
|
+
<tr class="separator:a598cb7b97bae122d0015c03b72beee9d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
164
|
+
<tr class="memitem:a63044080ddea89905bc9a4336eb8b2a7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a63044080ddea89905bc9a4336eb8b2a7">strRead</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *rhs)</td></tr>
|
|
165
|
+
<tr class="separator:a63044080ddea89905bc9a4336eb8b2a7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
166
|
+
<tr class="memitem:a99be86146ad4ddbdb900cdb6b324f943 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *strValue)</td></tr>
|
|
167
|
+
<tr class="separator:a99be86146ad4ddbdb900cdb6b324f943 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
168
|
+
<tr class="memitem:a2484783853c5a266223882f66e683fa9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a2484783853c5a266223882f66e683fa9">traceMemoryAllocationSize</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value)</td></tr>
|
|
169
|
+
<tr class="separator:a2484783853c5a266223882f66e683fa9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
170
|
+
<tr class="memitem:a0ed5456bdeaff7ab4e1decdff8ae2afb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a0ed5456bdeaff7ab4e1decdff8ae2afb">handleStrcpy</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
|
|
171
|
+
<tr class="separator:a0ed5456bdeaff7ab4e1decdff8ae2afb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
172
|
+
<tr class="memitem:a28c04e0a985eda44fe8532c44c7e05bb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a28c04e0a985eda44fe8532c44c7e05bb">handleStrcat</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
|
|
173
|
+
<tr class="separator:a28c04e0a985eda44fe8532c44c7e05bb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
174
|
+
<tr class="memitem:a37c0e12879d3320857a288191e6d2202 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a37c0e12879d3320857a288191e6d2202">handleMemcpy</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *src, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> len, <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> start_idx)</td></tr>
|
|
175
|
+
<tr class="separator:a37c0e12879d3320857a288191e6d2202 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
176
|
+
<tr class="memitem:ad70015e99339c3beb3a911c0ff6f0144 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ad70015e99339c3beb3a911c0ff6f0144">handleMemset</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> elem, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> len)</td></tr>
|
|
177
|
+
<tr class="separator:ad70015e99339c3beb3a911c0ff6f0144 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
178
|
+
<tr class="memitem:a888fd56160afe0d431c47bcf10674dc0 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1SVFType.html">SVFType</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id)</td></tr>
|
|
179
|
+
<tr class="separator:a888fd56160afe0d431c47bcf10674dc0 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
180
|
+
<tr class="memitem:afb6de3effc0f483836bfe9f42aca760d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#afb6de3effc0f483836bfe9f42aca760d">collectCheckPoint</a> ()</td></tr>
|
|
181
|
+
<tr class="separator:afb6de3effc0f483836bfe9f42aca760d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
182
|
+
<tr class="memitem:aaa2f3713bd6d39bb4e9b5119b64277c7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#aaa2f3713bd6d39bb4e9b5119b64277c7">checkPointAllSet</a> ()</td></tr>
|
|
183
|
+
<tr class="separator:aaa2f3713bd6d39bb4e9b5119b64277c7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
184
|
+
<tr class="memitem:a140acf4733b46855c8627cf10dbb0bd5 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a140acf4733b46855c8627cf10dbb0bd5">AccessMemoryViaRetNode</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &visited)</td></tr>
|
|
185
|
+
<tr class="separator:a140acf4733b46855c8627cf10dbb0bd5 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
186
|
+
<tr class="memitem:a20df87d2a269c3feab3acc40e4cd8801 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a20df87d2a269c3feab3acc40e4cd8801">AccessMemoryViaCopyStmt</a> (const <a class="el" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="el" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &visited)</td></tr>
|
|
187
|
+
<tr class="separator:a20df87d2a269c3feab3acc40e4cd8801 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
188
|
+
<tr class="memitem:a98f3c7d5e4b3722b717071cd320c8a60 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a98f3c7d5e4b3722b717071cd320c8a60">AccessMemoryViaLoadStmt</a> (const <a class="el" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &visited)</td></tr>
|
|
189
|
+
<tr class="separator:a98f3c7d5e4b3722b717071cd320c8a60 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
190
|
+
<tr class="memitem:ac920e03f019c47e585f6d0138f91585f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac920e03f019c47e585f6d0138f91585f">AccessMemoryViaCallArgs</a> (const <a class="el" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * > &visited)</td></tr>
|
|
191
|
+
<tr class="separator:ac920e03f019c47e585f6d0138f91585f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
192
|
+
</table><table class="memberdecls">
|
|
193
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
|
|
194
|
+
Private Member Functions</h2></td></tr>
|
|
195
|
+
<tr class="memitem:a0b79c3694a08100d2d8d1b8109998131"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a0b79c3694a08100d2d8d1b8109998131">handleSVFStatement</a> (const <a class="el" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt) override</td></tr>
|
|
196
|
+
<tr class="separator:a0b79c3694a08100d2d8d1b8109998131"><td class="memSeparator" colspan="2"> </td></tr>
|
|
197
|
+
<tr class="memitem:afa6b30220b0b3261205a909def9ca44e"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#afa6b30220b0b3261205a909def9ca44e">handleICFGNode</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a> *node) override</td></tr>
|
|
198
|
+
<tr class="separator:afa6b30220b0b3261205a909def9ca44e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
199
|
+
<tr class="memitem:a52de7d619e8746a70718719306d7c5a1"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a52de7d619e8746a70718719306d7c5a1">detectBufOverflow</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
|
|
200
|
+
<tr class="separator:a52de7d619e8746a70718719306d7c5a1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
201
|
+
<tr class="memitem:a7c11b81809cb087317cbea654a589f75"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a> (const <a class="el" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> &e, const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
|
|
202
|
+
<tr class="separator:a7c11b81809cb087317cbea654a589f75"><td class="memSeparator" colspan="2"> </td></tr>
|
|
203
|
+
</table><table class="memberdecls">
|
|
204
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
|
|
205
|
+
Private Attributes</h2></td></tr>
|
|
206
|
+
<tr class="memitem:a0088456e712c555cbfba6203aec38037"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, const <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">_addrToGep</a></td></tr>
|
|
207
|
+
<tr class="separator:a0088456e712c555cbfba6203aec38037"><td class="memSeparator" colspan="2"> </td></tr>
|
|
208
|
+
<tr class="memitem:af83b65ed98cd4e0f6cd92962e7392d4d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>, std::vector< std::pair< <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>, <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> > > > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a></td></tr>
|
|
209
|
+
<tr class="separator:af83b65ed98cd4e0f6cd92962e7392d4d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
210
|
+
</table><table class="memberdecls">
|
|
211
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
|
|
212
|
+
Additional Inherited Members</h2></td></tr>
|
|
213
|
+
<tr class="inherit_header pub_types_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
|
|
214
|
+
<tr class="memitem:a442fb8eda087f72aa61816213dea43af inherit pub_types_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">ExtAPIType</a> { <br />
|
|
215
|
+
  <a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">UNCLASSIFIED</a>,
|
|
216
|
+
<a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>,
|
|
217
|
+
<a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>,
|
|
218
|
+
<a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>,
|
|
219
|
+
<br />
|
|
220
|
+
  <a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>
|
|
221
|
+
<br />
|
|
222
|
+
}</td></tr>
|
|
223
|
+
<tr class="separator:a442fb8eda087f72aa61816213dea43af inherit pub_types_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
224
|
+
<tr class="memitem:a39c711b4657459d03ec67ae536bdec4d inherit pub_types_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1SCCDetection.html">SCCDetection</a>< <a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a39c711b4657459d03ec67ae536bdec4d">CallGraphSCC</a></td></tr>
|
|
225
|
+
<tr class="separator:a39c711b4657459d03ec67ae536bdec4d inherit pub_types_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
170
226
|
<tr class="inherit_header pro_attribs_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
|
|
171
227
|
<tr class="memitem:a49742e8c3a8fe598a0945a8d8ff394d0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a></td></tr>
|
|
172
228
|
<tr class="memdesc:a49742e8c3a8fe598a0945a8d8ff394d0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="mdescLeft"> </td><td class="mdescRight">protected data members, also used in subclasses <a href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">More...</a><br /></td></tr>
|
|
@@ -176,7 +232,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
176
232
|
<tr class="memitem:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR2ItvExeState.html">SVFIR2ItvExeState</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a></td></tr>
|
|
177
233
|
<tr class="memdesc:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="mdescLeft"> </td><td class="mdescRight">Execution State, used to store the Interval Value of every <a class="el" href="namespaceSVF.html" title="for isBitcode">SVF</a> variable. <a href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">More...</a><br /></td></tr>
|
|
178
234
|
<tr class="separator:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
179
|
-
<tr class="memitem:a26f8c21bd96ae22ca2e72af6fbfa410c inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="
|
|
235
|
+
<tr class="memitem:a26f8c21bd96ae22ca2e72af6fbfa410c inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AbstractExecution.html#ac0bcb586dffbfadeb33f501cafbaa1c9">AEAPI</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a26f8c21bd96ae22ca2e72af6fbfa410c">_api</a> {nullptr}</td></tr>
|
|
180
236
|
<tr class="separator:a26f8c21bd96ae22ca2e72af6fbfa410c inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
181
237
|
<tr class="memitem:ab5021d59a929f4eaf5e59d911036d201 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1ICFG.html">ICFG</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ab5021d59a929f4eaf5e59d911036d201">_icfg</a></td></tr>
|
|
182
238
|
<tr class="separator:ab5021d59a929f4eaf5e59d911036d201 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -190,18 +246,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
190
246
|
<tr class="separator:a5ed683d635bd05f0bee10436d20deb31 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
191
247
|
<tr class="memitem:ab9d6ebcf67ec473ce7ad5910c74eddc1 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">std::vector< const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ab9d6ebcf67ec473ce7ad5910c74eddc1">_callSiteStack</a></td></tr>
|
|
192
248
|
<tr class="separator:ab9d6ebcf67ec473ce7ad5910c74eddc1 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
193
|
-
<tr class="memitem:
|
|
194
|
-
<tr class="separator:
|
|
249
|
+
<tr class="memitem:a04e812385041270901af0f2cb599fa96 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *, <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a04e812385041270901af0f2cb599fa96">_nodeToBugInfo</a></td></tr>
|
|
250
|
+
<tr class="separator:a04e812385041270901af0f2cb599fa96 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
195
251
|
<tr class="memitem:a53f3b9c51ed8648f14ecb703e9fe67ae inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a53f3b9c51ed8648f14ecb703e9fe67ae">_ander</a></td></tr>
|
|
196
252
|
<tr class="separator:a53f3b9c51ed8648f14ecb703e9fe67ae inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
197
|
-
<tr class="memitem:
|
|
198
|
-
<tr class="separator:
|
|
253
|
+
<tr class="memitem:ade8434d8f0f5d832842d60b7a56fa64f inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *, <a class="el" href="classSVF_1_1ICFGWTO.html">ICFGWTO</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ade8434d8f0f5d832842d60b7a56fa64f">_funcToWTO</a></td></tr>
|
|
254
|
+
<tr class="separator:ade8434d8f0f5d832842d60b7a56fa64f inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
199
255
|
<tr class="memitem:ac7b2e6bdccab5a507c9e8db8ea4682d3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac7b2e6bdccab5a507c9e8db8ea4682d3">_recursiveFuns</a></td></tr>
|
|
200
256
|
<tr class="separator:ac7b2e6bdccab5a507c9e8db8ea4682d3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
257
|
+
<tr class="memitem:ac1742440725909fee77526726424d135 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>, std::function< void(const <a class="el" href="classSVF_1_1CallSite.html">CallSite</a> &)> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a></td></tr>
|
|
258
|
+
<tr class="separator:ac1742440725909fee77526726424d135 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
259
|
+
<tr class="memitem:a0a64bef0cc898059c50f6aec470cc6d9 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a></td></tr>
|
|
260
|
+
<tr class="separator:a0a64bef0cc898059c50f6aec470cc6d9 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
261
|
+
<tr class="memitem:a32abc52bc54745027aa2daa67a8278f3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a></td></tr>
|
|
262
|
+
<tr class="separator:a32abc52bc54745027aa2daa67a8278f3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2"> </td></tr>
|
|
201
263
|
</table>
|
|
202
264
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
203
265
|
<div class="textblock">
|
|
204
|
-
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#
|
|
266
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00103">103</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
|
|
205
267
|
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
206
268
|
<a id="adcfa49d892daef07e7d4274ab8d34b6f"></a>
|
|
207
269
|
<h2 class="memtitle"><span class="permalink"><a href="#adcfa49d892daef07e7d4274ab8d34b6f">◆ </a></span>BufOverflowChecker()</h2>
|
|
@@ -226,11 +288,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
226
288
|
</table>
|
|
227
289
|
</div><div class="memdoc">
|
|
228
290
|
|
|
229
|
-
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#
|
|
230
|
-
<div class="fragment"><div class="line"><a name="
|
|
231
|
-
<div class="line"><a name="
|
|
232
|
-
<div class="line"><a name="
|
|
233
|
-
<div class="line"><a name="
|
|
291
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00106">106</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
|
|
292
|
+
<div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  : <a class="code" href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">AbstractExecution</a>()</div>
|
|
293
|
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div>
|
|
294
|
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">initExtFunMap</a>();</div>
|
|
295
|
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ad36d48c0ef82de915d9339c4f47cbd70">_kind</a> = <a class="code" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">AEKind::BufOverflowChecker</a>;</div>
|
|
296
|
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">initExtAPIBufOverflowCheckRules</a>();</div>
|
|
297
|
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div>
|
|
234
298
|
</div><!-- fragment -->
|
|
235
299
|
</div>
|
|
236
300
|
</div>
|
|
@@ -277,6 +341,61 @@ Additional Inherited Members</h2></td></tr>
|
|
|
277
341
|
</dd>
|
|
278
342
|
</dl>
|
|
279
343
|
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
<a id="ace5ad1d6a63d5392044fee2ecbc9236e"></a>
|
|
347
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ace5ad1d6a63d5392044fee2ecbc9236e">◆ </a></span>canSafelyAccessMemory()</h2>
|
|
348
|
+
|
|
349
|
+
<div class="memitem">
|
|
350
|
+
<div class="memproto">
|
|
351
|
+
<table class="mlabels">
|
|
352
|
+
<tr>
|
|
353
|
+
<td class="mlabels-left">
|
|
354
|
+
<table class="memname">
|
|
355
|
+
<tr>
|
|
356
|
+
<td class="memname">bool SVF::BufOverflowChecker::canSafelyAccessMemory </td>
|
|
357
|
+
<td>(</td>
|
|
358
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * </td>
|
|
359
|
+
<td class="paramname"><em>value</em>, </td>
|
|
360
|
+
</tr>
|
|
361
|
+
<tr>
|
|
362
|
+
<td class="paramkey"></td>
|
|
363
|
+
<td></td>
|
|
364
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> & </td>
|
|
365
|
+
<td class="paramname"><em>len</em>, </td>
|
|
366
|
+
</tr>
|
|
367
|
+
<tr>
|
|
368
|
+
<td class="paramkey"></td>
|
|
369
|
+
<td></td>
|
|
370
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> * </td>
|
|
371
|
+
<td class="paramname"><em>curNode</em> </td>
|
|
372
|
+
</tr>
|
|
373
|
+
<tr>
|
|
374
|
+
<td></td>
|
|
375
|
+
<td>)</td>
|
|
376
|
+
<td></td><td></td>
|
|
377
|
+
</tr>
|
|
378
|
+
</table>
|
|
379
|
+
</td>
|
|
380
|
+
<td class="mlabels-right">
|
|
381
|
+
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
|
382
|
+
</tr>
|
|
383
|
+
</table>
|
|
384
|
+
</div><div class="memdoc">
|
|
385
|
+
<p>detect buffer overflow by giving a var and a length e.g. int x[10]; x[10] = 1; we call canSafelyAccessMemory(x, 11 * sizeof(int));</p>
|
|
386
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
387
|
+
<table class="params">
|
|
388
|
+
<tr><td class="paramname">value</td><td>the value of the buffer overflow checkpoint </td></tr>
|
|
389
|
+
<tr><td class="paramname">len</td><td>the length of the buffer overflow checkpoint </td></tr>
|
|
390
|
+
</table>
|
|
391
|
+
</dd>
|
|
392
|
+
</dl>
|
|
393
|
+
<dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
|
|
394
|
+
<p>Usually called by a <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a> overflow check, or external API (like memcpy) overflow check Defitions of Terms: source node: malloc or gepStmt(array), sink node: gepStmt or external API (like memcpy) e.g. 1) a = malloc(10), a[11] = 10, a[11] is the sink node, a is the source node (malloc) 2) A = struct {int a[10];}, A.a[11] = 10, A.a[11] is the sink, A.a is the source node (gepStmt(array))</p>
|
|
395
|
+
<p>it tracks the value flow from sink to source, and accumulates offset then compare the accumulated offset and malloc size (or gepStmt array size)</p>
|
|
396
|
+
|
|
397
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00485">485</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
398
|
+
|
|
280
399
|
</div>
|
|
281
400
|
</div>
|
|
282
401
|
<a id="ace460f7684aedf51c9907c995b94b653"></a>
|
|
@@ -303,10 +422,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
303
422
|
</table>
|
|
304
423
|
</div><div class="memdoc">
|
|
305
424
|
|
|
306
|
-
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#
|
|
307
|
-
<div class="fragment"><div class="line"><a name="
|
|
308
|
-
<div class="line"><a name="
|
|
309
|
-
<div class="line"><a name="
|
|
425
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00113">113</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
|
|
426
|
+
<div class="fragment"><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div>
|
|
427
|
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> ae->getKind() == <a class="code" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">AEKind::BufOverflowChecker</a>;</div>
|
|
428
|
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div>
|
|
310
429
|
</div><!-- fragment -->
|
|
311
430
|
</div>
|
|
312
431
|
</div>
|
|
@@ -342,6 +461,232 @@ Additional Inherited Members</h2></td></tr>
|
|
|
342
461
|
</dl>
|
|
343
462
|
<dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
|
|
344
463
|
|
|
464
|
+
</div>
|
|
465
|
+
</div>
|
|
466
|
+
<a id="aa68f8aef09481d7c07dc59d7dfb83822"></a>
|
|
467
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aa68f8aef09481d7c07dc59d7dfb83822">◆ </a></span>detectStrcat()</h2>
|
|
468
|
+
|
|
469
|
+
<div class="memitem">
|
|
470
|
+
<div class="memproto">
|
|
471
|
+
<table class="mlabels">
|
|
472
|
+
<tr>
|
|
473
|
+
<td class="mlabels-left">
|
|
474
|
+
<table class="memname">
|
|
475
|
+
<tr>
|
|
476
|
+
<td class="memname">bool SVF::BufOverflowChecker::detectStrcat </td>
|
|
477
|
+
<td>(</td>
|
|
478
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * </td>
|
|
479
|
+
<td class="paramname"><em>call</em></td><td>)</td>
|
|
480
|
+
<td></td>
|
|
481
|
+
</tr>
|
|
482
|
+
</table>
|
|
483
|
+
</td>
|
|
484
|
+
<td class="mlabels-right">
|
|
485
|
+
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
|
486
|
+
</tr>
|
|
487
|
+
</table>
|
|
488
|
+
</div><div class="memdoc">
|
|
489
|
+
<p>detect buffer overflow from strcat like apis e.g. strcat(dst, src), if dst is shorter than src, we will throw buffer overflow</p>
|
|
490
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
491
|
+
<table class="params">
|
|
492
|
+
<tr><td class="paramname">call</td><td>call node whose callee is strcpy-like external function </td></tr>
|
|
493
|
+
</table>
|
|
494
|
+
</dd>
|
|
495
|
+
</dl>
|
|
496
|
+
<dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
|
|
497
|
+
|
|
498
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00372">372</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
499
|
+
<div class="fragment"><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> {</div>
|
|
500
|
+
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call->getCallSite());</div>
|
|
501
|
+
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="comment">// check the arg size</span></div>
|
|
502
|
+
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="comment">// if it is strcat group, we need to check the length of string,</span></div>
|
|
503
|
+
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="comment">// e.g. strcat(str1, str2); which checks AllocSize(str1) >= Strlen(str1) + Strlen(str2);</span></div>
|
|
504
|
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// if it is strncat group, we do not need to check the length of string,</span></div>
|
|
505
|
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="comment">// e.g. strncat(str1, str2, n); which checks AllocSize(str1) >= Strlen(str1) + n;</span></div>
|
|
506
|
+
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  </div>
|
|
507
|
+
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">const</span> std::vector<std::string> strcatGroup = {<span class="stringliteral">"__strcat_chk"</span>, <span class="stringliteral">"strcat"</span>, <span class="stringliteral">"__wcscat_chk"</span>, <span class="stringliteral">"wcscat"</span>};</div>
|
|
508
|
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> std::vector<std::string> strncatGroup = {<span class="stringliteral">"__strncat_chk"</span>, <span class="stringliteral">"strncat"</span>, <span class="stringliteral">"__wcsncat_chk"</span>, <span class="stringliteral">"wcsncat"</span>};</div>
|
|
509
|
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun->getName()) != strcatGroup.end())</div>
|
|
510
|
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div>
|
|
511
|
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call->getCallSite());</div>
|
|
512
|
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
|
|
513
|
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
|
|
514
|
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  IntervalValue strLen0 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg0Val);</div>
|
|
515
|
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  IntervalValue strLen1 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg1Val);</div>
|
|
516
|
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  IntervalValue totalLen = strLen0 + strLen1;</div>
|
|
517
|
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
|
|
518
|
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div>
|
|
519
|
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun->getName()) != strncatGroup.end())</div>
|
|
520
|
+
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  {</div>
|
|
521
|
+
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call->getCallSite());</div>
|
|
522
|
+
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
|
|
523
|
+
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keyword">const</span> SVFValue* arg2Val = cs.getArgument(2);</div>
|
|
524
|
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  IntervalValue arg2Num = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(arg2Val)];</div>
|
|
525
|
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  IntervalValue strLen0 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg0Val);</div>
|
|
526
|
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  IntervalValue totalLen = strLen0 + arg2Num;</div>
|
|
527
|
+
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
|
|
528
|
+
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div>
|
|
529
|
+
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">else</span></div>
|
|
530
|
+
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  {</div>
|
|
531
|
+
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"unknown strcat function, please add it to strcatGroup or strncatGroup"</span>);</div>
|
|
532
|
+
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  abort();</div>
|
|
533
|
+
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div>
|
|
534
|
+
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
|
|
535
|
+
</div><!-- fragment -->
|
|
536
|
+
</div>
|
|
537
|
+
</div>
|
|
538
|
+
<a id="ad8b2f2fa6f22b9d1655135c819cbad8a"></a>
|
|
539
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ad8b2f2fa6f22b9d1655135c819cbad8a">◆ </a></span>detectStrcpy()</h2>
|
|
540
|
+
|
|
541
|
+
<div class="memitem">
|
|
542
|
+
<div class="memproto">
|
|
543
|
+
<table class="mlabels">
|
|
544
|
+
<tr>
|
|
545
|
+
<td class="mlabels-left">
|
|
546
|
+
<table class="memname">
|
|
547
|
+
<tr>
|
|
548
|
+
<td class="memname">bool SVF::BufOverflowChecker::detectStrcpy </td>
|
|
549
|
+
<td>(</td>
|
|
550
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * </td>
|
|
551
|
+
<td class="paramname"><em>call</em></td><td>)</td>
|
|
552
|
+
<td></td>
|
|
553
|
+
</tr>
|
|
554
|
+
</table>
|
|
555
|
+
</td>
|
|
556
|
+
<td class="mlabels-right">
|
|
557
|
+
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
|
558
|
+
</tr>
|
|
559
|
+
</table>
|
|
560
|
+
</div><div class="memdoc">
|
|
561
|
+
<p>detect buffer overflow from strcpy like apis e.g. strcpy(dst, src), if dst is shorter than src, we will throw buffer overflow</p>
|
|
562
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
563
|
+
<table class="params">
|
|
564
|
+
<tr><td class="paramname">call</td><td>call node whose callee is strcpy-like external function </td></tr>
|
|
565
|
+
</table>
|
|
566
|
+
</dd>
|
|
567
|
+
</dl>
|
|
568
|
+
<dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
|
|
569
|
+
|
|
570
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00123">123</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
571
|
+
<div class="fragment"><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
|
|
572
|
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call->getCallSite());</div>
|
|
573
|
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
|
|
574
|
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
|
|
575
|
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  IntervalValue strLen = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg1Val);</div>
|
|
576
|
+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">// no need to -1, since it has \0 as the last byte</span></div>
|
|
577
|
+
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, strLen, call);</div>
|
|
578
|
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
|
|
579
|
+
</div><!-- fragment -->
|
|
580
|
+
</div>
|
|
581
|
+
</div>
|
|
582
|
+
<a id="a1ed3cb0a1a118d9e505b192841a58dde"></a>
|
|
583
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a1ed3cb0a1a118d9e505b192841a58dde">◆ </a></span>handleExtAPI()</h2>
|
|
584
|
+
|
|
585
|
+
<div class="memitem">
|
|
586
|
+
<div class="memproto">
|
|
587
|
+
<table class="mlabels">
|
|
588
|
+
<tr>
|
|
589
|
+
<td class="mlabels-left">
|
|
590
|
+
<table class="memname">
|
|
591
|
+
<tr>
|
|
592
|
+
<td class="memname">void SVF::BufOverflowChecker::handleExtAPI </td>
|
|
593
|
+
<td>(</td>
|
|
594
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * </td>
|
|
595
|
+
<td class="paramname"><em>call</em></td><td>)</td>
|
|
596
|
+
<td></td>
|
|
597
|
+
</tr>
|
|
598
|
+
</table>
|
|
599
|
+
</td>
|
|
600
|
+
<td class="mlabels-right">
|
|
601
|
+
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
|
|
602
|
+
</tr>
|
|
603
|
+
</table>
|
|
604
|
+
</div><div class="memdoc">
|
|
605
|
+
<p>handle external function call regarding buffer overflow checking e.g. memcpy(dst, src, sz) -> we check allocSize(dst)>=sz and allocSize(src)>=sz</p>
|
|
606
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
607
|
+
<table class="params">
|
|
608
|
+
<tr><td class="paramname">call</td><td>call node whose callee is external function </td></tr>
|
|
609
|
+
</table>
|
|
610
|
+
</dd>
|
|
611
|
+
</dl>
|
|
612
|
+
|
|
613
|
+
<p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">SVF::AbstractExecution</a>.</p>
|
|
614
|
+
|
|
615
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00410">410</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
616
|
+
<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div>
|
|
617
|
+
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">AbstractExecution::handleExtAPI</a>(call);</div>
|
|
618
|
+
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call->getCallSite());</div>
|
|
619
|
+
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  assert(fun && <span class="stringliteral">"SVFFunction* is nullptr"</span>);</div>
|
|
620
|
+
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call->getCallSite());</div>
|
|
621
|
+
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="comment">// check the type of mem api,</span></div>
|
|
622
|
+
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="comment">// MEMCPY: like memcpy, memcpy_chk, llvm.memcpy etc.</span></div>
|
|
623
|
+
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="comment">// MEMSET: like memset, memset_chk, llvm.memset etc.</span></div>
|
|
624
|
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="comment">// STRCPY: like strcpy, strcpy_chk, wcscpy etc.</span></div>
|
|
625
|
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">// STRCAT: like strcat, strcat_chk, wcscat etc.</span></div>
|
|
626
|
+
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="comment">// for other ext api like printf, scanf, etc., they have their own handlers</span></div>
|
|
627
|
+
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">ExtAPIType</a> extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">UNCLASSIFIED</a>;</div>
|
|
628
|
+
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="comment">// get type of mem api</span></div>
|
|
629
|
+
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &annotation: fun->getAnnotations())</div>
|
|
630
|
+
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  {</div>
|
|
631
|
+
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">"MEMCPY"</span>) != std::string::npos)</div>
|
|
632
|
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>;</div>
|
|
633
|
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">"MEMSET"</span>) != std::string::npos)</div>
|
|
634
|
+
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>;</div>
|
|
635
|
+
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">"STRCPY"</span>) != std::string::npos)</div>
|
|
636
|
+
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>;</div>
|
|
637
|
+
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">"STRCAT"</span>) != std::string::npos)</div>
|
|
638
|
+
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>;</div>
|
|
639
|
+
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div>
|
|
640
|
+
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="comment">// 1. memcpy functions like memcpy_chk, strncpy, annotate("MEMCPY"), annotate("BUF_CHECK:Arg0, Arg2"), annotate("BUF_CHECK:Arg1, Arg2")</span></div>
|
|
641
|
+
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>)</div>
|
|
642
|
+
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div>
|
|
643
|
+
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun->getName()) == 0)</div>
|
|
644
|
+
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  {</div>
|
|
645
|
+
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="comment">// if it is not in the rules, we do not check it</span></div>
|
|
646
|
+
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <span class="stringliteral">"Warning: "</span> << fun->getName() << <span class="stringliteral">" is not in the rules, please implement it\n"</span>;</div>
|
|
647
|
+
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">return</span>;</div>
|
|
648
|
+
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div>
|
|
649
|
+
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="comment">// call parseMemcpyBufferCheckArgs to parse the BUF_CHECK annotation</span></div>
|
|
650
|
+
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  std::vector<std::pair<u32_t, u32_t>> args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun->getName());</div>
|
|
651
|
+
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="comment">// loop the args and check the offset</span></div>
|
|
652
|
+
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
|
|
653
|
+
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  {</div>
|
|
654
|
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  IntervalValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
|
|
655
|
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
|
|
656
|
+
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div>
|
|
657
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div>
|
|
658
|
+
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="comment">// 2. memset functions like memset, memset_chk, annotate("MEMSET"), annotate("BUF_CHECK:Arg0, Arg2")</span></div>
|
|
659
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>)</div>
|
|
660
|
+
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div>
|
|
661
|
+
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun->getName()) == 0)</div>
|
|
662
|
+
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div>
|
|
663
|
+
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="comment">// if it is not in the rules, we do not check it</span></div>
|
|
664
|
+
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <span class="stringliteral">"Warning: "</span> << fun->getName() << <span class="stringliteral">" is not in the rules, please implement it\n"</span>;</div>
|
|
665
|
+
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">return</span>;</div>
|
|
666
|
+
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div>
|
|
667
|
+
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  std::vector<std::pair<u32_t, u32_t>> args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun->getName());</div>
|
|
668
|
+
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="comment">// loop the args and check the offset</span></div>
|
|
669
|
+
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
|
|
670
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  {</div>
|
|
671
|
+
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  IntervalValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
|
|
672
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
|
|
673
|
+
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div>
|
|
674
|
+
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div>
|
|
675
|
+
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>)</div>
|
|
676
|
+
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  {</div>
|
|
677
|
+
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">detectStrcpy</a>(call);</div>
|
|
678
|
+
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div>
|
|
679
|
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>)</div>
|
|
680
|
+
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div>
|
|
681
|
+
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">detectStrcat</a>(call);</div>
|
|
682
|
+
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div>
|
|
683
|
+
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">else</span></div>
|
|
684
|
+
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  {</div>
|
|
685
|
+
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  </div>
|
|
686
|
+
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div>
|
|
687
|
+
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">return</span>;</div>
|
|
688
|
+
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> }</div>
|
|
689
|
+
</div><!-- fragment -->
|
|
345
690
|
</div>
|
|
346
691
|
</div>
|
|
347
692
|
<a id="afa6b30220b0b3261205a909def9ca44e"></a>
|
|
@@ -421,16 +766,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
421
766
|
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addrID: <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(gep->getLHSVarID()))</div>
|
|
422
767
|
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div>
|
|
423
768
|
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(addrID);</div>
|
|
424
|
-
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <
|
|
425
|
-
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> 
|
|
426
|
-
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> 
|
|
427
|
-
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> 
|
|
428
|
-
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
|
|
769
|
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">_addrToGep</a>[objId] = gep;</div>
|
|
770
|
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div>
|
|
771
|
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div>
|
|
772
|
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
|
|
429
773
|
</div><!-- fragment -->
|
|
430
774
|
</div>
|
|
431
775
|
</div>
|
|
432
|
-
<a id="
|
|
433
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
776
|
+
<a id="aed959fce840cbea32d3567ee1ac01e82"></a>
|
|
777
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aed959fce840cbea32d3567ee1ac01e82">◆ </a></span>initExtAPIBufOverflowCheckRules()</h2>
|
|
434
778
|
|
|
435
779
|
<div class="memitem">
|
|
436
780
|
<div class="memproto">
|
|
@@ -439,7 +783,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
439
783
|
<td class="mlabels-left">
|
|
440
784
|
<table class="memname">
|
|
441
785
|
<tr>
|
|
442
|
-
<td class="memname">void SVF::BufOverflowChecker::
|
|
786
|
+
<td class="memname">void SVF::BufOverflowChecker::initExtAPIBufOverflowCheckRules </td>
|
|
443
787
|
<td>(</td>
|
|
444
788
|
<td class="paramname"></td><td>)</td>
|
|
445
789
|
<td></td>
|
|
@@ -447,23 +791,356 @@ Additional Inherited Members</h2></td></tr>
|
|
|
447
791
|
</table>
|
|
448
792
|
</td>
|
|
449
793
|
<td class="mlabels-right">
|
|
450
|
-
<span class="mlabels"><span class="mlabel">
|
|
794
|
+
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
|
451
795
|
</tr>
|
|
452
796
|
</table>
|
|
453
797
|
</div><div class="memdoc">
|
|
798
|
+
<p>the map of ext apis of buffer overflow checking rules</p>
|
|
799
|
+
<p>it initialize the rules of extapis about buffer overflow checking e.g. memcpy(dst, src, sz) -> we check allocSize(dst)>=sz and allocSize(src)>=sz </p>
|
|
454
800
|
|
|
455
|
-
<p>
|
|
801
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00076">76</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
802
|
+
<div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
|
|
803
|
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">//void llvm_memcpy_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
|
|
804
|
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memcpy_p0i8_p0i8_i64"</span>] = {{0, 2}, {1,2}};</div>
|
|
805
|
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">//void llvm_memcpy_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
|
|
806
|
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memcpy_p0_p0_i64"</span>] = {{0, 2}, {1,2}};</div>
|
|
807
|
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">//void llvm_memcpy_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
|
|
808
|
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memcpy_p0i8_p0i8_i32"</span>] = {{0, 2}, {1,2}};</div>
|
|
809
|
+
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">//void llvm_memcpy(char* dst, char* src, int sz, int flag){}</span></div>
|
|
810
|
+
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memcpy"</span>] = {{0, 2}, {1,2}};</div>
|
|
811
|
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="comment">//void llvm_memmove(char* dst, char* src, int sz, int flag){}</span></div>
|
|
812
|
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memmove"</span>] = {{0, 2}, {1,2}};</div>
|
|
813
|
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">//void llvm_memmove_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
|
|
814
|
+
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memmove_p0i8_p0i8_i64"</span>] = {{0, 2}, {1,2}};</div>
|
|
815
|
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">//void llvm_memmove_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
|
|
816
|
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memmove_p0_p0_i64"</span>] = {{0, 2}, {1,2}};</div>
|
|
817
|
+
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">//void llvm_memmove_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
|
|
818
|
+
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memmove_p0i8_p0i8_i32"</span>] = {{0, 2}, {1,2}};</div>
|
|
819
|
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">//void __memcpy_chk(char* dst, char* src, int sz, int flag){}</span></div>
|
|
820
|
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"__memcpy_chk"</span>] = {{0, 2}, {1,2}};</div>
|
|
821
|
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">//void *memmove(void *str1, const void *str2, unsigned long n)</span></div>
|
|
822
|
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"memmove"</span>] = {{0, 2}, {1,2}};</div>
|
|
823
|
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">//void bcopy(const void *s1, void *s2, unsigned long n){}</span></div>
|
|
824
|
+
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"bcopy"</span>] = {{0, 2}, {1,2}};</div>
|
|
825
|
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">//void *memccpy( void * restrict dest, const void * restrict src, int c, unsigned long count)</span></div>
|
|
826
|
+
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"memccpy"</span>] = {{0, 3}, {1,3}};</div>
|
|
827
|
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">//void __memmove_chk(char* dst, char* src, int sz){}</span></div>
|
|
828
|
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"__memmove_chk"</span>] = {{0, 2}, {1,2}};</div>
|
|
829
|
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">//void llvm_memset(char* dst, char elem, int sz, int flag){}</span></div>
|
|
830
|
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memset"</span>] = {{0, 2}};</div>
|
|
831
|
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">//void llvm_memset_p0i8_i32(char* dst, char elem, int sz, int flag){}</span></div>
|
|
832
|
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memset_p0i8_i32"</span>] = {{0, 2}};</div>
|
|
833
|
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">//void llvm_memset_p0i8_i64(char* dst, char elem, int sz, int flag){}</span></div>
|
|
834
|
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memset_p0i8_i64"</span>] = {{0, 2}};</div>
|
|
835
|
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="comment">//void llvm_memset_p0_i64(char* dst, char elem, int sz, int flag){}</span></div>
|
|
836
|
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"llvm_memset_p0_i64"</span>] = {{0, 2}};</div>
|
|
837
|
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">//char *__memset_chk(char * dest, int c, unsigned long destlen, int flag)</span></div>
|
|
838
|
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"__memset_chk"</span>] = {{0, 2}};</div>
|
|
839
|
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">//char *wmemset(wchar_t * dst, wchar_t elem, int sz, int flag) {</span></div>
|
|
840
|
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"wmemset"</span>] = {{0, 2}};</div>
|
|
841
|
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">//char *strncpy(char *dest, const char *src, unsigned long n)</span></div>
|
|
842
|
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"strncpy"</span>] = {{0, 2}, {1,2}};</div>
|
|
843
|
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">//unsigned long iconv(void* cd, char **restrict inbuf, unsigned long *restrict inbytesleft, char **restrict outbuf, unsigned long *restrict outbytesleft)</span></div>
|
|
844
|
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">"iconv"</span>] = {{1, 2}, {3, 4}};</div>
|
|
845
|
+
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
|
|
846
|
+
</div><!-- fragment -->
|
|
847
|
+
</div>
|
|
848
|
+
</div>
|
|
849
|
+
<a id="af0e2276001df7d51c45b22d5d11ca09b"></a>
|
|
850
|
+
<h2 class="memtitle"><span class="permalink"><a href="#af0e2276001df7d51c45b22d5d11ca09b">◆ </a></span>initExtFunMap()</h2>
|
|
456
851
|
|
|
457
|
-
<
|
|
458
|
-
<div class="
|
|
459
|
-
<
|
|
460
|
-
<
|
|
852
|
+
<div class="memitem">
|
|
853
|
+
<div class="memproto">
|
|
854
|
+
<table class="mlabels">
|
|
855
|
+
<tr>
|
|
856
|
+
<td class="mlabels-left">
|
|
857
|
+
<table class="memname">
|
|
858
|
+
<tr>
|
|
859
|
+
<td class="memname">void SVF::BufOverflowChecker::initExtFunMap </td>
|
|
860
|
+
<td>(</td>
|
|
861
|
+
<td class="paramname"></td><td>)</td>
|
|
862
|
+
<td></td>
|
|
863
|
+
</tr>
|
|
864
|
+
</table>
|
|
865
|
+
</td>
|
|
866
|
+
<td class="mlabels-right">
|
|
867
|
+
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
|
|
868
|
+
</tr>
|
|
869
|
+
</table>
|
|
870
|
+
</div><div class="memdoc">
|
|
871
|
+
<p>the map of external function to its API type</p>
|
|
872
|
+
<p>it initialize the ext apis about buffer overflow checking </p>
|
|
873
|
+
|
|
874
|
+
<p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#a5715b1a5994715f19b17687b9e91d7c8">SVF::AbstractExecution</a>.</p>
|
|
875
|
+
|
|
876
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00133">133</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
|
|
877
|
+
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> {</div>
|
|
878
|
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div>
|
|
879
|
+
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">auto</span> sse_scanf = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
880
|
+
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div>
|
|
881
|
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">//scanf("%d", &data);</span></div>
|
|
882
|
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (cs.arg_size() < 2) <span class="keywordflow">return</span>;</div>
|
|
883
|
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
884
|
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
|
|
885
|
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
|
|
886
|
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div>
|
|
887
|
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  BufOverflowException bug(<span class="stringliteral">"scanf may cause buffer overflow.\n"</span>, 0, 0, 0, 0, cs.getArgument(1));</div>
|
|
888
|
+
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
889
|
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span>;</div>
|
|
890
|
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div>
|
|
891
|
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">else</span></div>
|
|
892
|
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  {</div>
|
|
893
|
+
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
|
|
894
|
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
|
|
895
|
+
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div>
|
|
896
|
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
|
|
897
|
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  IntervalValue range = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-><a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
|
|
898
|
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  es.store(vaddr, range);</div>
|
|
899
|
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div>
|
|
900
|
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div>
|
|
901
|
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  };</div>
|
|
902
|
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">auto</span> sse_fscanf = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
903
|
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div>
|
|
904
|
+
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">//fscanf(stdin, "%d", &data);</span></div>
|
|
905
|
+
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span> (cs.arg_size() < 3) <span class="keywordflow">return</span>;</div>
|
|
906
|
+
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
907
|
+
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
|
|
908
|
+
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
|
|
909
|
+
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div>
|
|
910
|
+
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  BufOverflowException bug(<span class="stringliteral">"scanf may cause buffer overflow.\n"</span>, 0, 0, 0, 0, cs.getArgument(2));</div>
|
|
911
|
+
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
912
|
+
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">return</span>;</div>
|
|
913
|
+
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div>
|
|
914
|
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span></div>
|
|
915
|
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div>
|
|
916
|
+
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <a class="code" href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
|
|
917
|
+
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
|
|
918
|
+
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div>
|
|
919
|
+
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
|
|
920
|
+
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  IntervalValue range = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-><a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
|
|
921
|
+
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  es.store(vaddr, range);</div>
|
|
922
|
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div>
|
|
923
|
+
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div>
|
|
924
|
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  };</div>
|
|
925
|
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  </div>
|
|
926
|
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__isoc99_fscanf"</span>] = sse_fscanf;</div>
|
|
927
|
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__isoc99_scanf"</span>] = sse_scanf;</div>
|
|
928
|
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__isoc99_vscanf"</span>] = sse_scanf;</div>
|
|
929
|
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"fscanf"</span>] = sse_fscanf;</div>
|
|
930
|
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"scanf"</span>] = sse_scanf;</div>
|
|
931
|
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"sscanf"</span>] = sse_scanf;</div>
|
|
932
|
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__isoc99_sscanf"</span>] = sse_scanf;</div>
|
|
933
|
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"vscanf"</span>] = sse_scanf;</div>
|
|
934
|
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
|
|
935
|
+
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">auto</span> sse_fread = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
936
|
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div>
|
|
937
|
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (cs.arg_size() < 3) <span class="keywordflow">return</span>;</div>
|
|
938
|
+
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
939
|
+
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_count_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
|
|
940
|
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
|
|
941
|
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  IntervalValue block_count = es[block_count_id];</div>
|
|
942
|
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  IntervalValue block_size = es[block_size_id];</div>
|
|
943
|
+
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  IntervalValue block_byte = block_count * block_size;</div>
|
|
944
|
+
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), block_byte, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
945
|
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  };</div>
|
|
946
|
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"fread"</span>] = sse_fread;</div>
|
|
947
|
+
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  </div>
|
|
948
|
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keyword">auto</span> sse_sprintf = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
949
|
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div>
|
|
950
|
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// printf is difficult to predict since it has no byte size arguments</span></div>
|
|
951
|
+
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  };</div>
|
|
952
|
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  </div>
|
|
953
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">auto</span> sse_snprintf = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
954
|
+
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div>
|
|
955
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (cs.arg_size() < 2) <span class="keywordflow">return</span>;</div>
|
|
956
|
+
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
957
|
+
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
|
|
958
|
+
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
|
|
959
|
+
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// get elem size of arg2</span></div>
|
|
960
|
+
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
|
|
961
|
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> (cs.getArgument(2)->getType()->isArrayTy())</div>
|
|
962
|
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div>
|
|
963
|
+
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  elemSize = SVFUtil::dyn_cast<SVFArrayType>(cs.getArgument(2)->getType())->getTypeOfElement()->getByteSize();</div>
|
|
964
|
+
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div>
|
|
965
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cs.getArgument(2)->getType()->isPointerTy())</div>
|
|
966
|
+
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div>
|
|
967
|
+
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  elemSize = <a class="code" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2)))-><a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
|
|
968
|
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  }</div>
|
|
969
|
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">else</span></div>
|
|
970
|
+
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div>
|
|
971
|
+
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span>;</div>
|
|
972
|
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// assert(false && "we cannot support this type");</span></div>
|
|
973
|
+
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div>
|
|
974
|
+
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  IntervalValue size = es[size_id] * IntervalValue(elemSize) - IntervalValue(1);</div>
|
|
975
|
+
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (!es.inVarToAddrsTable(dst_id))</div>
|
|
976
|
+
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div>
|
|
977
|
+
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">Options::BufferOverflowCheck</a>())</div>
|
|
978
|
+
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div>
|
|
979
|
+
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  BufOverflowException bug(</div>
|
|
980
|
+
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="stringliteral">"snprintf dst_id or dst is not defined nor initializesd.\n"</span>,</div>
|
|
981
|
+
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  0, 0, 0, 0, cs.getArgument(0));</div>
|
|
982
|
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
983
|
+
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">return</span>;</div>
|
|
984
|
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div>
|
|
985
|
+
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div>
|
|
986
|
+
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), size, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
987
|
+
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  };</div>
|
|
988
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__snprintf_chk"</span>] = sse_snprintf;</div>
|
|
989
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__vsprintf_chk"</span>] = sse_sprintf;</div>
|
|
990
|
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__sprintf_chk"</span>] = sse_sprintf;</div>
|
|
991
|
+
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"snprintf"</span>] = sse_snprintf;</div>
|
|
992
|
+
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"sprintf"</span>] = sse_sprintf;</div>
|
|
993
|
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"vsprintf"</span>] = sse_sprintf;</div>
|
|
994
|
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"vsnprintf"</span>] = sse_snprintf;</div>
|
|
995
|
+
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__vsnprintf_chk"</span>] = sse_snprintf;</div>
|
|
996
|
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"swprintf"</span>] = sse_snprintf;</div>
|
|
997
|
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"_snwprintf"</span>] = sse_snprintf;</div>
|
|
998
|
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  </div>
|
|
999
|
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  </div>
|
|
1000
|
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">auto</span> sse_itoa = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
1001
|
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  {</div>
|
|
1002
|
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// itoa(num, ch, 10);</span></div>
|
|
1003
|
+
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// num: int, ch: char*, 10 is decimal</span></div>
|
|
1004
|
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (cs.arg_size() < 3) <span class="keywordflow">return</span>;</div>
|
|
1005
|
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
1006
|
+
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
|
|
1007
|
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div>
|
|
1008
|
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) es[num_id].getNumeral();</div>
|
|
1009
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> snum = std::to_string(num);</div>
|
|
1010
|
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(1), IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)snum.size()), <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
1011
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  };</div>
|
|
1012
|
+
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"itoa"</span>] = sse_itoa;</div>
|
|
1013
|
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  </div>
|
|
1014
|
+
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div>
|
|
1015
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">auto</span> sse_strlen = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
1016
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div>
|
|
1017
|
+
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// check the arg size</span></div>
|
|
1018
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (cs.arg_size() < 1) <span class="keywordflow">return</span>;</div>
|
|
1019
|
+
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> SVFValue* strValue = cs.getArgument(0);</div>
|
|
1020
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
1021
|
+
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  IntervalValue dst_size = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(strValue);</div>
|
|
1022
|
+
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
|
|
1023
|
+
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (strValue->getType()->isArrayTy())</div>
|
|
1024
|
+
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div>
|
|
1025
|
+
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  elemSize = SVFUtil::dyn_cast<SVFArrayType>(strValue->getType())->getTypeOfElement()->getByteSize();</div>
|
|
1026
|
+
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div>
|
|
1027
|
+
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue->getType()->isPointerTy())</div>
|
|
1028
|
+
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div>
|
|
1029
|
+
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  elemSize = <a class="code" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(strValue))-><a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
|
|
1030
|
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div>
|
|
1031
|
+
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
|
|
1032
|
+
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  es[lhsId] = dst_size / IntervalValue(elemSize);</div>
|
|
1033
|
+
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  };</div>
|
|
1034
|
+
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"strlen"</span>] = sse_strlen;</div>
|
|
1035
|
+
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"wcslen"</span>] = sse_strlen;</div>
|
|
1036
|
+
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div>
|
|
1037
|
+
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">auto</span> sse_recv = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
1038
|
+
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div>
|
|
1039
|
+
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// recv(sockfd, buf, len, flags);</span></div>
|
|
1040
|
+
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (cs.arg_size() < 4) <span class="keywordflow">return</span>;</div>
|
|
1041
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
1042
|
+
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> len_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
|
|
1043
|
+
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  IntervalValue len = es[len_id] - IntervalValue(1);</div>
|
|
1044
|
+
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
|
|
1045
|
+
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  es[lhsId] = len;</div>
|
|
1046
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(1), len, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));;</div>
|
|
1047
|
+
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  };</div>
|
|
1048
|
+
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"recv"</span>] = sse_recv;</div>
|
|
1049
|
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"__recv"</span>] = sse_recv;</div>
|
|
1050
|
+
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keyword">auto</span> safe_bufaccess = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
1051
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div>
|
|
1052
|
+
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast<CallICFGNode>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
1053
|
+
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a>.erase(callNode);</div>
|
|
1054
|
+
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">//void SAFE_BUFACCESS(void* data, int size);</span></div>
|
|
1055
|
+
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">if</span> (cs.arg_size() < 2) <span class="keywordflow">return</span>;</div>
|
|
1056
|
+
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
1057
|
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
|
|
1058
|
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  IntervalValue val = es[size_id];</div>
|
|
1059
|
+
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">if</span> (val.isBottom())</div>
|
|
1060
|
+
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div>
|
|
1061
|
+
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  val = IntervalValue(0);</div>
|
|
1062
|
+
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"SAFE_BUFACCESS size is bottom"</span>);</div>
|
|
1063
|
+
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div>
|
|
1064
|
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
1065
|
+
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (isSafe)</div>
|
|
1066
|
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div>
|
|
1067
|
+
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  std::cout << <span class="stringliteral">"safe buffer access success\n"</span>;</div>
|
|
1068
|
+
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span>;</div>
|
|
1069
|
+
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div>
|
|
1070
|
+
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">else</span></div>
|
|
1071
|
+
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div>
|
|
1072
|
+
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">"this SAFE_BUFACCESS should be a safe access but detected buffer overflow. Pos: "</span>;</div>
|
|
1073
|
+
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  err_msg += cs.getInstruction()->getSourceLoc();</div>
|
|
1074
|
+
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  std::cerr << err_msg << std::endl;</div>
|
|
1075
|
+
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  assert(<span class="keyword">false</span>);</div>
|
|
1076
|
+
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div>
|
|
1077
|
+
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  };</div>
|
|
1078
|
+
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"SAFE_BUFACCESS"</span>] = safe_bufaccess;</div>
|
|
1079
|
+
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  </div>
|
|
1080
|
+
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">auto</span> unsafe_bufaccess = [&](<span class="keyword">const</span> CallSite &cs)</div>
|
|
1081
|
+
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div>
|
|
1082
|
+
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast<CallICFGNode>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
1083
|
+
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a>.erase(callNode);</div>
|
|
1084
|
+
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">//void UNSAFE_BUFACCESS(void* data, int size);</span></div>
|
|
1085
|
+
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">if</span> (cs.arg_size() < 2) <span class="keywordflow">return</span>;</div>
|
|
1086
|
+
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  IntervalExeState &es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-><a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
|
|
1087
|
+
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
|
|
1088
|
+
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  IntervalValue val = es[size_id];</div>
|
|
1089
|
+
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">if</span> (val.isBottom())</div>
|
|
1090
|
+
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div>
|
|
1091
|
+
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"UNSAFE_BUFACCESS size is bottom"</span>);</div>
|
|
1092
|
+
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div>
|
|
1093
|
+
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
|
|
1094
|
+
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span> (!isSafe)</div>
|
|
1095
|
+
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div>
|
|
1096
|
+
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  std::cout << <span class="stringliteral">"detect buffer overflow success\n"</span>;</div>
|
|
1097
|
+
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span>;</div>
|
|
1098
|
+
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div>
|
|
1099
|
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">else</span></div>
|
|
1100
|
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  {</div>
|
|
1101
|
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// if it is safe, it means it is wrongly labeled, assert false.</span></div>
|
|
1102
|
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">"this UNSAFE_BUFACCESS should be a buffer overflow but not detected. Pos: "</span>;</div>
|
|
1103
|
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  err_msg += cs.getInstruction()->getSourceLoc();</div>
|
|
1104
|
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  std::cerr << err_msg << std::endl;</div>
|
|
1105
|
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  assert(<span class="keyword">false</span>);</div>
|
|
1106
|
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div>
|
|
1107
|
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  };</div>
|
|
1108
|
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">"UNSAFE_BUFACCESS"</span>] = unsafe_bufaccess;</div>
|
|
1109
|
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  </div>
|
|
1110
|
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="comment">// init _checkpoint_names</span></div>
|
|
1111
|
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a>.insert(<span class="stringliteral">"SAFE_BUFACCESS"</span>);</div>
|
|
1112
|
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a>.insert(<span class="stringliteral">"UNSAFE_BUFACCESS"</span>);</div>
|
|
1113
|
+
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
|
|
461
1114
|
</div><!-- fragment -->
|
|
462
1115
|
</div>
|
|
463
1116
|
</div>
|
|
464
1117
|
<h2 class="groupheader">Member Data Documentation</h2>
|
|
465
|
-
<a id="
|
|
466
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1118
|
+
<a id="a0088456e712c555cbfba6203aec38037"></a>
|
|
1119
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a0088456e712c555cbfba6203aec38037">◆ </a></span>_addrToGep</h2>
|
|
1120
|
+
|
|
1121
|
+
<div class="memitem">
|
|
1122
|
+
<div class="memproto">
|
|
1123
|
+
<table class="mlabels">
|
|
1124
|
+
<tr>
|
|
1125
|
+
<td class="mlabels-left">
|
|
1126
|
+
<table class="memname">
|
|
1127
|
+
<tr>
|
|
1128
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, const <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a>*> SVF::BufOverflowChecker::_addrToGep</td>
|
|
1129
|
+
</tr>
|
|
1130
|
+
</table>
|
|
1131
|
+
</td>
|
|
1132
|
+
<td class="mlabels-right">
|
|
1133
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1134
|
+
</tr>
|
|
1135
|
+
</table>
|
|
1136
|
+
</div><div class="memdoc">
|
|
1137
|
+
|
|
1138
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00201">201</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
|
|
1139
|
+
|
|
1140
|
+
</div>
|
|
1141
|
+
</div>
|
|
1142
|
+
<a id="af83b65ed98cd4e0f6cd92962e7392d4d"></a>
|
|
1143
|
+
<h2 class="memtitle"><span class="permalink"><a href="#af83b65ed98cd4e0f6cd92962e7392d4d">◆ </a></span>_extAPIBufOverflowCheckRules</h2>
|
|
467
1144
|
|
|
468
1145
|
<div class="memitem">
|
|
469
1146
|
<div class="memproto">
|
|
@@ -472,7 +1149,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
472
1149
|
<td class="mlabels-left">
|
|
473
1150
|
<table class="memname">
|
|
474
1151
|
<tr>
|
|
475
|
-
<td class="memname">
|
|
1152
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>, std::vector<std::pair<<a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>, <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>> > > SVF::BufOverflowChecker::_extAPIBufOverflowCheckRules</td>
|
|
476
1153
|
</tr>
|
|
477
1154
|
</table>
|
|
478
1155
|
</td>
|
|
@@ -482,7 +1159,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
482
1159
|
</table>
|
|
483
1160
|
</div><div class="memdoc">
|
|
484
1161
|
|
|
485
|
-
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#
|
|
1162
|
+
<p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00202">202</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
|
|
486
1163
|
|
|
487
1164
|
</div>
|
|
488
1165
|
</div>
|
|
@@ -491,17 +1168,54 @@ Additional Inherited Members</h2></td></tr>
|
|
|
491
1168
|
<li>/home/runner/work/SVF/SVF/svf/lib/AE/Svfexe/<a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a></li>
|
|
492
1169
|
</ul>
|
|
493
1170
|
</div><!-- contents -->
|
|
494
|
-
<div class="ttc" id="
|
|
495
|
-
<div class="ttc" id="
|
|
1171
|
+
<div class="ttc" id="aclassSVF_1_1SVFType_html_a95b8031f1e15d49c7d68628be1d05aae"><div class="ttname"><a href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">SVF::SVFType::getByteSize</a></div><div class="ttdeci">u32_t getByteSize() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00244">SVFType.h:244</a></div></div>
|
|
1172
|
+
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_afbb9ff1f2c47d2afda117bf63a80a1a7"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">SVF::SVFIR2ItvExeState::getRangeLimitFromType</a></div><div class="ttdeci">IntervalValue getRangeLimitFromType(const SVFType *type)</div><div class="ttdoc">Return the value range of Integer SVF Type, e.g. unsigned i8 Type->[0, 255], signed i8 Type->[-128,...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00050">SVFIR2ItvExeState.cpp:50</a></div></div>
|
|
1173
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ad36d48c0ef82de915d9339c4f47cbd70"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ad36d48c0ef82de915d9339c4f47cbd70">SVF::AbstractExecution::_kind</a></div><div class="ttdeci">AEKind _kind</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00349">AbstractExecution.h:349</a></div></div>
|
|
1174
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a99be86146ad4ddbdb900cdb6b324f943"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">SVF::AbstractExecution::getStrlen</a></div><div class="ttdeci">IntervalValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01516">AbstractExecution.cpp:1516</a></div></div>
|
|
1175
|
+
<div class="ttc" id="aCommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
|
|
1176
|
+
<div class="ttc" id="aclassSVF_1_1ExeState_html_a78038dd4884a501cfc94f073021eac96"><div class="ttname"><a href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">SVF::ExeState::Addrs</a></div><div class="ttdeci">AddressValue Addrs</div><div class="ttdef"><b>Definition:</b> <a href="ExeState_8h_source.html#l00053">ExeState.h:53</a></div></div>
|
|
1177
|
+
<div class="ttc" id="aclassSVF_1_1IRGraph_html_a43514023a4f4d0c32f536f51443b0efc"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const SVFValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00137">IRGraph.h:137</a></div></div>
|
|
1178
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">SVF::AbstractExecution::UNCLASSIFIED</a></div><div class="ttdeci">@ UNCLASSIFIED</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
1179
|
+
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
|
|
1180
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a5e24bceb3d6961117651dbc65e9a097a"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">SVF::AbstractExecution::_svfir2ExeState</a></div><div class="ttdeci">SVFIR2ItvExeState * _svfir2ExeState</div><div class="ttdoc">Execution State, used to store the Interval Value of every SVF variable.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00344">AbstractExecution.h:344</a></div></div>
|
|
1181
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ad8b2f2fa6f22b9d1655135c819cbad8a"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">SVF::BufOverflowChecker::detectStrcpy</a></div><div class="ttdeci">bool detectStrcpy(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00123">BufOverflowChecker.cpp:123</a></div></div>
|
|
496
1182
|
<div class="ttc" id="anamespaceSVF_html_a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd"><div class="ttname"><a href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">SVF::AEKind::BufOverflowChecker</a></div><div class="ttdeci">@ BufOverflowChecker</div></div>
|
|
1183
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a32abc52bc54745027aa2daa67a8278f3"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">SVF::AbstractExecution::_checkpoint_names</a></div><div class="ttdeci">Set< std::string > _checkpoint_names</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00384">AbstractExecution.h:384</a></div></div>
|
|
497
1184
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a48fec38aad1c2a9a140ee94e9fdd7e9b"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">SVF::SVFIR2ItvExeState::getAddrs</a></div><div class="ttdeci">Addrs & getAddrs(u32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00107">SVFIR2ItvExeState.h:107</a></div></div>
|
|
498
|
-
<div class="ttc" id="
|
|
1185
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aed959fce840cbea32d3567ee1ac01e82"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">SVF::BufOverflowChecker::initExtAPIBufOverflowCheckRules</a></div><div class="ttdeci">void initExtAPIBufOverflowCheckRules()</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00076">BufOverflowChecker.cpp:76</a></div></div>
|
|
1186
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aa68f8aef09481d7c07dc59d7dfb83822"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">SVF::BufOverflowChecker::detectStrcat</a></div><div class="ttdeci">bool detectStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00372">BufOverflowChecker.cpp:372</a></div></div>
|
|
1187
|
+
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00241">SVFUtil.h:241</a></div></div>
|
|
1188
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a1d725fe50a7084bfa18bd47b941af885"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a1d725fe50a7084bfa18bd47b941af885">SVF::AbstractExecution::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l00887">AbstractExecution.cpp:887</a></div></div>
|
|
499
1189
|
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a66c426719f583653cb70189f01d6fda5"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">SVF::SVFIR2ItvExeState::getInternalID</a></div><div class="ttdeci">static u32_t getInternalID(u32_t idx)</div><div class="ttdoc">Return the internal index if idx is an address otherwise return the value of idx.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00166">SVFIR2ItvExeState.h:166</a></div></div>
|
|
500
|
-
<div class="ttc" id="
|
|
501
|
-
<div class="ttc" id="
|
|
502
|
-
<div class="ttc" id="
|
|
503
|
-
<div class="ttc" id="
|
|
1190
|
+
<div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
1191
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a888fd56160afe0d431c47bcf10674dc0"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">SVF::AbstractExecution::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01663">AbstractExecution.cpp:1663</a></div></div>
|
|
1192
|
+
<div class="ttc" id="aclassSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00092">ICFG.h:92</a></div></div>
|
|
1193
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ace5ad1d6a63d5392044fee2ecbc9236e"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">SVF::BufOverflowChecker::canSafelyAccessMemory</a></div><div class="ttdeci">bool canSafelyAccessMemory(const SVFValue *value, const IntervalValue &len, const ICFGNode *curNode)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00485">BufOverflowChecker.cpp:485</a></div></div>
|
|
1194
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a0a64bef0cc898059c50f6aec470cc6d9"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">SVF::AbstractExecution::_checkpoints</a></div><div class="ttdeci">Set< const CallICFGNode * > _checkpoints</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00383">AbstractExecution.h:383</a></div></div>
|
|
1195
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_af83b65ed98cd4e0f6cd92962e7392d4d"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">SVF::BufOverflowChecker::_extAPIBufOverflowCheckRules</a></div><div class="ttdeci">Map< std::string, std::vector< std::pair< u32_t, u32_t > > > _extAPIBufOverflowCheckRules</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00202">BufOverflowChecker.h:202</a></div></div>
|
|
1196
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ac1742440725909fee77526726424d135"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">SVF::AbstractExecution::_func_map</a></div><div class="ttdeci">Map< std::string, std::function< void(const CallSite &)> > _func_map</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00382">AbstractExecution.h:382</a></div></div>
|
|
1197
|
+
<div class="ttc" id="aclassSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00406">GenericGraph.h:406</a></div></div>
|
|
1198
|
+
<div class="ttc" id="aclassSVF_1_1Options_html_afbe432aabda95308e2c190a04d227a6d"><div class="ttname"><a href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">SVF::Options::BufferOverflowCheck</a></div><div class="ttdeci">static const Option< bool > BufferOverflowCheck</div><div class="ttdoc">open buffer overflow checker, Default: false</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00271">Options.h:271</a></div></div>
|
|
1199
|
+
<div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00047">GeneralType.h:47</a></div></div>
|
|
1200
|
+
<div class="ttc" id="aclassSVF_1_1SVFIR_html_abda052b73e869ed6d7c139ad1528da11"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00170">SVFIR.h:170</a></div></div>
|
|
1201
|
+
<div class="ttc" id="acJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
|
|
1202
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_af0e2276001df7d51c45b22d5d11ca09b"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">SVF::BufOverflowChecker::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap() override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00133">BufOverflowChecker.cpp:133</a></div></div>
|
|
1203
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a84d8fedb7e9d23e92ffcb74b4cfbf78c"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">SVF::AbstractExecution::AbstractExecution</a></div><div class="ttdeci">AbstractExecution()</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l00123">AbstractExecution.cpp:123</a></div></div>
|
|
1204
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a49742e8c3a8fe598a0945a8d8ff394d0"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">SVF::AbstractExecution::_svfir</a></div><div class="ttdeci">SVFIR * _svfir</div><div class="ttdoc">protected data members, also used in subclasses</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00341">AbstractExecution.h:341</a></div></div>
|
|
1205
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">SVF::AbstractExecution::MEMSET</a></div><div class="ttdeci">@ MEMSET</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
1206
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">SVF::AbstractExecution::MEMCPY</a></div><div class="ttdeci">@ MEMCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
1207
|
+
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a56434326130c8127c823097ad764947b"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">SVF::SVFIR2ItvExeState::getEs</a></div><div class="ttdeci">IntervalExeState & getEs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00057">SVFIR2ItvExeState.h:57</a></div></div>
|
|
1208
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">SVF::AbstractExecution::STRCPY</a></div><div class="ttdeci">@ STRCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
1209
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43af"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">SVF::AbstractExecution::ExtAPIType</a></div><div class="ttdeci">ExtAPIType</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
504
1210
|
<div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
|
|
1211
|
+
<div class="ttc" id="aclassSVF_1_1SVFVar_html_ab6f95d3e7e099d75cfc9645ebc037047"><div class="ttname"><a href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">SVF::SVFVar::getType</a></div><div class="ttdeci">virtual const SVFType * getType() const</div><div class="ttdoc">Return type of the value.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00107">SVFVariables.h:107</a></div></div>
|
|
1212
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a0088456e712c555cbfba6203aec38037"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">SVF::BufOverflowChecker::_addrToGep</a></div><div class="ttdeci">Map< NodeID, const GepStmt * > _addrToGep</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00201">BufOverflowChecker.h:201</a></div></div>
|
|
1213
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">SVF::AbstractExecution::STRCAT</a></div><div class="ttdeci">@ STRCAT</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
|
|
1214
|
+
<div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00046">GeneralType.h:46</a></div></div>
|
|
1215
|
+
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream & errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>
|
|
1216
|
+
<div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ae002abb8711300ff52200f78f1463369"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">SVF::AbstractExecution::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01235">AbstractExecution.cpp:1235</a></div></div>
|
|
1217
|
+
<div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a999c358b80dd07591b0432eaa41c20c9"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">SVF::SVFIR2ItvExeState::inVarToAddrsTable</a></div><div class="ttdeci">bool inVarToAddrsTable(u32_t id) const</div><div class="ttdoc">whether the variable is in varToAddrs table</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00123">SVFIR2ItvExeState.h:123</a></div></div>
|
|
1218
|
+
<div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a7c11b81809cb087317cbea654a589f75"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">SVF::BufOverflowChecker::addBugToRecoder</a></div><div class="ttdeci">void addBugToRecoder(const BufOverflowException &e, const ICFGNode *node)</div></div>
|
|
505
1219
|
<!-- start footer part -->
|
|
506
1220
|
<hr class="footer"/><address class="footer"><small>
|
|
507
1221
|
Generated by  <a href="http://www.doxygen.org/index.html">
|