- Building Your First LLVM Optimization Pass
Published: Tags: llvm C++ LLVM is a powerful toolchain used by many modern programming languages such as Rust and Swift, but even older languages like C/C++ can make effective use of it. It not only translates intermediate code into machine-specific instructions but also optimizes it through a series of analysis and transformation passes.
This blog post aims to demystify LLVM optimization passes and guide you through writing your first one.
- Anatomy of LLVM Backends
Published: Tags: LLVM One difficulty when working with LLVM backends is the sheer amount of files, classes and ultimately code that needs to be present in order to get a LLVM backend going. The aim of this post is to give a very brief overview over the necessary classes.
- Crosscompile using CMake
Published: Last Modified: Tags: clang llvm cmake After debunking crosscompiling being hard in an earlier post, i want demonstrate how it can be used to build CMake projects for foreign architectures.
- Ieads Definitive Guide to LLVM Backends (I)
Published: Last Modified: Tags: llvm C++ VM When writing my first llvm backend at my last job I quickly found out that there is only very material assisting the creation of a custom backend. The posts and tutorials only cover the basics and stop as soon as it starts to become really interesting. This series of posts serves to fill the void left by others and to teach how to customice and tailor different aspects of a backend to your needs.
- Solving VM based checker with Klee
Published: Tags: ctf rev python llvm se To solve the “just the check please” task from PPP-CTF in 2023 I went the unusual path of lifting the virtual machine code used as obfuscation to LLVM-IR. That way I was able to utilize the advanced symbolic execution engine “Klee” to solve for the winning input.
- Crosscompile
Published: Tags: clang llvm Cross compiling for different architectures and linux distributions is actually not half as hard as it is made out to be. I know many that regard cross compilation as too difficult and error prone to be even considered and thus always require an entire setup for the target architecture. But handling virtual machines can be cumbersome and juggling real hardware even more. Worry not tho, i will teach you an easy yet versitile way to achieve cross compilation