Commit Graph

75 Commits

Author SHA1 Message Date
Adrien Guinet cecdb721a6 Add functional header to ELF/Header.hpp
This makes LIEf compile with libstdc++-v7
2017-08-20 08:53:59 +02:00
Adrien Guinet 3a76b8dddc Make JSON related API optional 2017-08-20 07:08:50 +02:00
Romain Thomas 8caf1515cb Add 'NX' in the abstract layer
API Changes:
  - LIEF::Binary::has_nx() - Added

Resolve: #72
2017-08-02 09:23:55 +02:00
Romain Thomas 43bd06f8f3 Improve API of ELF's Section
API changes:
  - 'has_flag' renamed to 'has'
  - 'add_flag' renamed to 'add'
  - 'remove_flag' renamed to 'remove'
  - operator+= to add a flag - added
  - operator-= to remove a flag - added
  - 'has' for Segment object - added
2017-08-02 08:19:26 +02:00
Romain Thomas d70ef9ec2c Improve Enums for SEGMENT_FLAGS 2017-08-02 07:53:23 +02:00
Romain Thomas 3b200b3050 Improve API of ELF's Segment
API changes:
  - 'has_flag' renamed to 'has'
  - 'add_flag' renamed to 'add'
  - 'remove_flag' renamed to 'remove'
  - operator+= to add a flag - added
  - operator-= to remove a flag - added
  - 'has' for Section object - added
  - 'has' for Section name - added
2017-08-02 07:50:24 +02:00
Romain Thomas 2a9b156f99 Abstract PIE
Resolve: #71
2017-08-01 17:57:38 +02:00
Romain Thomas cbe8354847 Improve API of Mach-O's Header
API changes:
  - 'has_flag' renamed to 'has'
  - 'add' to add a flag - added
  - 'remove' to remove a flag - added
  - operator+= to add a flag - added
  - operator-= to remove a flag - added
2017-08-01 16:32:49 +02:00
Romain Thomas 5666351e07 Improve API of PE's OptionalHeader
API changes:
  - 'has_dll_characteristics' renamed to 'has'
  - 'add' to add a characteristic - added
  - 'remove' to remove a characteristic - added
  - operator+= to add a characteristic - added
  - operator-= to remove a characteristic - added
2017-08-01 16:11:39 +02:00
Romain Thomas 754b8afa2b Add object (ELF::DynamicEntryFlags) for ELF's DT_FLAGS and DT_FLAGS_1 2017-08-01 15:22:01 +02:00
Romain Thomas f721d02d91 Update doc 2017-08-01 10:18:16 +02:00
Romain Thomas 730d045e05 Enhance LIEF's ELF header
API Changes (Python / C++):
  * lief.ELF.Header.{arm_flags_list, mips_flags_list, ppc64_flags_list, hexagon_flags_list} - Added

In python, one can do:
`` if lief.ELF.ARM_EFLAGS.EABI_VER5 in lief.ELF.Header: ...``

In C++ we added:
  * LIEF::ELF::Header::has(ARM_EFLAGS, PPC64_EFLAGS, MIPS_EFLAGS...)
2017-08-01 09:35:55 +02:00
Romain Thomas 4600c2ba8d Provide API to configure the LIEF's logger
API changes:

  LIEF::Logger::{set_level, set_verbose_level...}

Resolve: #68
2017-07-31 15:16:02 +02:00
Romain Thomas af6ab65dc9 Implement ELF::Binary::get_symbols()
Fix: #70
2017-07-31 14:46:24 +02:00
Romain Thomas 782295bfb8 Parser Dyld Info in depth (binding, rebases, exports)
Binding and rebase bytes codes are now parsed as well as export info
trie. Through ``RelocationDyld`` we created kind of *virtual* relocation
to modeling relocation process performed by Dyld

API Changes (Python / C++)
  * MachO::RelocationDyld   - Added
  * MachO::RelocationObject - Added
  * MachO::Relocation       - Updated according to previous ones

  * MachO::ExportInfo       - Added
  * MachO::BindingInfo      - Added

  * MachO::DyldInfo::rebase_opcodes    - Added
  * MachO::DyldInfo::bindings          - Added
  * MachO::DyldInfo::bind_opcodes      - Added
  * MachO::DyldInfo::weak_bind_opcodes - Added
  * MachO::DyldInfo::lazy_bind_opcodes - Added
  * MachO::DyldInfo::exports           - Added
  * MachO::DyldInfo::export_trie       - Added

  * MachO::Symbol
    - Tied to MachO::BindingInfo (if any)
    - Tied to MachO::ExportInfo (if any)

  * MachO::Binary::relocations - Added
  * MachO::Binary::has_symbol  - Added
  * MachO::Binary::get_symbol  - Added

Resolve: #67
2017-07-30 17:29:09 +02:00
Adrien Guinet a244e3485f Prefix external project names with "lief_" to avoid conflicts 2017-07-27 16:29:15 +02:00
Romain Thomas 5b993117ed Parse Mach-O 'Version Min' command
Resolve: #44
2017-07-27 15:50:55 +02:00
Romain Thomas f330fa887d Improve parser API
API Changes:
  - lief.parse() can takes a list of integer as entry
  - LIEF::MachO::parse can take a std::vector<uint8_t> as entry

