Commit Graph

61 Commits

Author SHA1 Message Date
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
Romain Thomas 733053bc63 Enhance PE resources
* Improve Resource Manager
* Fix bug when rebuilding resources (aligment issue)
* Provide a Python API to access to the resource tree
* Pretty print lang/sublang of resources
* Parse resource dialog
* Parse resource icons
* Parse resource version
* Add tests on the resource builder
* Add tutorial (related to #28)
2017-06-11 16:47:16 +02:00
Romain Thomas a8e1e40e1e Update doc 2017-06-11 16:21:30 +02:00
Romain Thomas 6d70333f64 Implement equals operators for ELF::GnuHash 2017-06-11 16:02:01 +02:00
Romain Thomas 37cd8aa3cc Resolve #36 2017-06-11 15:26:42 +02:00
Romain Thomas d9c6b436b5 Parse ELF notes (resolve #35) 2017-06-11 11:00:41 +02:00
Romain Thomas caceb3a527 Improve abstraction layer
* Enable bitness through ``LIEF::Header::is_32`` and
   ``LIEF::Header::is_64` (See #29)
  * Add ``modes`` ot the Python API
  * Abstract binary object type (executable, library...)
2017-05-06 17:45:04 +02:00
Romain Thomas ffa51ada1d Bug fix in abstract layer for MachO binaries without entrypoint (library)
* MachO API: add ``has_entrypoint``
2017-05-06 17:06:18 +02:00
Romain Thomas 77d43f9db4 Fully handle section-less ELF binaries
* Fix #25
  * ELF `tiny` binaries are now handled (see #7)
  * Computation of dynamic symbols can be done with differents methods:
    hash table, sections and relocations. (See LIEF::ELF::DYNSYM_COUNT_METHODS)
  * ELF parser can be configured to use one of the DYNSYM_COUNT_METHODS
  * Improve tests
2017-05-06 16:18:02 +02:00
Romain Thomas baa1b415ae Enable DOS stub rebuilding
Python API:

  * lief.PE.Binary.dos_stub property
  * lief.PE.Builder.build_dos_stub method

  C++ API:

  * LIEF::PE::Binary::dos_stub setter/getter
  * LIEF::PE::Builder::build_dos_stub method
2017-05-01 20:45:53 +02:00
Romain Thomas b60b36a844 Enable PE hooking
* Add 'hook_function' to hook a PE imported function
  * Add tutorial on PE hooking (resolve #5)
  * Add 'PE::get_import' and 'PE::has_import' to retrieve import
2017-05-01 18:11:37 +02:00
Romain Thomas 2a737b5d02 Change to version 'v2.1.1' 2017-04-29 20:23:26 +02:00
Romain Thomas 2ded57e676 Improve documentation 2017-04-29 10:45:26 +02:00
Jessy Campos 27c78a3715 Grouping src files and headers in order to display them correctly in VS Solution Explorer 2017-04-25 12:41:21 -04:00
Romain Thomas c031d7accf Fix #20 2017-04-21 13:59:33 +02:00