Abstract
Dynamic machine code instrumentation is a powerful technique for analyzing and
modifying running programs. This is crucial for performance monitoring, debugging
and security analysis. However, with the lack of source code, creating robust in-
strumentation tools is challenging. It requires a deep understanding of the target
architecture and calling conventions. Existing solutions are often platform-specific
or lack the desired flexibility. This impacts companies such as Dynatrace that rely
on such tools for application monitoring.
This thesis presents a generic C++ library, designed to simplify the dynamic ma-
chine code instrumentation process. The goal is a simple interface that allows users
to attach entry and exit hooks to functions. The library handles disassembling of
the target function, relocation of original instructions while preserving semantics and
the generation of trampoline code. The initial target architecture is x86 with the
ability to extend the library to support other architectures.
The resulting library lowers the barrier for developers, particularly in the con-
text of Dynatrace, by providing a reusable and maintainable solution. The library
simplifies the creation of tools that rely on instrumentation, and establishes a foun-
dation for instrumenting further natively compiled languages such as Rust. This
work ultimately aims to enhance the efficiency in development efforts and to im-
prove capabilities for monitoring.
modifying running programs. This is crucial for performance monitoring, debugging
and security analysis. However, with the lack of source code, creating robust in-
strumentation tools is challenging. It requires a deep understanding of the target
architecture and calling conventions. Existing solutions are often platform-specific
or lack the desired flexibility. This impacts companies such as Dynatrace that rely
on such tools for application monitoring.
This thesis presents a generic C++ library, designed to simplify the dynamic ma-
chine code instrumentation process. The goal is a simple interface that allows users
to attach entry and exit hooks to functions. The library handles disassembling of
the target function, relocation of original instructions while preserving semantics and
the generation of trampoline code. The initial target architecture is x86 with the
ability to extend the library to support other architectures.
The resulting library lowers the barrier for developers, particularly in the con-
text of Dynatrace, by providing a reusable and maintainable solution. The library
simplifies the creation of tools that rely on instrumentation, and establishes a foun-
dation for instrumenting further natively compiled languages such as Rust. This
work ultimately aims to enhance the efficiency in development efforts and to im-
prove capabilities for monitoring.
| Originalsprache | Englisch |
|---|---|
| Qualifikation | Master/Diplom |
| Gradverleihende Hochschule |
|
| Betreuung / Begutachtung |
|
| Datum der Bewilligung | 17 Juni 2025 |
| Verlag | |
| Publikationsstatus | Veröffentlicht - 17 Juni 2025 |
Wissenschaftszweige
- 102 Informatik
- 102009 Computersimulation
- 102013 Human-Computer Interaction
- 102011 Formale Sprachen
- 102022 Softwareentwicklung
- 102029 Praktische Informatik
- 102024 Usability Research
JKU-Schwerpunkte
- Digital Transformation
Dieses zitieren
- APA
- Author
- BIBTEX
- Harvard
- Standard
- RIS
- Vancouver