Abstract
Historically program analysis methods are divided into two groups - static program analysis methods and dynamic program analysis methods. In this paper, we present a combined approach which allows to determine reachability for defects found by static program analysis techniques through applying dynamic symbolic execution for a program. This approach is an extension of our previously proposed approach for determining the reachability of specific program instructions using dynamic symbolic execution. We focus on several points in the program which include a defect initialisation point, a defect realisation point, and additional intermediate conditional jumps related to the defect in question. Our approach can be described as follows. First of all, we perform static analysis of program executable code to gather information on execution paths which guide dynamic symbolic execution to the point of defect initialisation. Next, we perform concolic execution in order to obtain an input data set to reach the defect initialisation point as well as the defect realisation point through intermediate conditional jumps. Concolic execution is guided by minimizing the distance from a previous path to the next defect trace point when selecting execution paths. The distance metric is calculated using an extended graph of the program combining its call graph and portions of its control flow graph that include all the paths through which the defect realisation point can be reached. We have evaluated our approach using several open source command line programs from Linux Debian. The evaluation confirms that the proposed approach can be used for classification of defects found by static program analysis. However, we have found some limitations, which prevent deploying this approach to industrial program analysis tools. Mitigation of these limitations serves as one of the possible directions for future research.
Highlights
Program analysis methods are divided into two groups – static program analysis methods and dynamic program analysis methods
We present a combined approach which allows to determine reachability for defects found by static program analysis techniques through applying dynamic symbolic execution for a program
We focus on several points in the program which include a defect initialisation point, a defect realisation point, and additional intermediate conditional jumps related to the defect in question
Summary
Сегодня постоянно растёт сложность разрабатываемого программного обеспечения, в связи с чем задача автоматического обнаружения и воспроизведения программных дефектов становится весьма актуальной. В работе [19], посвященной описанию инструмента Check’n’Crash, рассматривается подход совмещения статического анализа кода программ на языке Java с целью обнаружения критических ошибок времени исполнения и целенаправленной генерации тестовых сценариев для подтверждения найденных ошибок в процессе запуска сгенерированных тестов. В работе [23], посвященной инструменту DSDCrasher, который развивает идеи Check’n’Crash, описывается подход к обнаружению критических ошибок времени исполнения, приводящих к аварийному завершению программы путем совмещения статического анализа программ на языке Java, который получает ограничения на значения входных данных на основе извлечения инвариантов поведения программы из имеющихся тестов программы и автоматической генерации тестовых сценариев для проверки истинности найденных программных ошибок. В данной статье мы рассматриваем подход совмещения статического анализа исходного кода программ с целью обнаружения потенциальных дефектов, статического анализа бинарного кода программ с целью построения возможных путей до места потенциального дефекта и вычисления входных данных для достижения потенциальных дефектов с учётом прохождения трассы дефекта при помощи динамического символьного исполнения. Статья организованна следующим образом: в разделе 2 даётся краткий обзор понятий и подходов к анализу программ, в разделе 3 описывается предлагаемый нами подход к построению входных данных для подтверждения достижимости дефектов, в разделе 4 приводится описание и результаты экспериментальной проверки предложенного подхода, в разделе 5 делаются выводы и предлагаются дальнейшие направления исследований в области анализа программ на наличие дефектов
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have
More From: Proceedings of the Institute for System Programming of the RAS
Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.