← Latest papers
💻 computer science

Directed Symbolic Execution for Path Feasibility Analysis]{Directed Symbolic Execution for Path Feasibility Analysis in Software Security Testing

This paper presents a directed symbolic execution method that enhances static security analysis by efficiently verifying interprocedural path feasibility through automated symbolization and loop iteration limits, thereby significantly improving precision while preserving recall on real-world benchmarks.

Original authors: Hovhannes Movsisyan, Hripsime Hovhannisyan, Tigran Avagyan, Hayk Aslanyan

Published 2026-10-22
📖 5 min read🧠 Deep dive

Original authors: Hovhannes Movsisyan, Hripsime Hovhannisyan, Tigran Avagyan, Hayk Aslanyan

Original paper licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ This is an AI-generated explanation of the paper below. It is not written or endorsed by the authors. For technical accuracy, refer to the original paper. Read full disclaimer

Software security is a constant battle against hidden flaws, much like a city planner trying to ensure every bridge and tunnel in a sprawling metropolis can withstand an earthquake. To do this, engineers use automated tools that scan code without actually running it, mapping out every possible route a program could take. These maps, known as control flow graphs, are incredibly detailed, showing how a program jumps from one instruction to another. However, these maps are often too thorough; they highlight paths that look dangerous on paper but are physically impossible to travel in the real world. This creates a flood of false alarms, forcing human experts to waste time investigating ghosts in the machine. The challenge, then, is to build a system that can quickly distinguish between a path that is merely possible in theory and one that is actually executable, without getting lost in the sheer volume of possibilities.

A team of researchers at the Russian-Armenian University has developed a new method to solve this problem, using a technique called directed symbolic execution. Imagine a traveler trying to verify if a specific route through a complex city exists. A standard approach would be to send out explorers to walk every single street in the city to see where they lead, a task that would take forever and overwhelm the team. Instead, the researchers' method acts like a guided tour. It takes a specific route reported by a security scanner and directs a virtual explorer to follow only that path, ignoring every other street that does not lead to the destination. This "directed" approach allows the system to check if the reported danger is real without wasting energy on irrelevant detours.

The core of this work lies in how the system handles the unknown. In real software, programs often deal with data that hasn't been set yet, or they call functions from outside libraries where the internal code is hidden. A traditional explorer might get stuck or give up when faced with these blanks. The researchers' system, however, is designed to treat these unknowns as flexible variables. If a program reads a memory location that hasn't been filled, the system assigns it a symbolic value, allowing it to explore every possible outcome that value could take. It does the same for the results of external functions and complex pointer arguments, which act like dynamic addresses that can point to different places depending on the situation. By automatically filling in these gaps with possibilities rather than concrete guesses, the system can trace the path through the code even when the full picture isn't visible.

Another major hurdle in navigating software is the loop, a section of code that repeats itself. In a real program, a loop might run a few times or millions of times, and in a symbolic analysis, it can trap the explorer in an infinite cycle. The researchers introduced a strategy to handle this by setting a limit on how many times the system will follow a loop before forcing it to exit. This is not a random cut-off; the system carefully records what happened during those iterations and then jumps to the point where the loop would naturally end. This allows the analysis to continue past the repetitive section without getting stuck, ensuring that the tool can reach the end of the path it is investigating.

To test their method, the team applied it to real-world software and a standard collection of test cases known as the Juliet suite. They first checked their system against paths extracted from the GNU Coreutils, a fundamental set of tools for the Linux operating system. The system successfully verified that 95.3% of these real-world paths were indeed feasible, proving it could handle complex, interwoven code. They then integrated their method with an existing security tool called MLH. Before this addition, the tool flagged 666 false alarms out of thousands of reports. After applying the new path feasibility analysis, those false alarms disappeared completely, while the tool continued to catch every single real vulnerability it had found before. This meant the precision of the security check jumped from 56.6% to 100% on the tested subset, with no loss in the ability to find real bugs.

The researchers also compared their approach against KLEEF, another specialized tool designed for similar tasks. When tested on reports generated by two other major security scanners, Infer and Clang Static Analyzer, the results were stark. KLEEF struggled significantly, failing to verify most of the true positive reports and causing its performance scores to plummet. In contrast, the new method maintained or slightly improved the performance of the original scanners. It successfully verified all the true vulnerabilities reported by the Infer tool and handled the vast majority of the Clang reports, demonstrating that it is robust enough to work with industrial-grade code.

The findings suggest that this directed approach offers a practical way to clean up the noise in software security testing. By focusing only on the paths that matter and automatically handling the complexities of memory and external functions, the method filters out impossible scenarios that waste human time. While the system does make a calculated trade-off by limiting loop iterations to keep things moving, the results show that this does not come at the cost of missing real dangers. The work provides a clear path forward for making automated security tools more reliable, ensuring that when a warning is raised, it is a genuine threat worth investigating.

Drowning in papers in your field?

Get daily digests of the most novel papers matching your research keywords — with technical summaries, in your language.

Try Digest →