- February 2020
-
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
ld-linux... - 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... -
ELF relocations
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...
-
Position-independent code
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...
-
Running an executable without exec
Making our own executable packer: Part 2
In part 1, we've looked at three executables:
sample, an assembly program that prints “hi there” using thewritesystem call.entry_point, a C program that prints the...
-
What's in a Linux executable?
Making our own executable packer: Part 1
Executables have been fascinating to me ever since I discovered, as a kid, that they were just files. If you renamed a
.exeto something else, you could open it in notepad! And if...
