LIEF
v0.15.1
博客•文档•关于
该项目的目的是提供一个跨平台库来解析、修改和抽象 ELF、PE 和 MachO 格式。
主要特点:
扩展功能:
find_package (LIEF REQUIRED)
target_link_libraries (my-project LIEF::LIEF)
[ package ]
name = " my-awesome-project "
version = " 0.0.1 "
edition = " 2021 "
[ dependencies ]
lief = " 0.15.1 "
要安装最新版本(发布):
pip install lief
要安装夜间构建:
pip install [--user] --force-reinstall --index-url https://lief.s3-website.fr-par.scw.cloud/latest lief==0.16.0.dev0
以下是安装或集成 LIEF 的指南:
import lief
# ELF
binary = lief . parse ( "/usr/bin/ls" )
for section in binary . sections :
print ( section . name , section . virtual_address )
# PE
binary = lief . parse ( "C: \ Windows \ explorer.exe" )
if rheader := pe . rich_header :
print ( rheader . key )
# Mach-O
binary = lief . parse ( "/usr/bin/ls" )
for fixup in binary . dyld_chained_fixups :
print ( fixup )
use lief :: Binary ;
use lief :: pe :: debug :: Entries :: CodeViewPDB ;
if let Some ( Binary :: PE ( pe ) ) = Binary :: parse ( path . as_str ( ) ) {
for entry in pe . debug ( ) {
if let CodeViewPDB ( pdb_view ) = entry {
println ! ( "{}" , pdb_view . filename ( ) ) ;
}
}
}
# include < LIEF/LIEF.hpp >
int main ( int argc, char ** argv) {
// ELF
if (std::unique_ptr< const LIEF::ELF::Binary> elf = LIEF::ELF::Parser::parse ( " /bin/ls " )) {
for ( const LIEF::ELF::Section& section : elf-> sections ()) {
std::cout << section-> name () << ' ' << section-> virtual_address () << ' n ' ;
}
}
// PE
if (std::unique_ptr< const LIEF::PE::Binary> pe = LIEF::PE::Parser::parse ( " C: \ Windows \ explorer.exe " )) {
if ( const LIEF::PE::RichHeader* rheader : pe-> rich_header ()) {
std::cout << rheader-> key () << ' n ' ;
}
}
// Mach-O
if (std::unique_ptr<LIEF::MachO::FatBinary> macho = LIEF::MachO::Parser::parse ( " /bin/ls " )) {
for ( const LIEF::MachO::DyldChainedFixups& fixup : macho-> dyld_chained_fixups ()) {
std::cout << fixup << ' n ' ;
}
}
return 0 ;
}
# 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 ;
}
罗曼·托马斯 (@rh0main) - Quarkslab
LIEF 根据 Apache 2.0 许可证提供。
@MISC { LIEF ,
author = " Romain Thomas " ,
title = " LIEF - Library to Instrument Executable Formats " ,
howpublished = " https://lief.quarkslab.com/ " ,
month = " apr " ,
year = " 2017 "
}