Related to #49
2017-07-27 15:46:03 +02:00
Romain Thomas 3e25d2620f Use commit hash instead of commit count 2017-07-25 20:04:59 +02:00
Romain Thomas 968e93f95c Factorize Python packages 2017-07-25 17:06:30 +02:00
Romain Thomas 20a5f666de Rename 'flag' to 'flags' (ELF's segment)
API changes:
  [C++]    LIEF::ELF::Segment::flag -> LIEF::ELF::Segment::flags
  [Python] lief.ELF.Segment.flag -> lief.ELF.Segment.flags

Resolve: #63
2017-07-25 07:56:21 +02:00
Romain Thomas d96971b0c3 Rename 'sizeof_section_header' to 'section_header_size' (ELF's header)
API changes:
  [C]      Elf_Header_t.sizeof_section_header -> Elf_Header_t.section_header_size
  [C++]    LIEF::ELF::Header::sizeof_section_header -> LIEF::ELF::Header::section_header_size
  [Python] lief.ELF.sizeof_section_header -> lief.ELF.section_header_size

Resolve #62
2017-07-24 07:44:11 +02:00
Romain Thomas 9391238f11 Add the underlying executable format in the abstract layer
API changes (Python/C++):
  * lief.Binary.format
  * LIEF::ELF::Binary::format()
2017-07-22 08:23:17 +02:00
Romain Thomas 8e378c0e32 Fix some warnings 2017-07-19 08:20:18 +02:00
Romain Thomas 669efa2b52 Move ELF::Binary::{is_exported, is_imported} within ELF::Symbol class
API Changes (C++)
  * ELF::Binary::{is_imported, is_exported}   - Removed
  * ELF::Symbol::{is_imported, is_exported}   - Added
  * ELF::Symbol::{set_imported, set_exported} - Added

API Changes (Python)
  * ELF.Symbol.{imported, exported} - Added
2017-07-18 10:27:54 +02:00
Romain Thomas 29c8157ecc Parse Mach-O relocations and add MachO API to retrieve section from name
API Update:
  lief.MachO.Section.relocations - to access to the relocations
  lief.MachO.binary.get_section - Get section from name
  lief.MachO.binary.has_section -Check if section with given name exists

Resolve #57
2017-07-17 17:27:28 +02:00
Romain Thomas 114616b81d Return 0 instead of an exception when the imagebase can't be computed 2017-07-17 17:21:47 +02:00
Romain Thomas a89bc6df4f Add import hash function as well as ordinal resolver functions (PE part)
For PE binary it's now possible get the *imphash* value through the
lief.PE.get_imphash function. It's also possible to resolve ordinals
imports by using the lief.PE.resolve_ordinals

Resolve #54
2017-07-16 18:02:54 +02:00
Romain Thomas 8c7ceafa82 Handle encoding errors (resolve #59) 2017-07-15 15:10:47 +02:00
Adrien Guinet b69fc05107 fat_offset API for MachO binaries within FAT MachO 2017-07-15 14:48:41 +02:00
Romain Thomas 15937dee41 Fix typo 2017-07-13 08:53:52 +02:00
Adrien Guinet 9de39bf2d9 Add virtual_address_to_offset to MachO::Binary Python API 2017-07-12 07:38:33 -07:00
Romain Thomas 483b8dc2ea Parse relocations in ELF object file (Resolve #51)
New API:
  * lief.ELF.Binary.object_relocations - Object relocations
  * lief.ELF.Binary.relocations - All relocations(plt/got, dynamic, obj)
2017-07-11 20:09:19 +02:00
Romain Thomas b7b0bde4d5 Add a *purpose* property to ELF relocations
Adding such property enables to store plt/got and dynamic relocations
in a same container. (related to #51)
2017-07-11 11:22:21 +02:00
Romain Thomas 0b4bb7d565 Update doc for Mach-O Source Version 2017-07-08 08:45:29 +02:00
Romain Thomas c359778194 Parse LC_SOURCE_VERSION. Resolve #45 2017-07-07 21:21:22 +02:00
Romain Thomas 18d89198a0 Parse MachO LC_FUNCTION_STARTS 2017-07-07 08:43:42 +02:00
Romain Thomas 0e972d69ce Add Mach-O/dyld_info API 2017-07-05 13:43:28 +02:00
Romain Thomas e2b81e0a8e Parse MachO Dyld Info, add Python API and update doc 2017-07-04 14:46:48 +02:00
Romain Thomas c0bb618307 Update doc 2017-07-01 18:35:10 +02:00
Romain Thomas 99896da627 Add 'PE.Symbol.has_section' python API 2017-06-30 17:24:40 +02:00
Romain Thomas 25b9985c80 Add relocation size 2017-06-28 17:45:32 +02:00
Romain Thomas 744c24518c Add the endianness in the abstraction layer (resolve #29) 2017-06-28 07:50:00 +02:00
Romain Thomas 8ddc71d337 Parse PE Rich Header (resolve #15) 2017-06-27 09:12:40 +02:00
Romain Thomas b37c608cbd Enhance MachO API
* Add API to retrieve UUID, Main, Dylinker command
* Add Python API for UUID, Main, Dylinker command
2017-06-25 19:34:45 +02:00
Romain Thomas 907e853b18 Fix some ambiguous API (fix #27)
PE::Binary::get_content_from_virtual_address can now take either:
  Absolute Virtual Address / Relative Virtual Address

In the PE Python API:
  * Merge 'PE.parse_from_raw' and 'PE.parse'
  * Change 'PE.Binary.section_from_virtual_address' to 'PE.Binary.section_from_rva'

In the PE C++ API:
  * Change 'Binary::section_from_virtual_address' to 'Binary::section_from_rva'
2017-06-25 15:11:47 +02:00
Romain Thomas a57139afea Fix conflict between OSX uuid_t and LIEF uuid_t 2017-06-24 08:19:04 +02:00
Romain Thomas 0622118cbc Add API for Mach-O UUID object 2017-06-23 21:37:40 +02:00
Romain Thomas c44a975913 Enhance 'macho_reader.py' 2017-06-23 21:37:23 +02:00
Romain Thomas e4cd61e4bf Serialize PE object into json (resolve #18) 2017-06-14 10:17:45 +02:00