- February 2020
Working with strings in Rust
There's a question that always comes up when people pick up the Rust programming language: why are there two string types? Why is there
Dynamic linker speed and correctness
Making our own executable packer: Part 8
In the last article, we managed to load a program (
hello-dl) that uses a single dynamic library (
libmsg.so) containing a single exported symbol,
Dynamic symbol resolution
Making our own executable packer: Part 7
Let's pick up where we left off: we had just taught
elkto load not only an executable, but also its dependencies, and then their dependencies as well.
We discovered that
- January 2020
A half-hour to learn Rust
In order to increase fluency in a programming language, one has to read a lot of it. But how can you read a lot of it if you don't know what it means?
In this article, instead of...
Loading multiple ELF objects
Making our own executable packer: Part 6
Up until now, we've been loading a single ELF file, and there wasn't much structure to how we did it: everyhing just kinda happened in
main, in no particular order.
But now that...
The simplest shared library
Making our own executable packer: Part 5
In our last article, we managed to load and execute a PIE (position-independent executable) compiled from the following code:
; in `elk/samples/hello.asm` global _start...
Making our own executable packer: Part 4
The last article, Position-independent code, was a mess. But who could blame us? We looked at the world, and found it to be a chaotic and seemingly nonsensical place. So, in order...
Making our own executable packer: Part 3
In the last article, we found where code was hiding in our
samples/helloexecutable, by disassembling the whole file and then looking for syscalls.
Later on, we learned how to...