Low-level programming is one of my favourite subjects. I've written a simple ELF parser in Nim (with the help of an amazing binary parsing library) among other things: https://github.com/khaledh/elfdump
In order to learn an object file format, the first thing I'd do is write a dumper for it.
Writing a program that can dump itself is a great learning project.
Good bit twiddling practice too
That reminds me, couple of years ago when I was leaning to program, one of my first projects was a ELF parser so I could understand what binaries where doing and how they where built.