Skip to content

Exi1Sh0w/LIEF

This branch is 1323 commits behind lief-project/LIEF:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b2fc5ba · Oct 19, 2021
Jan 3, 2021
Feb 2, 2021
Oct 19, 2021
Sep 27, 2021
Oct 19, 2021
Sep 25, 2021
Jan 16, 2021
Oct 19, 2021
Jan 3, 2021
May 4, 2018
May 25, 2021
Oct 19, 2021
Sep 25, 2021
Sep 27, 2021
Feb 21, 2021
Oct 2, 2019
Jan 18, 2021
Mar 30, 2017
Oct 6, 2017
Jul 1, 2017
Sep 27, 2021
Jan 3, 2021
Jan 16, 2021
Aug 27, 2020
Jan 4, 2021
Dec 29, 2020
Mar 20, 2021
Dec 19, 2020
May 26, 2021

Repository files navigation


  Linux CI status   Linux AArch64 CI status   Android CI status   macOS CI status   iOS CI status   Windows CI status     Twitter Follow

About

The purpose of this project is to provide a cross platform library which can parse, modify and abstract ELF, PE and MachO formats.

Main features:

  • Parsing: LIEF can parse ELF, PE, MachO, OAT, DEX, VDEX, ART and provides an user-friendly API to access to format internals.
  • Modify: LIEF enables to modify some parts of these formats
  • Abstract: Three formats have common features like sections, symbols, entry point... LIEF factors them.
  • API: LIEF can be used in C, C++ and Python

Content

Downloads / Install

First, make sure to have an updated version of setuptools:

pip install setuptools --upgrade

To install the latest version (release):

pip install lief

To install nightlty build:

pip install [--user] --index-url https://lief.quarkslab.com/packages lief==0.12.0.dev0

Packages

Here are guides to install or integrate LIEF:

Getting started

Python

import lief

# ELF
binary = lief.parse("/usr/bin/ls")
print(binary)

# PE
binary = lief.parse("C:\\Windows\\explorer.exe")
print(binary)

# Mach-O
binary = lief.parse("/usr/bin/ls")
print(binary)

C++

#include <LIEF/LIEF.hpp>

int main(int argc, char** argv) {
  // ELF
  try {
    std::unique_ptr<LIEF::ELF::Binary> elf = LIEF::ELF::Parser::parse("/bin/ls");
    std::cout << *elf << std::endl;
  } catch (const LIEF::exception& err) {
    std::cerr << err.what() << std::endl;
  }

  // PE
  try {
    std::unique_ptr<LIEF::PE::Binary> pe = LIEF::PE::Parser::parse("C:\\Windows\\explorer.exe");
    std::cout << *pe << std::endl;
  } catch (const LIEF::exception& err) {
    std::cerr << err.what() << std::endl;
  }

  // Mach-O
  try {
    std::unique_ptr<LIEF::MachO::FatBinary> macho = LIEF::MachO::Parser::parse("/bin/ls");
    std::cout << *macho << std::endl;
  } catch (const LIEF::exception& err) {
    std::cerr << err.what() << std::endl;
  }

  return 0;
}

C (Limited API)

#include <LIEF/LIEF.h>

int main(int argc, char** argv) {
  Elf_Binary_t* elf = elf_parse("/usr/bin/ls");

  Elf_Section_t** sections = elf->sections;

  for (size_t i = 0; sections[i] != NULL; ++i) {
    printf("%s\n", sections[i]->name);
  }

  elf_binary_destroy(elf);
  return 0;
}

Documentation

Contact

About

Authors

Romain Thomas (@rh0main) - Quarkslab

License

LIEF is provided under the Apache 2.0 license.

Bibtex

@MISC {LIEF,
  author       = "Romain Thomas",
  title        = "LIEF - Library to Instrument Executable Formats",
  howpublished = "https://lief.quarkslab.com/",
  month        = "April",
  year         = "2017",
}

About

LIEF - Library to Instrument Executable Formats

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 86.7%
  • Python 5.3%
  • CMake 3.4%
  • SourcePawn 2.3%
  • C 2.0%
  • Shell 0.3%