Skip to content

A simple Linux dynamic loader capable of loading simple binaries using simple shared libraries (no glibc support)

License

Notifications You must be signed in to change notification settings

Ferdi265/dynamic-loader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dynamic-loader

A simple dynamic library loader for Linux capable of loading simple binaries using simple shared libraries.

Features

  • Actually readable codebase for a dynamic loader
  • Loads simple shared objects (no glibc or musl support*)
  • Calls initializers and finalizers
  • Performs relocations at load-time (no lazy loading supported yet)
  • Supports dlopen(), dlsym(), and dlclose()
  • no support for threads or TLS, though rudimentary thread-safety is supported in the loader

* glibc and musl provide their own dynamic library loader that they expect to be loaded with:

  • ld-linux-x86_64.so.2 (aka ld.so) for glibc
  • ld-musl-x86_64.so.1 (a symlink to musl's libc.so) for musl

Dependencies

  • libmusl.a and musl-gcc (arch: musl, debian: musl musl-tools)
  • elf.h (arch: part of base, debian: libelf-dev)

Building

  • cmake -B build
  • cd build
  • make
  • run build/loader/libloader.so or any of the binaries in build/tests/bin/

Resources

This loader was written mostly by using specifications from refspecs.linuxbase.org, mainly the ELF spec and the x86_64 processor supplement.

For some parts of the early loader startup code (mainly the code in crt/), I also read the source code of musl libc to get a better understanding of typical ways to handle early loader init. To understand ELF symbol hash tables, I used multiple sources, but this blog post on flagpenguin.me was most useful.

License

This project is licensed under the MIT License (SPDX MIT). The full license text can also be found in the LICENSE file.

About

A simple Linux dynamic loader capable of loading simple binaries using simple shared libraries (no glibc support)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published