Practical Symbolic Static Analysis for Effective Bug Detection

Պահպանված է:
Մատենագիտական մանրամասներ
Հրատարակված է:PQDT - Global (2025)
Հիմնական հեղինակ: Guo, Yiyuan
Հրապարակվել է:
ProQuest Dissertations & Theses
Խորագրեր:
Առցանց հասանելիություն:Citation/Abstract
Full Text - PDF
Full text outside of ProQuest
Ցուցիչներ: Ավելացրեք ցուցիչ
Չկան պիտակներ, Եղեք առաջինը, ով նշում է այս գրառումը!

MARC

LEADER 00000nab a2200000uu 4500
001 3266812750
003 UK-CbPIL
020 |a 9798297653887 
035 |a 3266812750 
045 2 |b d20250101  |b d20251231 
084 |a 189128  |2 nlm 
100 1 |a Guo, Yiyuan 
245 1 |a Practical Symbolic Static Analysis for Effective Bug Detection 
260 |b ProQuest Dissertations & Theses  |c 2025 
513 |a Dissertation/Thesis 
520 3 |a Static analysis is a powerful approach that automatically detects software bugs by analyzing the program behavior without requiring execution. Many static analysis techniques leverage symbolic methods to achieve greater precision, where they represent unknown values using symbolic variables and describe program states with symbolic formulas. When applying the symbolic method to detect bugs in realistic, million-line codebases, we encounter two challenges. First, the inherent limitations of static analysis often lead to the introduction of many under-constrained symbolic variables, causing significant imprecision. Second, the scalability of symbolic methods is influenced by their memory model, especially when intricate interactions between the memory and numeric values exist or when the analysis is path-sensitive. This thesis presents contributions to improve the precision and scalability of the symbolic method for enabling practical static bug detection at an industrial scale.The first work focuses on the static detection of divide-by-zero bugs, a client where the presence of under-constrained variables severely degrades the precision of symbolic methods. Based on an extensive empirical study, we propose to gather extra evidence about the under-constrained variables by inferring the programmers’ beliefs, which helps the static analyzer to significantly improve its precision by reporting bugs that are more likely to be true.The second work investigates the problem of static buffer overflow detection, which involves mutually dependent program properties of heap and numeric value. Existing methods either sacrifice precision or efficiency in addressing the mutual dependency. To address this dilemma, we propose a novel memory model based on heap disjointness and design a summary-based analysis algorithm, thereby enabling the precise and scalable detection of buffer overflow bugs.The third work concentrates on the scalability problem faced by the path-sensitive memory model in data dependence analysis. We observe that a key performance bottleneck of the analysis is to infer the condition under which storing to a memory location may overwrite its old containing value. Our solution improves the efficiency by decomposing the analysis efforts into stages: We handle most of the memory updates efficiently based on a must-kill relation among the heap stores, while reserving the expensive path-sensitive analysis for the rest. 
653 |a Motivation 
653 |a Programming languages 
653 |a Software upgrading 
653 |a Open source software 
653 |a Linux 
653 |a Computer science 
773 0 |t PQDT - Global  |g (2025) 
786 0 |d ProQuest  |t ProQuest Dissertations & Theses Global 
856 4 1 |3 Citation/Abstract  |u https://www.proquest.com/docview/3266812750/abstract/embedded/H09TXR3UUZB2ISDL?source=fedsrch 
856 4 0 |3 Full Text - PDF  |u https://www.proquest.com/docview/3266812750/fulltextPDF/embedded/H09TXR3UUZB2ISDL?source=fedsrch 
856 4 0 |3 Full text outside of ProQuest  |u https://doi.org/10.14711/thesis-hdl151260