Screeshot: Live Audio Visualization of Waveform (original vs lowpass filter)

Live Audio Visualization With Rust in a GUI Window

In early 2021 I had a closer look into several aspects of digital signal processing (DSP), including lowpass filters, frequency spectrum analysis, and audio visualization. I used Rust to experiment with this. The Rust ecosystem didn’t offer simple-to-use libraries for my use cases back then, or at least they were not easy to find. While I learned more about the topic, I created multiple crates, with the hope they may be helpful to Read more…

Screenshot of Sourcecode

Direct Systemcalls to Linux from Rust Code (x86_64)

What I show in this blog post is nothing new or unique, but it is something I wish someone would have shown me in this simplicity in my second or third semester at university. In this post, I briefly explain how you can talk to Linux without the libc or the Rust standard library (which uses libc behind the scenes most probably). Furthermore, I give you pointers to the corresponding syscall code in Read more…

Minimal GRUB Configuration To Boot A Multiboot2 Kernel With Boot Modules

TLDR: for Multiboot2 you use module2 and for Multiboot1 module in GRUB config files. One of my projects of the last months was to build a prototype setup for kernels written in Rust. The kernel is Multiboot2-compliant and boots on x86_64 with UEFI as firmware. To test everything, I create a standalone GRUB in a directory, which contains the kernel (an 64-bit ELF) and a minimal grub.conf. The “standalone GRUB” is a regular Read more…

Adding and Using Files To/From the GRUB Memdisk (GRUB Standalone)

TLDR: GRUB can reference internal files via the volume specifier (memdisk), similar to external drives (hd0). GRUB has an undocumented but really convenient feature to include files/images (e.g., bootable kernels) directly into the GRUB installation itself. If you use $ grub-mkstandalone to store GRUB on a USB stick or a QEMU volume for example, you can bundle GRUB as EFI-application together with a configuration and payload/files. These files can be stored in the Read more…

Rust: Calling Functions With Different Calling Conventions From Same File

The other day I had some fun with assembly and wanted to try to call assembly functions from Rust. Each compiler follows a certain calling convention, that specifies how parameters are passed between functions. The calling convention is part of an ABI, an application binary interface. There are two major calling conventions out there: System V ABI and “Microsoft/PE x64”. The latter has no real official name, at least I can’t find one Read more…

Include Assembler Source Files In Rust Project (and Build with Cargo)

Recently I stumbled upon a Rust project, where *.S– and *.rs-files were side by side in the same Cargo src-directory and I was like: “What the heck, I always wanted this!” This was a pure and lucky coincidence, really. If you programmed in C/++ before, you probably know this. The gcc (or to be more specific, the linker) can consume object files generated from *.c or *.S files, where the latter means files Read more…