Fantastic Symbols and Where to Find Them - Part 2

This is a blog post series. If you haven’t read Part 1 we recommend you to do so first! In the first blog post, we learned about the fantastic symbols (debug symbols), how the symbolization process works and lastly, how to find the symbolic names of addresses in a compiled binary. The actual location of the symbolic information depends on the programming language implementation the program is written in. We can categorize the programming language implementations into three groups: compiled languages (with or without a runtime), interpreted languages, and JIT-compiled languages. ...

January 27, 2022 · 7 min · 1296 words

Fantastic Symbols and Where to Find Them - Part 1

Symbolization is a technique that allows you to translate machine memory addresses to human-readable symbol information (symbols). Why do we need to read what programs do anyways? We usually do not need to translate everything to a human-readable format when things run smoothly. But when things go south, we need to understand what is going on under the hood. Symbolization is needed by introspection tools like debuggers, profilers and core dumps or any other program that needs to trace the execution of another program. While a target program is executing on a machine, these types of programs capture the stack traces of the program that is being executed. ...

January 13, 2022 · 8 min · 1702 words