Abstract
This paper presents a method for raising the level of abstraction of a program execution trace by building of an algorithm model. Dynamic analysis of executable files is often used to understand the logic of a program in the absence of source code. One of dynamic analysis methods is analysis of program execution traces containing register values and sequence of instructions executed by the processor. Traces are difficult for understanding because of the large amount of information. First stage of building an algorithm model is identification of function calls in the trace. Input and output parameters are determined for each call. If the trace has got several calls for the same function, the information about them is combined, defining low-level parameters, return value, and dependencies between inputs and outputs. Second stage is variable recovery. Low-level data elements are mapped on variables. Each processor has a fixed set of registers and limited memory and the number of higher-level variables in the program is not limited. Variable lifetime is evaluated for mapping variables to their locations. Lifetime is a range of trace step indexes from variable creation to its last usage. Return value and parameters of the function are recovered using its calling convention. Third stage is examination of library calls that are used in the trace. Symbolic information can be extracted from binary libraries and added to the corresponding functions in the trace. Header files are available for some libraries. Full high level function prototypes can be found from them and mapped to the trace. This allows us to get high level types of parameters that are propagated along the trace through global variables and function calls. Function models are combined into a high level model algorithm that can be used to restore or analyse it.
Highlights
Динамический анализ – это анализ данных, полученных от выполняющейся программы
Недостаток заключается в том, что трасса не содержит инструкций из тех участков кода, которые не выполнялись во время снятия трассы
This paper presents a method for raising the level of abstraction of a program execution trace by building of an algorithm model
Summary
Динамический анализ – это анализ данных, полученных от выполняющейся программы. Он позволяет выявить те свойства программы, которые недоступны при анализе ее исходных текстов из-за их сложности, намеренной запутанности или позднего связывания. В случае, если исходные тексты программы недоступны, применяется динамический анализ бинарного кода. Один из видов динамического анализа – анализ трасс выполнения программ. В случае выполнения анализа бинарного кода трасса представляет собой последовательность машинных инструкций в порядке их выполнения в программе. Чтобы понять работу алгоритмов, попавших в трассу, необходимо применять методы выделения из нее высокоуровневых сущностей и их фильтрации. Повышение уровня представления и фильтрация уменьшают объем обозреваемых данных и упрощают анализ алгоритма. Динамический анализ трасс выполнения программ имеет как достоинства, так и недостатки, по сравнению со статическим анализом исполняемого кода. Недостаток заключается в том, что трасса не содержит инструкций из тех участков кода, которые не выполнялись во время снятия трассы.
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 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.