Compare commits

...
455 Commits
Author SHA1 Message Date
Romain Thomas 8cd66ae9b3 WIP 2023-07-24 22:01:12 +02:00
Romain Thomas 555bcdabaa Test 2023-07-24 22:00:07 +02:00
Romain Thomas 3dfc393f95 Clean code 2023-07-23 20:34:23 +02:00
Romain Thomas 79302f3ed4 Fix docstring 2023-07-23 07:41:10 +02:00
Romain Thomas 3bc38c315b Fix doc 2023-07-23 07:32:09 +02:00
Romain Thomas 7289bbb01f Refactor and clean PE debug entries 2023-07-22 13:39:11 +02:00
Romain Thomas 9c9bd0e52f Fix log message 2023-07-22 09:03:17 +02:00
Romain Thomas 98e85cd6f6 Expose copy method 2023-07-22 08:35:59 +02:00
Romain Thomas 76aa4eb895 Fix typo 2023-07-22 05:56:50 +02:00
Romain Thomas fa5a0dd27b Use a unique_ptr 2023-07-22 05:49:45 +02:00
Romain Thomas 114fb11bc4 Cleanup 2023-07-22 05:45:12 +02:00
Romain Thomas 550f8cbcb4 Update tests 2023-07-22 05:34:03 +02:00
Romain Thomas b265280a63 Update README 2023-07-15 13:12:20 +02:00
Romain Thomas 60ab1f281d Resolve #943 2023-07-15 13:08:13 +02:00
Romain Thomas ac4aa0487b Fix for Windows 2023-07-15 06:34:59 +02:00
Romain Thomas 9fecc8301a Use cache for the iOS ci and improve testing 2023-07-15 06:34:59 +02:00
Romain Thomas 4b29b87c14 Fix Python module API 2023-07-15 05:39:57 +02:00
Romain Thomas 12f359f748 Code cleaning 2023-07-15 05:33:12 +02:00
Romain Thomas afc84c9c0c Move to pointers 2023-07-14 05:44:23 +02:00
Romain Thomas ae9a7b2085 Fix Python 2023-07-09 10:15:32 +02:00
Romain Thomas 2b5f38bbeb Fix OSX x64 package name 2023-07-09 22:13:54 +02:00
Romain Thomas caf50de5e5 Remove deps 2023-07-09 21:58:03 +02:00
Romain Thomas 944fa67c30 Fix 2023-07-09 21:54:36 +02:00
Romain Thomas e37ffa9ec8 Switch the bindings to nanobind (and update the CI) 2023-07-09 21:33:43 +02:00
Romain Thomas 7e387675ac Merge pull request #939 from liyansong2018/master
Fix integer underflow in PHDR relocator
2023-07-09 03:34:30 +00:00
Romain Thomas a60987f237 Resolve #938, resolve #940, resolve #941 2023-07-06 21:39:23 +02:00
liyansong2018 f404470e0d Fix integer underflow 2023-07-06 19:25:20 +08:00
Romain Thomas 7057b9d359 Resolve #936 2023-07-01 08:38:56 +02:00
Romain Thomas eee71c930e Resolve #937 2023-07-01 07:01:12 +02:00
Romain Thomas 1a3b65117f Update setup.py 2023-07-01 06:39:33 +02:00
Romain Thomas c22a8fa9c6 Fix forward definition 2023-07-01 06:25:33 +02:00
Romain Thomas 6495242f54 Fix missing fwd declaration 2023-07-01 06:23:45 +02:00
Romain Thomas 57a59c5696 Do not reset the position
(issue: #935)
2023-06-26 07:46:16 +02:00
Romain Thomas 1335cb41be Fix header 2023-06-24 19:22:32 +02:00
Romain Thomas 15f40f2b8d Resolve #935 2023-06-24 07:37:00 +02:00
Romain Thomas 3e8dc1b1ad Fix missing include 2023-06-24 07:36:59 +02:00
Romain Thomas eda67d7910 Fix missing include 2023-06-24 07:36:58 +02:00
Romain Thomas a30b8adb2b remove useless checks
`seek` and `tell` are always present when inheriting from `io.IOBase`
2023-06-24 07:36:57 +02:00
Romain Thomas c50abdc645 Remove functions 2023-06-24 07:36:56 +02:00
Romain Thomas f9e6a021db Support flags from config 2023-06-24 07:36:55 +02:00
Romain Thomas 3a7d084081 Wraps by a main function 2023-06-24 07:36:55 +02:00
Romain Thomas 85518ff44c Merge pull request #924 from LouisBrunner/feature/dysym-command
feat(macho): allow to create DynamicSymbolCommand in Python
2023-06-21 14:17:22 +00:00
Romain Thomas 5436509a23 Update OSX version 2023-06-21 06:31:59 +02:00
Romain Thomas 622293c64e Fix compiler 2023-06-19 04:36:24 +02:00
Romain Thomas 9a13a77691 Fix missing quotes 2023-06-18 09:03:05 +02:00
Romain Thomas 3ccd280bd0 Fix warnings 2023-06-18 09:01:25 +02:00
Romain Thomas f6f8c749f2 Update to new version 2023-06-18 09:01:18 +02:00
Romain Thomas 5eb5e197b4 Handle CMAKE_OSX_ARCHITECTURES 2023-06-18 08:50:15 +02:00
Romain Thomas f39b9296d0 Update versions 2023-06-17 22:01:21 +02:00
Romain Thomas a9989d3ecd Update to new versions 2023-06-17 18:49:26 +02:00
Romain Thomas 21731e6824 Update README 2023-06-17 18:46:56 +02:00
Romain Thomas 27b8bf22bf Update changelog with 0.13.2 2023-06-17 18:46:29 +02:00
Romain Thomas ac9a5f2f1a More classof 2023-06-12 22:56:03 +02:00
Romain Thomas 1fd21cd7a5 Remove unsupported version 2023-06-12 22:45:33 +02:00
Romain Thomas ba6f88661f Merge pull request #930 from marcelotduarte/python312
Add Python 3.12-dev to build workflow
2023-06-12 06:28:19 +00:00
Marcelo Duarte 359ed0728a Add Python 3.12-dev to build workflow 2023-06-12 00:08:57 -03:00
Romain Thomas 19a1bae289 Add classof method 2023-06-11 19:35:27 +02:00
Romain Thomas 7a4e4f9189 Remove unnecessary inline 2023-06-11 19:28:31 +02:00
Romain Thomas b477c60d6c Include ctest 2023-06-11 07:02:36 +02:00
Romain Thomas bb0a6cc918 Fix warnings 2023-06-11 06:21:45 +02:00
Romain Thomas c5d0daa9da Merge pull request #929 from fzakaria/elf_undef
Add additional missing undef for ELF
2023-06-11 03:25:55 +00:00
Farid Zakaria fc323081ad Add additional missing undef for ELF
Add missing undef for ELF that cause failures if
lib/elf.h is included before LIEF.
2023-06-10 21:35:52 +00:00
Romain Thomas 7a10d2b866 Expose static helpers 2023-06-10 22:11:00 +02:00
Romain Thomas ee64e7e368 Fix build path 2023-06-10 13:22:59 +02:00
Romain Thomas 0f788c3990 Cleanup 2023-06-10 13:21:36 +02:00
Romain Thomas 6f04ecd472 Update stubs 2023-06-10 13:13:19 +02:00
Romain Thomas 177338f28a Fix tests 2023-06-10 13:13:09 +02:00
Romain Thomas 194d5f5478 Update README 2023-06-10 12:42:31 +02:00
Romain Thomas 4184aa05f7 Update README 2023-06-10 10:55:47 +02:00
Romain Thomas 97292eca03 Add interface (LIEF::ELF::ParserConfig) for configuring the ELF parser 2023-06-10 10:37:07 +02:00
Romain Thomas 1a69a1b16b Expose the DynamicSymbolCommand default constructor 2023-06-10 09:54:54 +02:00
Romain Thomas f0c3870db0 Merge pull request #923 from LouisBrunner/feature/allow-no-dysym
feat(macho): handle building a binary without LC_DYSYMTAB
2023-06-07 18:23:49 +00:00
Romain Thomas c17a3cbb86 Merge pull request #925 from LouisBrunner/feature/thread-command
feat(macho): allow to create ThreadCommand in Python
2023-06-07 18:23:05 +00:00
Romain Thomas 8d756b995e Merge pull request #926 from LouisBrunner/feature/main-command
feat(macho): allow to create MainCommand in Python
2023-06-07 18:20:03 +00:00
Louis Brunner 719249a2a5 feat(macho): handle building a binary without LC_DYSYMTAB 2023-06-07 15:54:57 +01:00
Louis Brunner 4560ce79f6 feat(macho): allow to create DynamicSymbolCommand in Python 2023-06-07 15:50:30 +01:00
Louis Brunner 3dec87b9b5 feat(macho): allow to create ThreadCommand in Python 2023-06-07 15:44:20 +01:00
Louis Brunner a7b114d8bb feat(macho): allow to create MainCommand in Python 2023-06-07 15:42:14 +01:00
Romain Thomas e3071a1e40 Update doc 2023-06-04 18:15:05 +02:00
Romain Thomas 76653f5380 Update changelog 2023-06-04 10:40:28 +02:00
Romain Thomas 2f2e5bf7fe Bump LIEF to C++17
LIEF internal code now uses C++17 while the API is still C++11 compliant
2023-06-04 10:39:19 +02:00
Romain Thomas 63f37f5fe2 Update stubs 2023-06-04 10:22:03 +02:00
Romain Thomas aa45e2ed71 Add tests for LoongArch (PR: 921) 2023-06-04 09:07:15 +02:00
Romain Thomas 2f8f81b119 Update changelog 2023-06-04 08:11:35 +02:00
Romain Thomas 0daf527ddf Merge pull request #921 from loongson-zn/dev-la
Add LoongArch support for ELF
2023-06-04 06:10:07 +00:00
Romain Thomas 84523d94f2 Update changelog 2023-06-03 10:25:13 +02:00
Romain Thomas f3d651ab31 Merge branch 'fix/issue-922' 2023-06-03 10:23:30 +02:00
Romain Thomas aa4d601b8e Remove irrelevant flag 2023-06-03 09:11:46 +02:00
Romain Thomas 2f333ffbd6 Do not force a specific tag 2023-06-03 09:11:25 +02:00
Romain Thomas 528435f14f Improve the logic of the AUTO symbol counting (idea from: @adamjseitz) 2023-06-03 09:06:45 +02:00
Zhang Na 375592aef4 Add LoongArch support for ELF 2023-05-31 17:33:13 +08:00
Romain Thomas 0d7c39d9f5 Fix typo 2023-05-28 22:38:17 +02:00
Romain Thomas 5db4acd816 Disable static link with libstdc++ 2023-05-28 12:27:43 +02:00
Romain Thomas e148d9ebd6 Add OSX arm64 workflow 2023-05-28 09:25:43 +02:00
Romain Thomas b828a2be6c Include 0.13.1 changelog 2023-05-27 21:40:06 +02:00
Romain Thomas 5d04ecc4ff Add sponsor 2023-05-27 21:19:16 +02:00
Romain Thomas 3df2e3f2b6 Fix C99 comment style (#916) 2023-05-27 20:49:30 +02:00
Romain Thomas 32d4848993 Fix #916 2023-05-16 04:11:15 +02:00
Romain Thomas 5e5a5bf632 Update 2023-05-14 18:20:12 +02:00
Romain Thomas c14385be08 Replace boost's leaf by tl/expected 2023-05-14 11:40:02 +02:00
Romain Thomas 23223aaefa Fix missing include 2023-05-08 14:59:09 +02:00
Romain Thomas 7f47307dab Update changelog 2023-05-06 12:29:18 +02:00
Romain Thomas eeae3e9859 Fix #912 2023-05-06 12:27:52 +02:00
Romain Thomas cf1ca21d1b Merge pull request #911 from LouisBrunner/feature/macho-dylinker
feat(macho): allow to create DylinkerCommand in Python (+ simpler constructor)
2023-05-06 04:28:57 +00:00
Louis Brunner 104df74246 feat(macho): allow to create DylinkerCommand in Python (+ simpler constructor) 2023-05-04 10:42:01 +01:00
Romain Thomas ac47c2a9a0 Enhance checks 2023-05-04 06:38:09 +02:00
Romain Thomas 2e06bdb4af Resolve #909 2023-05-03 06:06:17 +02:00
Romain Thomas 5e814ea606 Fix removed attribute 2023-04-29 07:16:32 +02:00
Romain Thomas 9f66386cef Fix removed attribute 2023-04-28 06:30:32 +02:00
Romain Thomas c33391222a Update stubs 2023-04-28 06:21:11 +02:00
Romain Thomas 8908fe4a45 Add interface to tweak the PE parser (resolve #839)
This commit also removes the Binary's name attribute.
2023-04-28 06:17:26 +02:00
Romain Thomas 227665312b Move to dedicated folder 2023-04-27 06:50:52 +02:00
Romain Thomas 284001d4c1 Update stubs 2023-04-25 19:02:01 +02:00
Romain Thomas 0714d2e783 Resolve #904 2023-04-23 12:55:25 +02:00
spobit 4ef1759bd4 fixed Binary::has_relocations_ field. 2023-04-21 13:51:12 +02:00
Romain Thomas f796720f63 Fix code 2023-04-19 12:10:56 +02:00
Romain Thomas fe2f20a49a Merge pull request #898 from adamjseitz/reloc-symbol-table
Utilize SH_LINK section metadata to resolve relocation's target symbol table
2023-04-19 09:38:03 +00:00
Adam Seitz bf7f36b707 Add symbol_table() API to ELF Relocations 2023-04-19 09:45:24 +02:00
Romain Thomas 6749446c59 Remove legacy files 2023-04-16 11:45:39 +02:00
Romain Thomas 901b798b69 Merge pull request #894 from kilograham/shstrtab_name
use correct .shstrtab section name when relocating it
2023-04-15 12:13:19 +00:00
Romain Thomas 27163edbd9 Merge pull request #896 from pkking/master
fix miscalculating offset in debug log
2023-04-15 11:18:03 +00:00
Romain Thomas cfe89fdc3c Bump version 2023-04-15 13:16:25 +02:00
Li Chaoran fd2cbb82c9 fix miscalculating offset in debug log
Signed-off-by: Li Chaoran <pkwarcraft@gmail.com>
2023-04-14 17:28:28 +08:00
graham sanderson 79ddf1ad98 use correct .shstrtab section name when relocating it 2023-04-13 21:52:29 -05:00
Romain Thomas 966a66c78a Set date 2023-04-09 16:06:06 +02:00
Romain Thomas f8f38b6075 Update stubs 2023-04-09 12:40:24 +02:00
Romain Thomas e05ba11196 Add support for new LoadConfiguration 2023-04-09 12:20:18 +02:00
Romain Thomas 7f8898c853 Resolve #893 2023-04-08 19:26:36 +02:00
Romain Thomas b54bece30d Resolve #291 2023-04-08 14:46:31 +02:00
Romain Thomas 705cc95d7f Fix CI 2023-04-08 12:14:50 +02:00
Romain Thomas 1f7d55cffb Fix typo 2023-04-08 12:14:49 +02:00
Romain Thomas bc772aa9a3 Merge pull request #890 from navytux/y/hook-ifunc
doc/04_elf_hooking: Fix segmentation fault on systems where libm.so is built with GNU_IFUNC symbols
2023-04-08 07:51:17 +00:00
Romain Thomas 383dc0f7ae Merge pull request #891 from topazus/fix-dep-in-gcc133
Fix missing <cstdint> header for gcc 13
2023-04-08 07:46:45 +00:00
Romain Thomas 961cc44049 Merge branch 'master' into fix-dep-in-gcc133 2023-04-08 07:46:30 +00:00
Romain Thomas 4e318dabf0 Update leaf & Frozen 2023-04-08 09:40:03 +02:00
Romain Thomas 7583aeb55f Remove unused files 2023-04-08 09:15:44 +02:00
Romain Thomas be62792593 Update header guards 2023-04-08 09:11:20 +02:00
Romain Thomas 644e9b70bd Fix header guard 2023-04-08 07:46:56 +02:00
Romain Thomas cb0b6f65ac Fix header guard 2023-04-08 07:32:08 +02:00
Romain Thomas 71237bdb1c Remove the Profiler class 2023-04-08 07:30:07 +02:00
Romain Thomas a75aec0b99 Fix includes (related to #889) 2023-04-08 07:21:23 +02:00
Romain Thomas 7c66ae09b7 Remove setup.py 2023-04-08 07:00:23 +02:00
topazus a32f9a0127 Fix missing <cstdint> header for gcc 13 2023-04-07 10:34:39 +08:00
Kirill Smelkov a92c3148f6 doc/04_elf_hooking: Fix segmentation fault on systems where libm.so is built with GNU_IFUNC symbols
Hello up there. First of all thanks for LIEF - it looks to be very
handy. I've discovered it recently and started to go through the
tutorial, but quickly hit Segmentation Fault instead of successful
result in 04_elf_hooking, and in https://github.com/lief-project/tutorials/tree/master/04_ELF_hooking

    (1.venv) kirr@deca:~/src/tools/exe/LIEF-tutorials/04_ELF_hooking$ make run
    unset LD_LIBRARY_PATH
    ./do_math.bin 2
    cos(2) = -0.416147
    python insert_hook.py
    Hook inserted at VA: 0x344000
    Change cos!33640 -> cos!3440d0
    LD_LIBRARY_PATH=. ./do_math.bin 2
    make: *** [Makefile:17: run] Segmentation fault (core dumped)

Inspecting with gdb showed that this segmentation fault happens
because cos@got.plt entry is being set with 0x0000000a address even
though everything looks more or less ok in readelf output of updated
libm.so . Further running the example in gdb with setting hardware
watchpoint on cos@got.plt lead to seeing it is being set, expectedly, by
_dl_fixup in ld.so . To investigate I've built glibc with ld.so from
sources, added debugging prints and saw the following:

	...
        219551:     XXX DL_FIXUP 70
        219551:     symbol=cos;  lookup in file=./do_math.bin [0]
        219551:     symbol=cos;  lookup in file=./libm.so.6 [0]
        219551:       -> found it:
        219551:       sym @7f1020de6e88:
        219551:       .st_shndx: 15
        219551:       .st_value: 3440d0
        219551:       .st_size:  4b
        219551:       (weak)
        219551:       (global)
        219551:       map @7f10211260c0:
        219551:       .l_name ./libm.so.6:
        219551:       .l_addr 7f1020de1000:
        219551:       .l_ld:
        219551:         .d_tag 1:
        219551:         .d_val 1:
        219551:         .d_ptr 1:
        219551:     binding file ./do_math.bin [0] to ./libm.so.6 [0]: normal symbol `cos' [GLIBC_2.2.5]
        219551:     .ref @7f1020de6e88:
        219551:     .map @7f10211260c0:
        219551:     (after lookup)
        219551:     value:  7f10211250d0  (= addr)    <-- NOTE
        219551:     value': 7f10211250d0              <-- NOTE
        219551:     ivalue: a                         <-- NOTE
        219551:     (before fixup_plt)
        219551:     (after fixup_plt)
    Segmentation fault (core dumped)

Here we see that address of updated `cos` symbol is first correctly computed,
but after seeing that cos.st_type is GNU_IFUNC, ld.so invokes its code and uses
return value as the address to actually put into got.plt:

    https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/dl-runtime.c;h=d35a725415554337746f562c3f9b16ae8295613c#l123

Since the code we built in hook uses regular FUNC - not GNU_IFUNC - binding
protocol for dynamic linking, this leads to crashes, as `hook.cos` code is used
as ifunc resolver which it did not intended to be.

The fix is simple: explicitly update hooked symbol type to be normal FUNC. Then
ld.so will use regular binding procedure for injected code irregardless of
whether libm.cos was FUNC or GNU_IFUNC.

Fixes:   https://github.com/lief-project/LIEF/issues/380
Updates: https://github.com/lief-project/tutorials/issues/4

Appendix I. ld.so debug print patch
-----------------------------------

```diff
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 05f36a2507..0cb3695bdc 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -456,22 +456,34 @@ do_lookup_x (const char *undef_name, unsigned int new_hash,
       if (sym != NULL)
 	{
 	found_it:
+	  _dl_debug_printf("  -> found it:\n");
+	  _dl_debug_printf("  sym @%lx:\n", (unsigned long)sym);
+	  _dl_debug_printf("  .st_shndx: %d\n", sym->st_shndx);
+	  _dl_debug_printf("  .st_value: %lx\n", sym->st_value);
+	  _dl_debug_printf("  .st_size:  %lx\n", sym->st_size);
+
 	  /* Hidden and internal symbols are local, ignore them.  */
-	  if (__glibc_unlikely (dl_symbol_visibility_binds_local_p (sym)))
+	  if (__glibc_unlikely (dl_symbol_visibility_binds_local_p (sym))) {
+	    _dl_debug_printf("  (local -> skip)\n");
 	    goto skip;
+	  }

-	  if (ELFW(ST_VISIBILITY) (sym->st_other) == STV_PROTECTED)
+	  if (ELFW(ST_VISIBILITY) (sym->st_other) == STV_PROTECTED) {
+	    _dl_debug_printf("  (protected)\n");
 	    _dl_check_protected_symbol (undef_name, undef_map, ref, map,
 					type_class);
+          }

 	  switch (ELFW(ST_BIND) (sym->st_info))
 	    {
 	    case STB_WEAK:
+	      _dl_debug_printf("  (weak)\n");
 	      /* Weak definition.  Use this value if we don't find another.  */
 	      if (__glibc_unlikely (GLRO(dl_dynamic_weak)))
 		{
 		  if (! result->s)
 		    {
+	              _dl_debug_printf("  (weak -> already)\n");
 		      result->s = sym;
 		      result->m = (struct link_map *) map;
 		    }
@@ -479,18 +491,30 @@ do_lookup_x (const char *undef_name, unsigned int new_hash,
 		}
 	      /* FALLTHROUGH */
 	    case STB_GLOBAL:
+	      _dl_debug_printf("  (global)\n");
 	      /* Global definition.  Just what we need.  */
 	      result->s = sym;
 	      result->m = (struct link_map *) map;
+
+	      _dl_debug_printf("  map @%lx:\n", (unsigned long)map);
+	      _dl_debug_printf("  .l_name %s:\n", map->l_name);
+	      _dl_debug_printf("  .l_addr %lx:\n", map->l_addr);
+	      _dl_debug_printf("  .l_ld:\n");
+	      _dl_debug_printf("    .d_tag %lx:\n", map->l_ld->d_tag);
+	      _dl_debug_printf("    .d_val %lx:\n", map->l_ld->d_un.d_val);
+	      _dl_debug_printf("    .d_ptr %lx:\n", map->l_ld->d_un.d_ptr);
+
 	      return 1;

 	    case STB_GNU_UNIQUE:;
+	      _dl_debug_printf("  (unique)\n");
 	      do_lookup_unique (undef_name, new_hash, (struct link_map *) map,
 				result, type_class, sym, strtab, ref,
 				undef_map, flags);
 	      return 1;

 	    default:
+	      _dl_debug_printf("  (default)\n");
 	      /* Local symbols are ignored.  */
 	      break;
 	    }
@@ -871,6 +895,9 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
    }

+  _dl_debug_printf(".ref @%lx:\n", (unsigned long)current_value.s);
+  _dl_debug_printf(".map @%lx:\n", (unsigned long)current_value.m);
+
   *ref = current_value.s;
   return LOOKUP_VALUE (current_value.m);
 }
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index d35a725415..3f2771c5de 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -59,6 +59,8 @@ _dl_fixup (
   lookup_t result;
   DL_FIXUP_VALUE_TYPE value;

+  _dl_debug_printf("XXX DL_FIXUP %d\n", sym->st_name);
+
   /* Sanity check that we're really looking at a PLT relocation.  */
   assert (ELFW(R_TYPE)(reloc->r_info) == ELF_MACHINE_JMP_SLOT);

@@ -95,6 +97,8 @@ _dl_fixup (
       result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, l->l_scope,
 				    version, ELF_RTYPE_CLASS_PLT, flags, NULL);

+      _dl_debug_printf("(after lookup)\n");
+
       /* We are done with the global scope.  */
       if (!RTLD_SINGLE_THREAD_P)
 	THREAD_GSCOPE_RESET_FLAG ();
@@ -108,9 +112,11 @@ _dl_fixup (
 	 offset.  */
       value = DL_FIXUP_MAKE_VALUE (result,
 				   SYMBOL_ADDRESS (result, sym, false));
+      _dl_debug_printf("value:  %lx  (= addr)\n", value);
     }
   else
     {
+      _dl_debug_printf("(make value branch 2)\n");
       /* We already found the symbol.  The module (and therefore its load
 	 address) is also known.  */
       value = DL_FIXUP_MAKE_VALUE (l, SYMBOL_ADDRESS (l, sym, true));
@@ -119,10 +125,14 @@ _dl_fixup (

   /* And now perhaps the relocation addend.  */
   value = elf_machine_plt_value (l, reloc, value);
+  _dl_debug_printf("value': %lx\n", value);

+  // XXX here
   if (sym != NULL
-      && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0))
+      && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)) {
     value = elf_ifunc_invoke (DL_FIXUP_VALUE_ADDR (value));
+    _dl_debug_printf("ivalue: %lx\n", value);
+  }

 #ifdef SHARED
   /* Auditing checkpoint: we have a new binding.  Provide the auditing
@@ -159,7 +169,12 @@ _dl_fixup (
   if (__glibc_unlikely (GLRO(dl_bind_not)))
     return value;

-  return elf_machine_fixup_plt (l, result, refsym, sym, reloc, rel_addr, value);
+  _dl_debug_printf("(before fixup_plt)\n");
+  //return elf_machine_fixup_plt (l, result, refsym, sym, reloc, rel_addr, value);
+  DL_FIXUP_VALUE_TYPE xxx;
+  xxx = elf_machine_fixup_plt (l, result, refsym, sym, reloc, rel_addr, value);
+  _dl_debug_printf("(after fixup_plt)\n");
+  return xxx;
 }

 #ifndef PROF
@@ -175,6 +190,8 @@ _dl_profile_fixup (
 {
   void (*mcount_fct) (ElfW(Addr), ElfW(Addr)) = _dl_mcount;

+  _dl_debug_printf("XXX DL_PROFILE_FIXUP ...\n");
+
   if (l->l_reloc_result == NULL)
     {
       /* BZ #14843: ELF_DYNAMIC_RELOCATE is called before l_reloc_result
```
2023-04-06 16:38:04 +03:00
Romain Thomas 8c5d2e378e Update doc 2023-04-02 14:52:11 +02:00
Romain Thomas 3f3a39168c Update doc 2023-04-02 14:25:18 +02:00
Romain Thomas d2fe82a6b4 Resolve #880 2023-04-02 07:23:52 +02:00
Romain Thomas 62aed5f014 Fix include 2023-04-01 18:36:34 +02:00
Romain Thomas ff08b85528 Fix includes 2023-04-01 18:22:55 +02:00
Romain Thomas 5341906d83 Merge pull request #883 from nikitalita/fix-elf-strings
ELF: fix assertion failure in `Binary::strings()`
2023-04-01 16:17:29 +00:00
Romain Thomas 3564d6f7a9 Fix missing includes 2023-04-01 14:51:57 +02:00
Romain Thomas 58a756460a Clean headers 2023-04-01 09:18:43 +02:00
Romain Thomas cf06502b17 Resolve #884 2023-04-01 09:17:59 +02:00
nikitalita e9caa7dc23 ELF: fix assertion failure in Binary::strings()
`std::isprint()` will assert if the integer checked is < 0.
Have it check the uint8_t value instead.
2023-03-28 19:14:57 -07:00
Romain Thomas df9a91a267 Limit the number of reserved entries 2023-03-26 11:23:27 +02:00
Romain Thomas 23305900c5 Fix link 2023-03-26 11:20:13 +02:00
Romain Thomas 7a87f7405f Include abstract tests 2023-03-26 10:29:47 +02:00
Romain Thomas 2daaf38cb3 Fix missing include 2023-03-26 10:27:03 +02:00
Romain Thomas 3497515a94 Enhance code profiling 2023-03-26 08:16:25 +02:00
Romain Thomas 683fc6cea7 Enhance mypy stubs (related to #650) 2023-03-25 10:45:37 +01:00
Romain Thomas bc588849f8 Fix style 2023-03-25 08:57:38 +01:00
Romain Thomas 8a6b579029 Merge pull request #878 from nsurbay/fix-brokenLink
Fix broken link in documentation
2023-03-25 07:27:59 +00:00
Romain Thomas 574b4d9b3c Merge pull request #879 from nsurbay/liefInstallOpt
Add LIEF_INSTALL option
2023-03-25 07:27:13 +00:00
Romain Thomas 656c6b4fdd Fix warning 2023-03-25 07:19:39 +01:00
Nicolas Surbayrole 0c1a3360fa Add LIEF_INSTALL option to disable cmake install and export 2023-03-23 13:31:35 +01:00
Nicolas Surbayrole 3119d39deb Fix broken link in documentation
see https://github.com/microsoft/vcpkg/commit/547c030e68163025534ca3cfa372a95a88fefe24
2023-03-22 18:47:32 +01:00
Romain Thomas 2de5816f04 Update stubs 2023-03-19 20:21:51 +01:00
Romain Thomas 363f1a1b07 Add API to setup a log file sink (fix #875) 2023-03-18 11:16:34 +01:00
Romain Thomas a3ec9dc89e FILE_END is a Windows macro [...] so let's change it. 2023-03-18 10:41:21 +01:00
Romain Thomas 9320303fb3 Enhance the methods to relocate the segments table
This commit resolves #872
2023-03-18 07:30:23 +01:00
Romain Thomas 8aa5b1bdec Update doc 2023-03-18 06:30:23 +01:00
Romain Thomas 0875ee2467 Narrowing issue 2023-03-11 18:01:33 +01:00
Romain Thomas 6357c6370b Use the span interface 2023-03-11 16:37:09 +01:00
Romain Thomas e9d1116c79 Fix expired certificate 2023-03-11 16:31:15 +01:00
Romain Thomas 47b131303f Fix fuzzer 2023-03-11 16:27:58 +01:00
Romain Thomas 8396a9a6c1 Sanitize inputs 2023-03-05 09:54:54 +01:00
Romain Thomas 0d631bf0a0 Clean code for the Melkor fuzzer 2023-03-05 09:54:53 +01:00
Romain Thomas d3aa0f4f93 Remove exceptions 2023-03-05 09:54:48 +01:00
Romain Thomas 86411a3611 Fix typo 2023-03-04 10:54:09 +01:00
Romain Thomas c8ece33fc9 Move files to cmake/ 2023-03-04 10:41:47 +01:00
Romain Thomas f68f6dec50 Remove legcy ci config 2023-03-04 09:48:20 +01:00
Romain Thomas 98b5f5fc5a Update changelog 2023-03-04 08:39:00 +01:00
Romain Thomas f2a2bf4ca6 Localize static constructors to limit the overhad while loading the library 2023-03-04 08:35:20 +01:00
Romain Thomas 56151b85aa Update README 2023-02-25 07:26:46 +01:00
Romain Thomas e9045bc6e9 Move from iostream to ostream 2023-02-25 07:23:41 +01:00
Romain Thomas 2aad8e8de3 Update changelog 2023-02-19 20:32:41 +01:00
Romain Thomas 9da2466609 Improve the LIEF Python build system by using pyproject.toml
- It also provides typing info (close #650)
- Enhance the test suite
- Remove deprecated PE functions
2023-02-19 20:19:03 +01:00
Romain Thomas 047facb618 Add sanity checks 2023-02-18 07:17:26 +01:00
Romain Thomas 988d862a9e Update changelog 2023-02-11 09:23:31 +01:00
Romain Thomas 69e9fd39a5 Remove PE hooking 2023-02-11 09:21:21 +01:00
Romain Thomas b7b50c245d Remove duplicated entry 2023-02-11 09:15:42 +01:00
Romain Thomas f495235196 Add test case for #863 2023-02-04 18:24:50 +01:00
Romain Thomas 797ff2687c Fix #863 2023-02-04 18:17:37 +01:00
Romain Thomas 6986f4998c Fix linker flags 2023-02-04 16:06:09 +01:00
Romain Thomas 6f84e2f6c4 Fix linker flags 2023-02-04 15:35:29 +01:00
Romain Thomas 47f8e708c6 Reword/fix the tutorial 2023-02-04 10:17:58 +01:00
Romain Thomas aab02fc335 Link against liblog when building a dynamic version of libLIEF 2023-02-04 08:45:42 +01:00
Romain Thomas c91b7c2de1 Update code to ease Python stub files (related #650) 2023-02-04 08:45:40 +01:00
Romain Thomas 7101b7f1be Update README 2023-01-29 17:12:44 +01:00
Romain Thomas cfb2ecbc41 Update tests 2023-01-29 17:11:23 +01:00
Romain Thomas f6f5d2bb19 Update tests 2023-01-29 17:09:23 +01:00
Romain Thomas 6594b7d1ab Allows Binary::write to take a Builder::config_t parameter 2023-01-29 17:09:11 +01:00
Romain Thomas af371d50ba Disable automatic .note building 2023-01-29 16:52:30 +01:00
Romain Thomas 601232f730 Fix Windows build path
Thanks to Laurent Laubin
2023-01-21 16:40:26 +01:00
Romain Thomas ab8d2dc2a7 Merge pull request #856 from ekilmer/cmake-config-fix-uninit-variable
CMake config: check whether variable is DEFINED
2023-01-21 15:17:23 +00:00
Eric Kilmer 205c1c5891 CMake config: check whether variable is DEFINED
When running CMake with `-Werror=dev` on an external project that uses/finds
LIEF, there is an error if the user did not define the `LIEF_INCLUDE_DIR`
variable. This variable is not defined by default.

This commit adds a check for whether the variable is defined.
2023-01-17 11:46:43 -05:00
Romain Thomas 50eaed3ae5 Update tag (#855) 2023-01-17 05:47:28 +01:00
Romain Thomas b8a9a5ae6e Resolve #853 2023-01-11 09:47:29 +01:00
Romain Thomas 7735c35f16 Merge pull request #854 from fanquake/has_elf_typo
ELF: fix typo in has() description
2023-01-11 07:28:37 +00:00
fanquake 6389d5d718 ELF: fix typo in has() description 2023-01-09 17:32:17 +00:00
Romain Thomas 0e72048685 Fix memory parsing issue 2023-01-09 11:02:51 +01:00
Romain Thomas d8f42d74bf Init values 2023-01-03 10:45:54 +01:00
Romain Thomas 969411f8ef Welcome 2023 2023-01-03 10:38:09 +01:00
Romain Thomas 9633e297d8 Cleanup setup.py 2023-01-03 10:38:08 +01:00
Romain Thomas 1149e81c2b Merge pull request #849 from mrexodia/msvc-runtime
Fix MSVC runtime selection
2023-01-03 09:20:42 +00:00
Romain Thomas 641f10688e Update cache action 2023-01-03 10:19:40 +01:00
Romain Thomas 19d395197d Address #704 2023-01-03 10:15:48 +01:00
Romain Thomas 4ffc81c99f Upgrade Docker image 2023-01-03 10:15:00 +01:00
Duncan Ogilvie bbdc62f691 Fix MSVC runtime selection 2023-01-02 17:30:42 +01:00
Romain Thomas 60f90b60ba Bump version 2023-01-02 17:12:01 +01:00
Romain Thomas ce935d7455 Update changelog 2023-01-02 17:09:06 +01:00
Romain Thomas de63b5721f Update spdlog version 2023-01-02 17:08:17 +01:00
Romain Thomas 9311f0d61c Fix badges 2022-12-17 13:47:41 +01:00
Romain Thomas bdea945ca7 Bump version of setup-python 2022-12-17 13:37:45 +01:00
Romain Thomas 62c9d75020 Update changelog 2022-12-17 13:32:10 +01:00
Romain Thomas f9a56161ed Add test for #845 2022-12-17 13:31:12 +01:00
Romain Thomas 54178656e8 Fix overflow issue 2022-12-17 13:22:43 +01:00
Romain Thomas a12a522410 Backport check from #846 2022-12-17 13:22:17 +01:00
Romain Thomas f8fa944cd8 Update style 2022-12-17 13:21:43 +01:00
Romain Thomas d0b70f096d Add unnecessary copy 2022-12-17 11:22:15 +01:00
Romain Thomas eac0bd7141 Backport check from liyansong2018 (#845 / #846) 2022-12-17 11:19:38 +01:00
Romain Thomas 167843a5f8 Avoid unnecessary allocation 2022-12-17 11:19:30 +01:00
Romain Thomas c0da465f74 Resolve #843 2022-12-14 08:59:29 +01:00
Romain Thomas 30ef3a7ce8 Fix missing include 2022-12-14 08:48:23 +01:00
Romain Thomas e218cc3061 Update changelog 2022-12-11 09:02:38 +01:00
Romain Thomas b3167cb78b Fix missing relationship between symbols and sections
See: #841
2022-12-11 09:01:31 +01:00
Romain 91ccdad497 Merge pull request #842 from liyansong2018/master
Suggestion for #840
2022-12-11 07:52:51 +00:00
liyansong2018 b42b5e68be Check ELF section 2022-12-09 22:12:54 -05:00
Romain Thomas 2a10494b8a Enhance the Python IO interface
Related to #832
2022-12-09 10:22:53 +01:00
Romain Thomas 15d8b2ffaf Cross compile for Apple M1
Fix: #834, #827, #778
2022-12-08 17:45:33 +01:00
Romain 57fcff35c5 Merge pull request #837 from liyansong2018/master
Avoid null pointer in c-api
2022-12-07 11:42:48 +00:00
liyansong2018 0d21ae733e Avoid null pointer in c-api 2022-12-07 04:25:43 -05:00
Romain Thomas 81fd78e81e Use the span/bytes interface (#833) 2022-12-07 08:22:25 +01:00
Romain Thomas cc3297fe2c Update changelog 2022-12-07 08:22:25 +01:00
Romain Thomas 85ce881011 Process #833 2022-12-07 08:22:25 +01:00
Romain 0d813b41a0 Merge pull request #831 from aeflores/avoid-memory-leak-in-c-api
Avoid memory leak for Dynamic entries in C API
2022-12-05 07:03:17 +00:00
Antonio Flores Montoya 15addc8105 Avoid memory leak for Dynamic entries in C API 2022-12-02 13:39:58 -05:00
Romain Thomas 655789e5ae Update changelog 2022-11-29 06:54:23 +01:00
Romain Thomas 1b39ad1ab2 Resolve #830 2022-11-29 06:53:09 +01:00
Romain Thomas 583131153e Fix typo 2022-11-27 11:37:07 +01:00
Romain e8e85732d0 Update issue templates 2022-11-27 10:18:29 +00:00
Romain fef4d9961b Update issue templates 2022-11-27 09:53:49 +00:00
Romain Thomas 3ea3e2e15c Update changelog 2022-11-27 09:25:54 +01:00
Romain Thomas 94613e81e3 Add test 2022-11-27 09:24:02 +01:00
Romain Thomas 2d5dd862e5 Resolve #828 2022-11-26 09:23:51 +01:00
Romain Thomas 77755e5a36 Print the actual version, not the pointer 2022-11-24 05:00:04 +01:00
Romain Thomas d17880fce2 Disable test 2022-11-24 04:23:00 +01:00
Romain Thomas d445beaac3 Expose 'remove_dynamic_symbol' 2022-11-24 04:22:22 +01:00
Romain Thomas 91d5162be4 Enable support for parsing a Mach-O from memory 2022-11-22 10:55:15 +01:00
Romain Thomas cd5f0ede27 Fix offset to virtual address conversion 2022-11-22 07:29:05 +01:00
Romain Thomas c35c23ef2c Bump limit (c.f. #821) 2022-11-21 17:18:45 +01:00
Romain Thomas fe09a71580 Enhance condition 2022-11-17 17:27:06 +01:00
Romain Thomas 6a244e1368 Fix conflict 2022-11-17 17:26:49 +01:00
Romain Thomas 86a13f2756 Fix constructor 2022-11-17 16:52:27 +01:00
Romain Thomas 84c921ebbf Fix extra comma 2022-11-17 16:52:27 +01:00
Romain 2eafce19bb Merge pull request #823 from mrexodia/unqualified-name-fix
Fix ambiguous name error with `using namespace std;`
2022-11-17 15:41:12 +00:00
Romain Thomas 94ebabcca8 Fix tests 2022-11-17 16:20:02 +01:00
Romain Thomas abc6c2d46c Revert "Run tests with Python 3.10"
This reverts commit 72e2393bcf.
2022-11-17 15:48:24 +01:00
Romain Thomas 72e2393bcf Run tests with Python 3.10 2022-11-14 07:06:24 +01:00
Romain Thomas 7458db97ed Refactor test to use pytest 2022-11-14 06:26:39 +01:00
Romain Thomas f4601fc86a Fix semi-colon 2022-11-13 09:57:40 +01:00
Romain Thomas 064a9093d5 Move PE tests to pytest 2022-11-12 20:37:14 +01:00
Romain Thomas ff400de5bc Remove the original test file 2022-11-12 19:44:45 +01:00
Romain Thomas 664b096e52 Move VDEX tests to pytest 2022-11-12 19:44:17 +01:00
Romain Thomas 4359051d4a Move OAT tests to pytest 2022-11-12 15:21:02 +01:00
Romain Thomas 02b1c043c1 Move ART tests to pytest 2022-11-12 15:06:03 +01:00
Romain Thomas 5f12f27335 Move DEX tests to pytest 2022-11-12 10:59:38 +01:00
Romain Thomas e7eaa8e753 Print the warning once 2022-11-12 10:42:52 +01:00
Romain Thomas 784cef9f63 Update changelog 2022-11-10 10:26:57 +01:00
Romain Thomas 803127cf52 Resolve #816 2022-11-09 17:55:54 +01:00
Romain Thomas 2fd6ac9538 Fix typo 2022-11-09 06:56:24 +01:00
Romain Thomas 2c96eab4b3 Add 0.12.3 changelog 2022-11-08 06:20:14 +01:00
Romain 773f97f0b7 Merge pull request #819 from mgunyho/tutorial-fixes
Fixes to tutorials
2022-11-08 04:54:48 +00:00
mgunyho f24df1dfbd Add a connecting sentence 2022-11-06 15:27:51 +02:00
mgunyho 94c5e1ce7e Fix a typo 2022-11-06 15:27:36 +02:00
mgunyho 33b14a50c9 Fix math 2022-11-06 15:26:56 +02:00
mgunyho f60c7521c7 Fix a typo in the shell example 2022-11-06 15:26:56 +02:00
mgunyho 0be18d4a9f Fix typo in link 2022-11-06 15:26:56 +02:00
mgunyho d4d0ff19a2 Make Python example in tutorial stand-alone 2022-11-06 15:26:56 +02:00
Romain Thomas 510105d51f Use Python final release 2022-11-01 09:34:24 +01:00
Romain Thomas 9dbbc39c65 Update dependencies 2022-11-01 08:16:36 +01:00
Marcel dd48e47d98 Fix ambiguous name error with using namespace std; 2022-10-31 17:45:01 +01:00
Romain Thomas 12a60d54e9 Fix #813 2022-10-25 06:49:32 +02:00
Romain Thomas 6be45c9bcf Fix log 2022-10-25 06:34:43 +02:00
Romain b74e1e1020 Merge pull request #815 from toge/support-gcc5
Fix name lookup issue on older gcc
2022-10-25 04:30:52 +00:00
toge 66e80b31aa solve name lookup issue on older gcc 2022-10-24 17:18:38 +09:00
Romain Thomas 100917541f Silently fail 2022-10-21 11:26:07 +02:00
Romain Thomas 288b4b75c8 Fix error 2022-10-21 11:12:00 +02:00
Romain Thomas 39bbd66193 Fix typo 2022-10-21 10:32:34 +02:00
Romain Thomas 6497d02b28 Fix #812 2022-10-21 09:24:10 +02:00
Romain Thomas 8f06f47fc9 Fix coding style 2022-10-21 09:08:06 +02:00
Romain fddaf96f67 Merge pull request #807 from ahawad/master
Updates the .dynamic section's contents after rebuilding it.
2022-10-21 07:05:50 +00:00
Romain Thomas 3a3e32760b Add test case 2022-10-21 09:05:26 +02:00
Romain 0e863c5bd1 Merge pull request #809 from redspot/master
Bugfix for ImportEntry to accept PE_TYPE
2022-10-21 07:01:47 +00:00
Romain Thomas 8a555be07b Resolve #808 2022-10-19 10:05:35 +02:00
Wilson Martin 7e624c997a Bugfix for ImportEntry to accept PE_TYPE
In the Python bindings, a new instance of ImportEntry
has it's type hard-coded to PE_TYPE::PE32, with no
way to change the type once created.

This prevents adding new ordinal imports to PE32+,
aka 64-bit, binaries.

The fix is to allow ImportEntry to also accept PE_TYPE.
In addition, the unittest also documents how to add an ordinal
using LIEF.

* Update ImportEntry to accept PE_TYPE
* Update python bindings for ImportEntry
* Add unittest for ImportEntry and ordinals
2022-10-12 14:38:56 -04:00
Romain Thomas 88d18b7342 Fix #804 2022-10-11 15:09:46 +02:00
Romain Thomas aa24163cca Update gitignore 2022-10-11 14:48:48 +02:00
ahawad ab7421e9e4 Updates the .dynamic section's contents after rebuilding it. 2022-10-09 19:08:44 +01:00
Romain Thomas 76742cd93b Update changelog 2022-10-09 19:04:54 +02:00
Romain Thomas 27a3fc6356 Resolve #806 2022-10-09 18:52:21 +02:00
Romain 84b0909170 Merge pull request #798 from its0x08/patch-1
chore: Add gitignore
2022-09-28 04:24:52 +00:00
Romain c272b2535d Merge pull request #800 from RaisinTen/fix-warning
Fix compiler warning in `LIEF::BinaryStream::peek_u16string()`
2022-09-28 04:24:20 +00:00
Darshan Sen af971ccea4 Fix compiler warning in LIEF::BinaryStream::peek_u16string()
This change fixes this compiler warning:

```sh
[218/228] Building CXX object vendor/lief/CMakeFiles/LIB_LIEF.dir/src/BinaryStream/BinaryStream.cpp.o
/Users/raisinten/Desktop/git/postject/vendor/lief/src/BinaryStream/BinaryStream.cpp:232:10: warning: variable 'count' set but not used [-Wunused-but-set-variable]
  size_t count = 0;
         ^
1 warning generated.
```

by removing all uses of count because it is unused.

Signed-off-by: Darshan Sen <raisinten@gmail.com>
2022-09-27 11:49:01 +05:30
0x08 bf70bcaedf chore: Add gitignore
- Create `.gitignore` file to avoid overflowing VSCode with changed, that belong to the building process, after having built the project.
2022-09-23 11:06:37 +03:00
Romain Thomas b502b8d32f Update changelog 2022-09-23 08:25:22 +02:00
Romain Thomas 527c019c0f Fix #793 2022-09-23 08:22:41 +02:00
Romain Thomas f7ad93dec0 Resolve #787 2022-09-23 07:55:49 +02:00
Romain Thomas c4ef9f0efc Fix #786 2022-09-21 07:22:27 +02:00
Romain Thomas b183666a08 Fix #785 2022-09-20 04:59:23 +02:00
Romain Thomas e6512ce080 Fix missing copy_file (related to #770) 2022-09-20 04:45:41 +02:00
Romain Thomas 24935f654f Fix #784 2022-09-12 07:10:18 +02:00
Romain Thomas 98d33929de Fix #782 2022-09-12 07:06:08 +02:00
Romain Thomas fde2c48986 Fix #781 2022-09-12 06:32:57 +02:00
Romain Thomas f29aa6ba0d Fix DOWNLOAD_EXTRACT_TIMESTAMP warning 2022-09-12 06:31:28 +02:00
Romain 39b592d3b8 Merge pull request #780 from dsanders11/matcho-64-to-32-fixes
Fix some conversions of 64-bit to 32-bit types in MachO code
2022-09-12 02:44:05 +00:00
Romain 23397f5913 Merge pull request #779 from dsanders11/patch-3
Fix LIEF_VDEX option description
2022-09-11 14:11:34 +00:00
David Sanders ba57e54d5c Fix some conversions of 64-bit to 32-bit types in MachO code 2022-09-10 06:56:15 -07:00
David Sanders acda2974bf Fix LIEF_VDEX option description 2022-09-10 06:17:47 -07:00
Romain Thomas ad81191667 Enable to release binaries 2022-08-13 05:27:53 +02:00
Romain Thomas 27754bc698 Update bindings 2022-08-13 04:53:27 +02:00
Romain Thomas 0033b6312f Resolve #767 2022-08-13 04:51:09 +02:00
Romain Thomas ca93874026 Fix #766 2022-08-13 04:50:33 +02:00
Romain Thomas 4937a24a0b Fix #765 2022-08-13 04:49:47 +02:00
Romain Thomas 9e21e8d36d Resolve #770 2022-08-13 04:03:24 +02:00
Romain Thomas 365a16a564 Update changelog 2022-08-10 08:05:07 +02:00
Romain Thomas 53bf680ef4 Fix #763 2022-08-10 08:02:29 +02:00
Romain Thomas 7acf0bc422 Resolve #764 2022-08-10 07:26:49 +02:00
Romain Thomas 5d1d643a0c Fix #760 2022-08-03 16:45:24 +02:00
Romain 6bbb37ca07 Merge pull request #758 from rafael-santiago/master
Avoid using -1u constant and fix conflict with max() macro from Windows API
2022-07-30 04:18:44 +00:00
Romain ee548255f4 Merge pull request #757 from ZehMatt/mbedtls-preprocessor
Remove preprocessor macros for mbedtls
2022-07-30 04:18:13 +00:00
rafael-santiago c6b54cb045 Avoid using -1u constant and fix conflict with max() macro from Windows API
This commit introduces one improvement to make easy to build
softwares that depends on `LIEF` when treating warnings as error and
also a fix to a conflict between `std::numeric_limits::max()` and `max()`
function from `Windows API`. If a `LIEF`'s client includes parts of
`Windows` headers that will hit on `max` macro and after including
some `LIEF` headers, some compilation errors complaining about
this conflict will show up.

    The improvement related to silent up the `MSVC` "unary minus
operator applied to unsigned type, result still unsigned" is
about stop using the hardcoded `-1u` and start using the
suitable constants defined in `climits` (i.e.: `limits.h`). Being
`UINT_MAX` for `uint32_t` and `SIZE_MAX` for `size_t`.

    The fix related to the compilation error produced
by the conflict with `max()` macro from `Windows API` was merely wrap
`std::numeric_limits::max()` statement with `(...)`.
2022-07-28 17:09:33 -03:00
ζeh Matt 194089bcba Remove preprocessor macros, mbedtls uses config.h 2022-07-28 17:02:41 +03:00
Romain Thomas 95e78e880c Update hashs 2022-07-28 07:47:34 +02:00
Romain Thomas 8882068501 Update tests 2022-07-28 07:47:34 +02:00
Romain Thomas 8870247fae Keep the hash value on a ptr size 2022-07-28 07:47:34 +02:00
ζeh Matt 102aad8394 Revert back the hash function but silence warnings 2022-07-28 07:47:34 +02:00
ζeh Matt aee865386f Fix some compiler warnings 2022-07-28 07:47:34 +02:00
Romain 1cae649d7b Merge pull request #755 from floitsch/patch-1
Fix hasme typos
2022-07-28 04:52:47 +00:00
Florian Loitsch 84a293950f Fix hasme typos 2022-07-27 14:33:08 +02:00
Romain Thomas ddbf40f6e4 Only check the output 2022-07-22 08:18:05 +02:00
Romain Thomas f93029f2c2 Fix #753 2022-07-22 06:43:57 +02:00
Romain Thomas ee898650ba Update changelog 2022-07-22 06:39:46 +02:00
ζeh Matt 6085bbc949 Use explicit function signature for python bindings on write function 2022-07-22 06:36:35 +02:00
ζeh Matt 9d55f53860 Add overloads to write output to std::ostream 2022-07-21 18:16:53 +03:00
Romain Thomas 1730a680b4 Fix typo 2022-07-20 07:10:26 +02:00
Romain Thomas 11e307fc0d Fix test 2022-07-20 06:56:22 +02:00
Romain Thomas e6ecff7006 Add tests 2022-07-20 06:50:54 +02:00
Romain Thomas 6e3d640c1a Update the changelog 2022-07-20 06:41:11 +02:00
Antonio Flores Montoya 05e52e11bf Only assign a SymbolVersionAux to a SymbolVersion if it does not yet contain one.
This makes sure that whenever we have a SymbolVersionDefinition with multiple
entries only the first entry gets associated to the SymbolVersion.
Subsequent entries represent version predecessors, not the main version of the symbol
definition.
2022-07-20 06:36:18 +02:00
Romain Thomas 1624c4446f Resolve #747 2022-07-20 06:23:29 +02:00
Romain 28cd6ec1ca Merge pull request #750 from orca-repos/orca-patches
Correction of an ambiguous symbol in the binary API
2022-07-19 04:29:58 +00:00
William Roy c753e0cf10 Fix Binary API conflict from redundant qualifier
Signed-off-by: William Roy <wroy@proton.me>
2022-07-16 16:41:20 -04:00
Romain Thomas 212c04557f Does not fatally fail 2022-07-14 19:11:46 +02:00
Romain Thomas 64ead975b8 Fix 745 2022-07-14 16:11:55 +02:00
Romain Thomas dcf32cbf17 Fix f-string 2022-07-05 11:35:23 +02:00
Romain Thomas 18759849e7 Fix #739 2022-07-03 07:16:48 +02:00
Romain Thomas 0c244dab90 Fix #735 2022-07-03 06:41:38 +02:00
Romain Thomas d1ab0c71f5 Fix regression from #736 2022-07-03 06:36:47 +02:00
Romain c377d5c799 Merge pull request #741 from Pilphe/fix/dex_print_method_return_type
Fix return_type_ string while printing a DEX method
2022-07-03 04:25:32 +00:00
mbourget 16bd9d27de Fix return_type_ string while printing a DEX method 2022-06-30 15:31:29 +02:00
Romain 9cf3b56cf0 Merge pull request #736 from robertgzr/master
Pass jobs value to ninja as well
2022-06-23 04:04:04 +00:00
Robert Günzler 84f3acc5aa Pass jobs value to ninja as well
Signed-off-by: Robert Günzler <r@gnzler.io>
2022-06-23 04:03:54 +00:00
Romain ddaf96805c Merge pull request #734 from ZehMatt/fix-733
Fix #733: Use correct count for data directories (PE)
2022-06-23 04:02:32 +00:00
ζeh Matt 8ad11c21e5 Fix #733: Use correct count for data directories (PE) 2022-06-21 23:29:52 +03:00
Romain 7fa0d95f25 Merge pull request #732 from dsanders11/macho-binary-page-size
Improve Mach-O handling of page size
2022-06-19 18:22:17 +00:00
David Sanders 10f8d01b8d Improve Mach-O handling of page size 2022-06-18 11:00:27 -07:00
Romain Thomas c52a39850c Fix #731 2022-06-18 10:39:20 +02:00
Romain ad2d53d15a Merge pull request #730 from dsanders11/fix-macho-segment-numberof-sections
Increase numberof_sections when adding section to Mach-O segment
2022-06-18 07:47:38 +00:00
Romain a201a75498 Merge branch 'master' into fix-macho-segment-numberof-sections 2022-06-18 07:47:17 +00:00
Romain 256b43c6f9 Merge pull request #729 from dsanders11/fix-issue-728
Set correct virtual size when adding Mach-O segment
2022-06-18 07:45:12 +00:00
David Sanders 261b8e66a6 Set correct virtual size when adding Mach-O segment 2022-06-18 07:45:03 +00:00
Romain Thomas 2d0525257a Merge branch 'ci/python311' 2022-06-18 09:13:27 +02:00
Romain Thomas d84dd57127 Add Python 3.11 2022-06-18 09:13:01 +02:00
Marcelo Duarte 1b2e841502 Add Python 3.11 b3 to Win64 build 2022-06-18 09:11:01 +02:00
Romain ee66264a6a Merge pull request #727 from dsanders11/fix-issue-726
Align __LINKEDIT virtual size
2022-06-18 07:09:41 +00:00
David Sanders abd804a552 Increase numberof_sections when adding section to Mach-O segment 2022-06-17 21:01:58 -07:00
Romain a6c557855e Merge pull request #723 from dsanders11/pe-resource-node-ordering
Fix ordering of resource node childs in PE
2022-06-17 05:08:54 +00:00
David Sanders 06d492b8f6 Fix ordering of resource node childs in PE 2022-06-17 05:07:57 +00:00
Romain Thomas fa306af477 Bump pybind11 version 2022-06-17 06:48:58 +02:00
Romain 7a2f606c48 Merge pull request #724 from marcelotduarte/msys2
Fix build in MSYS2
2022-06-17 04:35:50 +00:00
David Sanders 1a631cebfe Align __LINKEDIT virtual size 2022-06-15 23:55:07 -07:00
Marcelo Duarte df32d17a25 Fix build in MSYS2 2022-06-16 01:13:38 -03:00
Romain 39da57cf6b Merge pull request #722 from dsanders11/patch-2
Remove extraneous semicolon
2022-06-15 05:39:00 +00:00
David Sanders f7ffbfb6ce Remove extraneous semicolon 2022-06-14 18:28:04 -07:00
Romain Thomas 55b4808666 Try importing from setuptools's vendor 2022-06-14 08:52:29 +02:00
Romain Thomas 9437acb2c3 Add CI step to upgrade pip 2022-06-14 08:40:19 +02:00
Romain Thomas 0af845c324 Modernize with f-string 2022-06-14 06:07:05 +02:00
Romain Thomas 26fd41b56e Resolve #719 2022-06-14 05:58:30 +02:00
Romain 82419fb435 Merge pull request #718 from laanwj/2022-06-ppc64-nx
Correct default for Binary::has_nx on ppc64
2022-06-14 03:46:51 +00:00
laanwj c06af2d15b Correct default for Binary::has_nx on ppc64
From the Linux kernel source:

     * This is the default if a program doesn't have a PT_GNU_STACK
     * program header entry. The PPC64 ELF ABI has a non executable stack
     * stack by default, so in the absence of a PT_GNU_STACK program header
     * we turn execute permission off.

Resolve #717
2022-06-13 14:39:06 +02:00
Romain Thomas ced4499bf8 Remove the hard limit on the number of ELF sections
Resolve #706
2022-06-12 09:47:51 +02:00
Romain Thomas 6ccdffe221 Resolve #703 2022-06-12 09:42:32 +02:00
Romain 08f3c80fae Merge pull request #716 from dsanders11/macho-remove-section
Add API to remove a section from a segment & section names
2022-06-12 07:04:08 +00:00
David Sanders 0ecd6682c7 Add API to remove a section from a segment & section names 2022-06-12 07:03:48 +00:00
Romain 79909cbed9 Merge pull request #713 from ZehMatt/fix-712
Fix #712: Guard json includes with LIEF_JSON_SUPPORT
2022-06-12 07:02:07 +00:00
ζeh Matt 79bc4818c7 Fix #712: Guard json includes with LIEF_JSON_SUPPORT 2022-06-12 07:02:00 +00:00
Romain a57543c950 Merge pull request #714 from ZehMatt/fix-cmake-multiconfig
Fix CMake error using multi-configuration generator
2022-06-12 07:01:02 +00:00
Romain 0e518017d3 Merge branch 'master' into fix-cmake-multiconfig 2022-06-12 07:00:53 +00:00
Romain 10714e3215 Merge pull request #715 from dsanders11/patch-1
Use consistent parameter name
2022-06-12 07:00:33 +00:00
David Sanders 45cb65e2ca Use consistent parameter name 2022-06-10 22:42:43 -07:00
ζeh Matt 336165fc96 Fix CMake error using multi-configuration generator 2022-06-11 06:56:36 +03:00
Romain Thomas f8c711dd94 Update sanitize check API 2022-06-04 13:54:53 +02:00
Romain 378233570b Merge pull request #707 from rafael-santiago/master
Detect data section end's before going ahead on accessing it
2022-06-04 06:57:27 +00:00
rafael-santiago f230094d58 Detect data section end's before going ahead on accessing it 2022-05-19 20:26:33 -03:00
Romain Thomas 0fdc183551 Early check on the nlist.str_idx 2022-05-02 19:54:48 +02:00
Romain Thomas 722ed6c403 Fix #699 2022-04-22 18:52:47 +02:00
Romain 51d8182047 Merge pull request #698 from pive/master
using CMAKE_CURRENT_SOURCE_DIR in place of CMAKE_SOURCE_DIR for Fetch…
2022-04-21 00:01:05 +00:00
pive 3339248b47 using CMAKE_CURRENT_SOURCE_DIR in place of CMAKE_SOURCE_DIR for FetchContent 2022-04-20 11:52:41 +02:00
Romain Thomas b5a5940b6b Fix checksum 2022-04-20 06:29:18 +02:00
Romain Thomas e726b3d0ba Update spdlog 2022-04-20 06:23:02 +02:00
Romain Thomas b490f97987 Check that the ptr is not null 2022-04-20 05:59:44 +02:00
Romain Thomas 534d1824e5 Prepare for parsing from memory 2022-04-20 05:58:45 +02:00
Romain Thomas e1a8244b92 Enhance Mach-O's builder and add support for recent LC commands 2022-04-16 15:10:56 +02:00
Romain Thomas 3020cc66de Update ScopedStream interface 2022-04-15 06:15:30 +02:00
Romain Thomas c9a4d3335c Fix missing entry 2022-04-13 05:37:18 +02:00
Romain Thomas bafa32f146 Update README 2022-04-13 05:34:02 +02:00
Romain c776d5994c Merge pull request #695 from abraaocsantana/patch-1
Fix project using deprecated iterator base class
2022-04-11 17:15:34 +00:00
Abraão de Santana e4455d7193 Fix project using deprecated iterator base class
Fixes https://github.com/lief-project/LIEF/issues/694
2022-04-08 17:16:08 -03:00
Romain Thomas 57647bb05b Update changelog 2022-04-08 08:33:01 +02:00
Romain Thomas 4f4f636598 Move Builder::optimize to internal utils 2022-04-06 06:31:28 +02:00
Romain Thomas 261c49ebf5 Handle missing __LINKEDIT segment$ 2022-04-06 05:49:33 +02:00
Romain Thomas 7627a1d5da Update sanitizer 2022-04-05 22:07:54 +02:00
Romain Thomas 9cb5c191b4 Add missing else 2022-04-05 22:07:43 +02:00
Romain Thomas 6ae50e517f Fix warnings 2022-04-05 21:56:34 +02:00
Romain Thomas 8e9246992c Fix typo 2022-04-05 04:13:10 +02:00
Romain Thomas 7faf465af5 Fix test 2022-04-04 06:45:05 +02:00
Romain Thomas 208f2debbf Enhance testing 2022-04-04 06:44:54 +02:00
Romain Thomas 7412a4c50c Add API to get a section from a segment & section names 2022-04-04 06:24:37 +02:00
Romain Thomas bef99ccff3 Update test 2022-04-04 06:22:41 +02:00
Romain Thomas 06a8525837 Update env variable setup 2022-04-04 06:04:25 +02:00
Romain Thomas 06db1d29af Only run on Linux 2022-04-03 19:57:38 +02:00
Romain Thomas 266f989e52 Enable support for modifying section-less ELF binaries 2022-04-03 19:34:44 +02:00
Romain Thomas 1307d34b55 Fix memory issues 2022-04-03 11:27:34 +02:00
Romain Thomas 18d7334fbe Update 2022-04-03 10:15:28 +02:00
Romain Thomas 96d39a0834 Add non regression tests 2022-04-03 10:12:18 +02:00
Romain Thomas 7607ce36db Add non regression tests 2022-04-03 09:53:42 +02:00
Romain Thomas 17e40a7de6 Fix env variables 2022-04-03 08:11:30 +02:00
Romain Thomas 31551749e4 Fix #693 2022-04-02 20:02:58 +02:00
Romain Thomas c2dc898a01 Improve the LIEF tests integration 2022-04-02 19:47:51 +02:00
Romain 325ed27f32 Merge pull request #692 from kjackiewicz/master
Fix ELF section inclusion calculations
2022-04-01 19:32:26 +02:00
Krzysztof Jackiewicz fb772b1c67 Fix section inclusion calculations 2022-04-01 09:54:39 +02:00
Romain Thomas ef27ca91b6 Enable release branch 2022-04-01 06:21:52 +02:00
Romain Thomas 7137c4b7e2 Update changelog 2022-04-01 05:39:14 +02:00
Romain Thomas baa023b914 Remove exceptions 2022-04-01 05:38:30 +02:00
1496 changed files with 57978 additions and 43490 deletions
-62
View File
@@ -1,62 +0,0 @@
version: 2.1
jobs:
build:
macos:
xcode: 12.3.0
steps:
- checkout:
path: ~/LIEF
- restore_cache:
keys:
- ccache-{{ arch }}-{{ .Branch }}
- ccache-{{ arch }}-master
- ccache-{{ arch }}
- pyenv
- run:
name: Install pyenv
command: |
brew install pyenv
pyenv root
pyenv install --list
- run:
name: Install ccache
command: brew install ccache
- run:
name: Install ninja
command: brew install ninja
- run:
name: CCache initialization
command: |
ccache --show-stats
ccache --zero-stats
ccache --max-size=10.0G
ccache --set-config=compiler_check=content
- run:
name: LIEF build setup
command: |
export PYTHON_CONFIGURE_OPTS="--enable-shared --enable-unicode=ucs2"
pyenv install --skip-existing 3.9.0
export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9
$PYTHON_BINARY -m pip install --upgrade pip setuptools wheel
$PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
bash scripts/osx/package_sdk.sh
- run:
name: LIEF deploy
command: |
export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9
$PYTHON_BINARY -m pip install --upgrade requests mako
$PYTHON_BINARY .github/deploy.py
- run:
name: ccache stats
when: always
command: |
ccache --show-stats
- save_cache:
key: 'ccache-{{ arch }}-{{ .Branch }}'
paths: [ "/home/circleci/.ccache" ]
- save_cache:
key: 'pyenv'
paths: [ "/home/circleci/.pyenv" ]
-35
View File
@@ -1,35 +0,0 @@
Checks: >
-*,
bugprone-*,
google-*,
misc-*,
modernize-*,
performance-*,
portability-*,
readability-*,
cppcoreguidelines-*,
-bugprone-easily-swappable-parameters,
-bugprone-narrowing-conversions,
-google-readability-namespace-comments,
-google-readability-todo,
-google-runtime-int,
-google-default-arguments
-google-runtime-references,
-misc-non-private-member-variables-in-classes,
-modernize-use-trailing-return-type,
-performance-noexcept-move-constructor,
-readability-function-cognitive-complexity,
-readability-inconsistent-declaration-parameter-name,
-readability-magic-numbers,
-readability-named-parameter,
-readability-redundant-string-cstr
-readability-uppercase-literal-suffix,
# Turn all the warnings from the checks above into errors.
#WarningsAsErrors: "*"
UseColor: false
CheckOptions:
- { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }
- { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ }
- { key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE }
-1
View File
@@ -1 +0,0 @@
build
+1
View File
@@ -0,0 +1 @@
github: [romainthomas]
+12
View File
@@ -0,0 +1,12 @@
---
name: Feature Request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
*Please describe what you would like to have in LIEF*.
**Note: If the feature is not precise or if you want to have feedback first, you can open a [discussion](https://github.com/lief-project/LIEF/discussions).**
-20
View File
@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+33
View File
@@ -0,0 +1,33 @@
---
name: Premium Issue
about: You need a fix for the issue with a high priority
title: ''
labels: Premium
assignees: romainthomas
---
*Premium issues can be used to get a higher priority resolution for users and companies.*
*In return, you need to contribute to the project with an action:*
- Writing a guest blog post here: https://lief-project.github.io/blog/
- Fixing another issue
- Sponsoring the issue
*Premium issues will be highlighted in the changelog and the release blog post with your name/logo*
----------------------------------
**Description**
*Please describe the issue/request that needs to be addressed*
**Context**
*Please provide the version of LIEF, the operating system as well as the binaries associated with the issue
(it can be sent by email as well)*
----------------------------------
**Reach out to `issue@lief.re` to discuss about the timeline/contribution.**
@@ -1,6 +1,6 @@
---
name: Bug report
about: Create a report to help us improve
name: Regular Issue
about: You identified a bug or a problem in LIEF
title: ''
labels: ''
assignees: romainthomas
@@ -14,7 +14,7 @@ A clear and concise description of what the bug is.
Steps to reproduce the behavior:
**Expected behavior**
A clear and concise description of what you expected to happen.
A clear and concise description of what you expected to happen (if applicable)
**Environment (please complete the following information):**
- System and Version : [e.g. Ubuntu 16.04]
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<title>Links for lief</title>
<body>
<h1>Links for lief</h1>
% for path, filename in files:
<a href="/${path}">${filename}</a><br />
% endfor
</body>
</html>
+9
View File
@@ -0,0 +1,9 @@
[lief.s3]
region = "fr-par"
bucket = "lief"
endpoint = "https://s3.fr-par.scw.cloud"
[lief.deploy]
branches = ["master", "deploy", "devel"]
main-branches = ["master", "main"]
default-dir = "latest"
+260 -239
View File
@@ -1,277 +1,298 @@
#!/usr/bin/env python3
import sys
import os
import re
import logging
import pathlib
import subprocess
import shutil
import json
import itertools
from collections import defaultdict
from datetime import datetime
from mako.template import Template
from enum import Enum, auto
import tempfile
import boto3
from botocore.exceptions import ClientError
from mako.template import Template
from pathlib import Path
from typing import Any, Optional
class CI(Enum):
UNKNOWN = auto()
TRAVIS = auto()
APPVEYOR = auto()
GITLAB_CI = auto()
CIRCLE_CI = auto()
GITHUB_ACTIONS = auto()
AZURE = auto()
LOCAL = auto()
def pretty_ci_name(ci):
return str(ci).split(".")[-1].replace("_", "-").lower()
def is_pr(ci):
if ci == CI.TRAVIS:
cond1 = os.getenv("TRAVIS_EVENT_TYPE", "pull_request") == "pull_request"
cond2 = not (os.getenv("TRAVIS_REPO_SLUG", "").startswith("lief-project/") or os.getenv("TRAVIS_REPO_SLUG", "").startswith("romainthomas/LIEF"))
return cond1 or cond2
elif ci == CI.APPVEYOR:
logger.info("%s - %s", os.getenv("APPVEYOR_PULL_REQUEST_NUMBER", -1), os.getenv("APPVEYOR_REPO_NAME", ""))
pr_number = os.getenv("APPVEYOR_PULL_REQUEST_NUMBER", "")
cond1 = len(pr_number) != 0 and int(pr_number) >= 0
cond2 = not (os.getenv("APPVEYOR_REPO_NAME", "").startswith("lief-project/") or os.getenv("APPVEYOR_REPO_NAME", "").startswith("romainthomas/"))
return cond1 or cond2
elif ci == CI.CIRCLE_CI:
cond1 = int(os.getenv("CIRCLE_PR_NUMBER", -1)) >= 0
cond2 = os.getenv("CIRCLE_PROJECT_USERNAME", "") != "lief-project" and os.getenv("CIRCLE_PROJECT_USERNAME", "") != "romainthomas"
return cond1 or cond2
elif ci == CI.GITHUB_ACTIONS:
cond1 = os.getenv("GITHUB_HEAD_REF", "") != ""
cond2 = not (os.getenv("GITHUB_REPOSITORY", "").startswith("lief-project/") or os.getenv("GITHUB_REPOSITORY", "").startswith("romainthomas/LIEF"))
return cond1 or cond2
elif ci == CI.LOCAL:
return False
return True
def get_branch(ci):
if ci == CI.TRAVIS:
return os.getenv("TRAVIS_BRANCH")
elif ci == CI.APPVEYOR:
return os.getenv("APPVEYOR_REPO_BRANCH")
elif ci == CI.CIRCLE_CI:
return os.getenv("CIRCLE_BRANCH")
elif ci == CI.GITHUB_ACTIONS:
return os.getenv("GITHUB_REF").replace("refs/heads/", "")
elif ci == CI.LOCAL:
return os.getenv("CI_BRANCH")
return None
def get_ci_workdir(ci):
if ci == CI.CIRCLE_CI:
return os.getenv("CIRCLE_WORKING_DIRECTORY")
elif ci == CI.TRAVIS:
return os.getenv("TRAVIS_BUILD_DIR")
elif ci == CI.APPVEYOR:
return os.getenv("APPVEYOR_BUILD_FOLDER")
elif ci == CI.GITHUB_ACTIONS:
return os.getenv("GITHUB_WORKSPACE")
elif ci == CI.LOCAL:
return os.getenv("CI_WORKING_DIR")
else:
logger.critical("Unsupported CI to resolve working directory")
sys.exit(1)
def get_tag(ci):
if ci == CI.CIRCLE_CI:
return os.getenv("CIRCLE_TAG", "")
elif ci == CI.TRAVIS:
return os.getenv("TRAVIS_TAG", "")
elif ci == CI.APPVEYOR:
if "APPVEYOR_REPO_TAG_NAME" in os.environ:
return os.getenv("APPVEYOR_REPO_TAG_NAME", "")
return ""
elif ci == CI.GITHUB_ACTIONS:
ref = os.getenv("GITHUB_REF", "")
logger.info("Github Action tag: {}".format(ref))
if ref.startswith("refs/tags/"):
return ref.replace("refs/tags/", "")
return ""
elif ci == CI.LOCAL:
return os.getenv("CI_TAG")
else:
logger.critical("Unsupported CI to resolve working directory")
sys.exit(1)
import argparse
import boto3
import functools
import logging
import os
import sys
import tempfile
import tomli
LOG_LEVEL = logging.INFO
CURRENTDIR = Path(__file__).resolve().parent
REPODIR = CURRENTDIR.parent
ASSET_DIR = CURRENTDIR / "assets"
CONFIG_DIR = CURRENTDIR / "config"
LIEF_S3_KEY = os.getenv("LIEF_S3_KEY", None)
LIEF_S3_SECRET = os.getenv("LIEF_S3_SECRET", None)
OWNED_ORGS = ["lief-project/", "romainthomas/"]
RELEASE_KEYWRD = "release-"
DEFAULT_CONFIG = CONFIG_DIR / "gh-ci.toml"
DEFAULT_TEMPLATE = (ASSET_DIR / "index.j2").read_text()
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
logging.getLogger().setLevel(LOG_LEVEL)
logger = logging.getLogger(__name__)
CURRENT_CI = CI.UNKNOWN
# Detect CI
# ===========================================
if os.getenv("TRAVIS", None) is not None:
CURRENT_CI = CI.TRAVIS
elif os.getenv("APPVEYOR", None) is not None:
CURRENT_CI = CI.APPVEYOR
elif os.getenv("GITHUB_ACTIONS", None) is not None:
CURRENT_CI = CI.GITHUB_ACTIONS
elif os.getenv("GITLAB_CI", None) is not None:
CURRENT_CI = CI.GITLAB_CI
elif os.getenv("CI_LOCAL", "") == "true":
CURRENT_CI = CI.LOCAL
else:
logger.error("Can't detect CI!")
sys.exit(1)
CI_PRETTY_NAME = pretty_ci_name(CURRENT_CI)
logger.info("CI: %s", CI_PRETTY_NAME)
ALLOWED_BRANCHES = {"master", "deploy", "devel"}
BRANCH_NAME = get_branch(CURRENT_CI)
TAG_NAME = get_tag(CURRENT_CI)
IS_TAGGED = TAG_NAME is not None and len(TAG_NAME) > 0
logger.info("Branch: %s", BRANCH_NAME)
logger.info("Tag: %s", TAG_NAME)
if BRANCH_NAME.startswith("release-"):
logger.info("Branch release")
elif BRANCH_NAME not in ALLOWED_BRANCHES and not IS_TAGGED:
logger.info("Skip deployment for branch '%s'", BRANCH_NAME)
sys.exit(0)
if is_pr(CURRENT_CI):
logger.info("Skip pull request")
sys.exit(0)
CURRENTDIR = pathlib.Path(__file__).resolve().parent
REPODIR = CURRENTDIR.parent
# According to Scaleway S3 documentation, the endpoint
# should starts with '<bucket>'.s3.<region>.scw.cloud
# Nevertheless boto3 uses /{Bucket} endpoints suffix
# which create issues (see: https://stackoverflow.com/a/70383653)
LIEF_S3_REGION = "fr-par"
LIEF_S3_ENDPOINT = "https://s3.{region}.scw.cloud".format(region=LIEF_S3_REGION)
LIEF_S3_BUCKET = "lief"
LIEF_S3_KEY = os.getenv("LIEF_S3_KEY", None)
LIEF_S3_SECRET = os.getenv("LIEF_S3_SECRET", None)
if LIEF_S3_KEY is None or len(LIEF_S3_KEY) == 0:
logger.error("LIEF_S3_KEY is not set!")
sys.exit(1)
if LIEF_S3_SECRET is None or len(LIEF_S3_SECRET) == 0:
logger.error("LIEF_S3_SECRET is not set!")
sys.exit(1)
CI_CWD = pathlib.Path(get_ci_workdir(CURRENT_CI))
class S3Manager:
def __init__(self, dirname: str, bucket: str,
region: str, endpoint: str,
dry_run: bool = False):
self._s3_dirname: str = dirname
self._s3_bucket: str = bucket
self._s3_region: str = region
self._s3_endpoint: str = endpoint
self._dry_run: bool = dry_run
if CI_CWD is None:
logger.error("Can't resolve CI working dir")
sys.exit(1)
logger.info("[S3] Bucket : %s", self._s3_bucket)
logger.info("[S3] Region : %s", self._s3_region)
logger.info("[S3] Endpoint: %s", self._s3_endpoint)
logger.info("[S3] Dir : %s", self._s3_dirname)
DIST_DIR = REPODIR / "dist"
BUILD_DIR = REPODIR / "build"
def change_dir(self, dirname: str):
self._s3_dirname = dirname
logger.info("Working directory: %s", CI_CWD)
@property
def s3_lief_sdk(self) -> str:
return f"{self._s3_dirname}/sdk"
INDEX_TEMPLATE = r"""
<!DOCTYPE html>
<html>
<title>Links for lief</title>
<body>
<h1>Links for lief</h1>
% for path, filename in files:
<a href="/${path}">${filename}</a><br />
% endfor
</body>
</html>
"""
@property
def s3_lief_wheel(self) -> str:
return f"{self._s3_dirname}/lief"
SKIP_LIST = ["index.html"]
@property
def url(self):
return f"https://{self._s3_bucket}.s3-website.{self._s3_region}.scw.cloud/{self._s3_dirname}"
s3 = boto3.resource(
's3',
region_name=LIEF_S3_REGION,
use_ssl=True,
endpoint_url=LIEF_S3_ENDPOINT,
aws_access_key_id=LIEF_S3_KEY,
aws_secret_access_key=LIEF_S3_SECRET
)
@functools.lru_cache(maxsize=1)
def s3(self) -> boto3.Session:
s3_res = boto3.resource(
's3',
region_name=self._s3_region,
use_ssl=True,
endpoint_url=self._s3_endpoint,
aws_access_key_id=LIEF_S3_KEY,
aws_secret_access_key=LIEF_S3_SECRET
)
return s3_res
@classmethod
def from_config(cls, config):
pass
def _s3_push(self, file: Path, dst: str):
logger.info("Uploading %s to %s", file, dst)
try:
obj = self.s3().Object(self._s3_bucket, dst)
if not self._dry_run:
obj.put(Body=file.read_bytes())
else:
logger.info("[--] put: %s/%s - %s", self._s3_bucket, dst, file.as_posix())
return 0
except ClientError as e:
logger.error("S3 push failed: %s", e)
return 1
def push_wheel(self, file: str):
wheel_file = Path(file)
if not wheel_file.is_file():
logger.error("'%s' is not a valid file!", wheel_file)
return
dst = f"{self.s3_lief_wheel}/{wheel_file.name}"
self._s3_push(wheel_file, dst)
def push_sdk(self, file: str):
sdk_path = Path(file)
if not sdk_path.is_file():
logger.error("'%s' is not a valid file!", sdk_path)
return
dst = f"{self.s3_lief_sdk}/{sdk_path.name}"
self._s3_push(sdk_path, dst)
def push_content(self, content: str, dst: str):
with tempfile.TemporaryDirectory() as tmp:
tmp_path = Path(tmp)
index = tmp_path / "index.html"
index.write_text(content)
self._s3_push(index, dst)
def process_sdk_wheels(self, directory: Path, maxdepth: int = 0,
depth: int = 0, recurse: bool = True):
logger.info("Processing directory: %s", directory)
for item in directory.iterdir():
if item.is_dir() and recurse:
if 0 < maxdepth < depth:
logger.debug("Maximum iteration depth reached")
else:
self.process_sdk_wheels(item, maxdepth, depth + 1, recurse)
elif item.is_file():
extension = item.suffix
if extension in (".zip", ".gz"):
logger.info("[SDK ] Uploading '%s'", item.as_posix())
self.push_sdk(item.as_posix())
elif extension in (".whl", ):
logger.info("[WHEEL] Uploading '%s'", item.as_posix())
self.push_wheel(item.as_posix())
def push_wheel(file: str, dir_name: str):
wheel_file = pathlib.Path(file)
dst = f"{dir_name}/lief/{wheel_file.name}"
logger.info("Uploading %s to %s", file, dst)
try:
obj = s3.Object(LIEF_S3_BUCKET, dst)
obj.put(Body=wheel_file.read_bytes())
return 0
except ClientError as e:
logger.error("S3 push failed: %s", e)
return 1
def upload_wheels_sdk(self, src_dir: Path, maxdepth: int):
logger.info("Looking for wheels and sdk from: %s", src_dir)
self.process_sdk_wheels(src_dir, maxdepth=maxdepth, recurse=True)
wheels_index = self.generate_index(self.s3_lief_wheel,
DEFAULT_TEMPLATE,
skiplist=("index.html", ))
sdk_index = self.generate_index(self.s3_lief_sdk, DEFAULT_TEMPLATE,
skiplist=("index.html", ))
self.push_content(wheels_index, f"{self.s3_lief_wheel}/index.html")
self.push_content(sdk_index, f"{self.s3_lief_sdk}/index.html")
logger.info("Done!")
logger.info("URL: %s/%s", self.url, "sdk")
logger.info("URL: %s/%s", self.url, "lief")
def s3_list(self, dirname: str) -> list[Any]:
if self._dry_run:
return []
return self.s3().Bucket(self._s3_bucket).objects.filter(Prefix=dirname)
def generate_index(self, dirname: str, template: str, skiplist=None):
files = self.s3_list(dirname)
selected_files = []
for s3_object in files:
filename = Path(s3_object.key).name
if skiplist is not None and filename in skiplist:
continue
selected_files.append((s3_object.key, filename))
return Template(template).render(files=selected_files)
class GithubDeploy:
def __init__(self, branches: list[str],
main_branches: list[str],
default_dir: str,
s3_manager: S3Manager):
self.s3_manager: S3Manager = s3_manager
self._branches: list[str] = branches
self._main_branches: list[str] = main_branches
self._default_dir: str = default_dir
def push_sdk(file: str, dir_name: str):
sdk_file = pathlib.Path(file)
dst = f"{dir_name}/sdk/{sdk_file.name}"
logger.info("Uploading %s to %s", file, dst)
try:
obj = s3.Object(LIEF_S3_BUCKET, dst)
obj.put(Body=sdk_file.read_bytes())
return 0
except ClientError as e:
logger.error("S3 push failed: %s", e)
return 1
@classmethod
def from_config(cls, config_file: Path):
with open(config_file, "rb") as f:
toml_config = tomli.load(f)
def filename(object):
return pathlib.Path(object.key).name
if "lief" not in toml_config:
logger.warning("Missing lief entries in '%s'", config_file)
return None
lief_conf = toml_config["lief"]
def generate_sdk_index(dir_name: str):
files = s3.Bucket(LIEF_S3_BUCKET).objects.filter(Prefix=f'{dir_name}/sdk')
tmpl_info = [(object.key, filename(object)) for object in files if filename(object) not in SKIP_LIST]
html = Template(INDEX_TEMPLATE).render(files=tmpl_info)
return html
if "s3" not in lief_conf:
logger.warning("Missing lief.s3 entries in '%s'", config_file)
return None
def generate_pypi_index(dir_name: str):
files = s3.Bucket(LIEF_S3_BUCKET).objects.filter(Prefix=f'{dir_name}/lief')
tmpl_info = [(object.key, filename(object)) for object in files if filename(object) not in SKIP_LIST]
html = Template(INDEX_TEMPLATE).render(files=tmpl_info)
return html
if "deploy" not in lief_conf:
logger.warning("Missing lief.deploy entries in '%s'", config_file)
return None
dir_name = "latest"
branches = lief_conf["deploy"]["branches"]
main_branches = lief_conf["deploy"]["main-branches"]
default_dir = lief_conf["deploy"]["default-dir"]
s3_config = lief_conf["s3"]
s3_region = s3_config["region"]
s3_bucket = s3_config["bucket"]
s3_endpoint = s3_config["endpoint"]
if BRANCH_NAME != "master":
dir_name = "{}".format(BRANCH_NAME.replace("/", "-").replace("_", "-"))
s3_manager = S3Manager(default_dir, s3_bucket, s3_region, s3_endpoint)
return cls(branches, main_branches, default_dir, s3_manager)
if IS_TAGGED:
dir_name = str(TAG_NAME)
@staticmethod
def branch() -> Optional[str]:
ref = os.getenv("GITHUB_REF")
if ref is None:
return None
return ref.replace("refs/heads/", "")
for file in DIST_DIR.glob("*.whl"):
logger.info("[WHEEL] Uploading '%s'", file.as_posix())
push_wheel(file.as_posix(), dir_name)
@staticmethod
def is_pr() -> bool:
head_ref = os.getenv("GITHUB_HEAD_REF", "")
repo_path = os.getenv("GITHUB_REPOSITORY", "")
is_owned_repo = any(repo_path.startswith(org) for org in OWNED_ORGS)
return head_ref != "" or not is_owned_repo
for file in itertools.chain(BUILD_DIR.glob("*.zip"), BUILD_DIR.glob("*.tar.gz")):
logger.info("[SDK ] Uploading '%s'", file.as_posix())
push_sdk(file.as_posix(), dir_name)
@staticmethod
def is_tagged() -> bool:
tag = GithubDeploy.tag_name()
return tag is not None and len(tag) > 0
sdk_index = generate_sdk_index(dir_name)
with tempfile.TemporaryDirectory() as tmp:
tmp = pathlib.Path(tmp)
index = (tmp / "index.html")
index.write_text(sdk_index)
push_sdk(index.as_posix(), dir_name)
@staticmethod
def tag_name() -> Optional[str]:
ref = os.getenv("GITHUB_REF", "")
logger.info("Github Action tag: %s", ref)
if ref.startswith("refs/tags/"):
return ref.replace("refs/tags/", "")
return ""
pypi_index = generate_pypi_index(dir_name)
with tempfile.TemporaryDirectory() as tmp:
tmp = pathlib.Path(tmp)
index = (tmp / "index.html")
index.write_text(pypi_index)
push_wheel(index.as_posix(), dir_name)
@staticmethod
def workspace() -> str:
return os.getenv("GITHUB_WORKSPACE", "")
logger.info("Done!")
def is_main_branch(self, name: str) -> bool:
return name in self._main_branches
def deploy(self, directories: list[str]):
s3dir = None
if GithubDeploy.is_tagged():
s3dir = GithubDeploy.tag_name()
else:
branch = GithubDeploy.branch()
if branch is None:
logger.warning("Can't resolve the branch name")
sys.exit(1)
if branch.startswith(RELEASE_KEYWRD):
_, s3dir = branch.split(RELEASE_KEYWRD)
elif self.is_main_branch(branch):
s3dir = self._default_dir
else:
s3dir = branch.replace("/", "-").replace("_", "-")
if s3dir is None:
logger.error("Target directory is not set")
sys.exit(1)
logger.info("s3dir: %s", s3dir)
self.s3_manager.change_dir(s3dir)
for dirname in directories:
dirpath = Path(dirname).resolve().absolute().expanduser()
self.s3_manager.upload_wheels_sdk(dirpath, maxdepth=1)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--config", "-c")
parser.add_argument("--dry-run", "-n", action="store_true", default=False)
parser.add_argument("directories", nargs="+")
args = parser.parse_args()
config_path = None
if args.config is not None:
config_path = Path(args.config)
else:
config_path = DEFAULT_CONFIG
if not config_path.is_file():
logger.error("'%s' is not a valid config path")
sys.exit(1)
gh_deploy = GithubDeploy.from_config(config_path)
gh_deploy.deploy(args.directories)
if __name__ == "__main__":
main()
sys.exit(0)
+46 -36
View File
@@ -1,69 +1,79 @@
name: 'Android'
on: push
on: workflow_dispatch
jobs:
build-and-deploy:
build-sdk:
runs-on: ubuntu-latest
strategy:
matrix:
arch: ['arm', 'arm64']
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v1.1.0
uses: actions/cache@v3
with:
path: ~/.ccache
key: android-${{ runner.os }}-${{ steps.get-date.outputs.date }}
key: android-${{ runner.os }}-${{ matrix.arch }}-${{ steps.get-date.outputs.date }}
restore-keys: |
android-${{ runner.os }}-
- name: Build ARM SDK
android-${{ runner.os }}-${{ matrix.arch }}
- name: Build SDK [${{ matrix.arch }}]
shell: bash
env:
ARCH: ${{ matrix.arch }}
run: |
docker run \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
docker run \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/work \
-v $HOME/.ccache:/ccache \
--rm liefproject/android-arm bash /work/scripts/docker/android-arm.sh
- name: Build AArch64 SDK
shell: bash
run: |
docker run \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/work \
-v $HOME/.ccache:/ccache \
--rm liefproject/android-arm64 bash /work/scripts/docker/android-aarch64.sh
-v $HOME/.ccache:/ccache \
--rm liefproject/android-${ARCH} bash /work/scripts/docker/android-${ARCH}.sh
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: android-sdk
name: android-sdk-${{ matrix.arch }}
path: build/*.tar.gz
retention-days: 3
deploy:
if: ${{ always() }}
runs-on: ubuntu-latest
needs: build-sdk
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Display artifacts
run: ls -R
working-directory: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
docker run \
-v $GITHUB_WORKSPACE:/src \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
--rm \
liefproject/deploy python3 /src/.github/deploy.py
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
+31
View File
@@ -0,0 +1,31 @@
name: code-check
on:
workflow_dispatch:
inputs:
branch:
description: 'LIEF branch'
default: 'master'
required: false
type: string
push:
branches:
- test/code-check
jobs:
coverage:
runs-on: ubuntu-latest
container:
image: liefproject/code-check
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
GH_BRANCH: ${{ inputs.branch }}
steps:
- uses: actions/checkout@v3
with:
repository: lief-project/code-check
token: ${{ secrets.LIEF_CLONE_TOKEN }}
- name: Print info
run: |
echo ${GH_BRANCH}
- name: Running LIEF coverage
run: ./lief-coverage --debug
+39 -13
View File
@@ -1,17 +1,20 @@
name: 'iOS'
on: push
on: workflow_dispatch
env:
python-version: '3.10'
jobs:
osx-sdk:
ios-sdk:
runs-on: macos-11.0
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python 3.9
uses: actions/setup-python@v2
- name: Set up Python ${{ env.python-version }}
uses: actions/setup-python@v3
with:
python-version: 3.9
python-version: ${{ env.python-version }}
- name: Install system dependencies
run: |
brew install cmake ninja ccache
@@ -19,23 +22,23 @@ jobs:
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup cache dir
shell: bash
run: |
mkdir -p ~/.ccache
- name: ccache cache files
uses: actions/cache@v1.1.0
uses: actions/cache@v3
with:
path: ~/.ccache
path: ${{ runner.temp }}/.ccache
key: ios-${{ runner.os }}-${{ steps.get-date.outputs.date }}
restore-keys: |
ios-${{ runner.os }}-
ios-${{ runner.os }}
- name: Build iOS SDK
shell: bash
env:
CCACHE_DIR: ~/.ccache
CCACHE_DIR: ${{ runner.temp }}/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
@@ -47,14 +50,37 @@ jobs:
name: ios-sdk
path: build/*.tar.gz
retention-days: 3
deploy:
runs-on: ubuntu-latest
if: ${{ always() }}
needs: ios-sdk
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Display artifacts
run: ls -R
working-directory: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
python -m pip install --upgrade requests mako boto3
python .github/deploy.py
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
+92 -47
View File
@@ -1,84 +1,129 @@
name: 'Linux AArch64'
on: push
on: workflow_dispatch
jobs:
linux-sdk:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v1.1.0
uses: actions/cache@v3
with:
path: ~/.ccache
key: linux-aarch64-${{ runner.os }}-${{ steps.get-date.outputs.date }}
key: linux-aarch64-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
restore-keys: |
linux-aarch64-${{ runner.os }}-
linux-aarch64-${{ runner.os }}-sdk
- name: Build SDK
if: matrix.python-version == '3.9'
shell: bash
run: |
docker run \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/work \
-v $HOME/.ccache:/ccache \
--rm liefproject/manylinux2014-aarch64 bash /work/scripts/docker/linux-aarch64.sh
- name: Build Python ${{ matrix.python-version }} wheel
shell: bash
env:
PYTHON_VERSION: ${{ matrix.python-version }}
run: |
PYTHON_VERSION2=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
docker run \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION2}-cp${PYTHON_VERSION2}/bin/python${PYTHON_VERSION} \
-v $GITHUB_WORKSPACE:/work \
-v $HOME/.ccache:/ccache \
--rm liefproject/manylinux2014-aarch64 bash /work/scripts/docker/manylinux2014-aarch64.sh
mkdir -p $RUNNER_TEMP/lief-install
docker run --name lief_sdk --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/work \
-v $RUNNER_TEMP/lief-install:/install \
-v $HOME/.ccache:/ccache \
liefproject/manylinux2014-aarch64 bash /work/scripts/docker/linux-aarch64.sh
- name: 'Upload SDK Artifact'
if: matrix.python-version == '3.9'
uses: actions/upload-artifact@v3
with:
name: linux-aarch64-sdk
path: build/*.tar.gz
retention-days: 3
- name: 'Upload Python Wheel Artifact - ${{ matrix.python-version }}'
- name: 'Upload Install Artifact'
uses: actions/upload-artifact@v3
with:
name: linux-aarch64-wheel-${{ matrix.python-version }}
name: linux-aarch64-install
path: ${{ runner.temp }}/lief-install
retention-days: 1
wheels:
runs-on: ubuntu-latest
needs: linux-sdk
strategy:
matrix:
python-version: [3.8, 3.9, '3.10', '3.11']
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v3
with:
path: ~/.ccache
key: linux-aarch64-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
restore-keys: |
linux-aarch64-${{ runner.os }}-${{ matrix.python-version }}
- name: Download LIEF install dir
uses: actions/download-artifact@v3
with:
name: linux-aarch64-install
path: ${{ runner.temp }}/lief-install
- name: Python ${{ matrix.python-version }} -- Wheel
shell: bash
env:
PYTHON_VERSION: ${{ matrix.python-version }}
run: |
PYTHON_VERSION_ALT=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION_ALT \
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION_ALT}-cp${PYTHON_VERSION_ALT}/bin/python${PYTHON_VERSION} \
-v $GITHUB_WORKSPACE:/work \
-v $HOME/.ccache:/ccache \
-v $RUNNER_TEMP/lief-install:/install \
liefproject/manylinux2014-aarch64 bash /work/scripts/docker/manylinux2014-aarch64.sh
- name: 'Artifact'
uses: actions/upload-artifact@v3
with:
name: linux-aarch64-python${{ matrix.python-version }}-wheel
path: dist/*.whl
retention-days: 3
deploy:
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [linux-sdk, wheels]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Display artifacts
run: ls -R
working-directory: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
docker run \
-v $GITHUB_WORKSPACE:/src \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
--rm \
liefproject/deploy python3 /src/.github/deploy.py
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
+139 -114
View File
@@ -1,152 +1,177 @@
name: 'Linux x86-64'
on: push
on: workflow_dispatch
jobs:
linux-sdk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v1.1.0
uses: actions/cache@v3
with:
path: ~/.ccache
key: linux-x86-64-${{ runner.os }}-${{ steps.get-date.outputs.date }}
key: linux-x86-64-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
restore-keys: |
linux-x86-64-${{ runner.os }}-
- name: Build Python 3.6 wheel
shell: bash
if: startsWith(github.ref, 'refs/tags/')
env:
PYTHON_VERSION: 36
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp36-cp36m/bin/python3.6 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux.sh
- name: Build Python 3.7 wheel
shell: bash
env:
PYTHON_VERSION: 37
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp37-cp37m/bin/python3.7 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux_test.sh
- name: Build Python 3.8 wheel
shell: bash
env:
PYTHON_VERSION: 38
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp38-cp38/bin/python3.8 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux.sh
- name: Build Python 3.9 wheel
shell: bash
env:
PYTHON_VERSION: 39
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp39-cp39/bin/python3.9 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux.sh
- name: Build Python 3.10 wheel
shell: bash
env:
PYTHON_VERSION: 310
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp310-cp310/bin/python3.10 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux.sh
linux-x86-64-${{ runner.os }}-sdk
- name: Build SDK
shell: bash
run: |
docker run --name lief_sdk --rm \
-e PYTHON_BINARY=/opt/python/cp39-cp39/bin/python3.9 \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_24_x86_64 bash /src/scripts/docker/run_linux_sdk.sh
mkdir -p $RUNNER_TEMP/lief-install
docker run --name lief_sdk --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_DIR=/ccache \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP/lief-install:/install \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_sdk.sh
- name: 'Upload SDK Artifact'
uses: actions/upload-artifact@v3
with:
name: linux-x86-64-sdk
path: build/*.tar.gz
retention-days: 3
- name: 'Upload SDK Artifact'
- name: 'Upload Install Artifact'
uses: actions/upload-artifact@v3
with:
name: linux-x86-64-python-wheel
name: linux-x86-64-install
path: ${{ runner.temp }}/lief-install
retention-days: 1
testing:
if: "!contains(github.event.commits[0].message, '[skip-test]')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v3
with:
path: ~/.ccache
key: linux-x86-64-${{ runner.os }}-test-${{ steps.get-date.outputs.date }}
restore-keys: |
linux-x86-64-${{ runner.os }}-test
- name: Python 3.8 -- Wheel & Test
shell: bash
env:
PYTHON_VERSION: 38
run: |
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp38-cp38/bin/python3.8 \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_test.sh
pywheels:
runs-on: ubuntu-latest
needs: linux-sdk
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: ccache cache files
uses: actions/cache@v3
with:
path: ~/.ccache
key: linux-x86-64-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
restore-keys: |
linux-x86-64-${{ runner.os }}-${{ matrix.python-version }}
- name: Download LIEF install dir
uses: actions/download-artifact@v3
with:
name: linux-x86-64-install
path: ${{ runner.temp }}/lief-install
- name: Python ${{ matrix.python-version }} -- Wheel
shell: bash
env:
PYTHON_VERSION: ${{ matrix.python-version }}
run: |
PYTHON_VERSION_ALT=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
docker run --rm \
-e CCACHE_COMPRESS=1 \
-e CCACHE_MAXSIZE=10.0G \
-e CCACHE_CPP2=1 \
-e CCACHE_DIR=/ccache \
-e PYTHON_VERSION=$PYTHON_VERSION_ALT \
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION_ALT}-cp${PYTHON_VERSION_ALT}/bin/python${PYTHON_VERSION} \
-v $GITHUB_WORKSPACE:/src \
-v $HOME/.ccache:/ccache \
-v $RUNNER_TEMP/lief-install:/install \
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux.sh
- name: 'Artifact'
uses: actions/upload-artifact@v3
with:
name: linux-x86-64-python${{ matrix.python-version }}-wheel
path: dist/*.whl
retention-days: 3
deploy:
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [linux-sdk, pywheels]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Display artifacts
run: ls -R
working-directory: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
docker run \
-v $GITHUB_WORKSPACE:/src \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
--rm \
liefproject/deploy python3 /src/.github/deploy.py
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
documentation:
needs: [deploy]
runs-on: ubuntu-latest
container:
image: liefproject/manylinux_2_28_x86_64
env:
CIRCLE_CI_URL: "https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline"
CIRCLE_CI_TOKEN: ${{ secrets.CIRCLE_CI_TOKEN }}
steps:
- name: Trigger documentation
if: github.ref == 'refs/heads/master'
env:
CIRCLE_CI_TOKEN: ${{ secrets.CIRCLE_CI_TOKEN }}
shell: bash
run: |
docker run --rm \
-e CIRCLE_CI_TOKEN=$CIRCLE_CI_TOKEN \
liefproject/manylinux_2_24_x86_64 \
bash -c "curl --request POST --url https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline --header 'Circle-Token: ${CIRCLE_CI_TOKEN}' --header 'content-type: application/json'";
curl --request POST --url ${CIRCLE_CI_URL} \
--header "Circle-Token: ${CIRCLE_CI_TOKEN}" \
--header 'content-type: application/json' \
--data '{"parameters":{"lief-branch":"master"}}'
+169 -49
View File
@@ -1,18 +1,136 @@
name: 'macOS'
on: push
on: workflow_dispatch
env:
python-test-version: '3.10'
jobs:
osx-sdk:
runs-on: macos-11.0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install system dependencies
run: |
brew install cmake ninja ccache
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup cache dir
shell: bash
run: |
mkdir -p $RUNNER_TEMP/.ccache
- name: ccache cache files
uses: actions/cache@v3
with:
path: ${{ runner.temp }}/.ccache
key: osx-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
restore-keys: |
osx-${{ runner.os }}-sdk
- name: Build SDK
shell: bash
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
CCACHE_DIR: ${{ runner.temp }}/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
run: |
bash scripts/osx/package_sdk.sh
- name: 'Upload SDK Artifact'
uses: actions/upload-artifact@v3
with:
name: osx-sdk
path: build/*.tar.gz
retention-days: 3
- name: 'Upload install artifact [arm64]'
uses: actions/upload-artifact@v3
with:
name: osx-arm64-install
path: install/arm64
retention-days: 1
- name: 'Upload install artifact [x64]'
uses: actions/upload-artifact@v3
with:
name: osx-x64-install
path: install/x64
retention-days: 1
osx-testing:
runs-on: macos-11.0
if: "!contains(github.event.commits[0].message, '[skip-test]')"
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ env.python-test-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-test-version }}
- name: Install system dependencies
run: |
brew install cmake ninja ccache
python -m pip install --upgrade pip setuptools wheel
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup cache dir
shell: bash
run: |
mkdir -p $RUNNER_TEMP/.ccache
- name: ccache cache files
uses: actions/cache@v3
with:
path: ${{ runner.temp }}/.ccache
key: osx-${{ runner.os }}-test-${{ steps.get-date.outputs.date }}
restore-keys: |
osx-${{ runner.os }}-test
- name: Upgrade pip
shell: bash
run: |
python -m pip install --upgrade pip setuptools
- name: Build Python 3.10 with tests
shell: bash
env:
LIEF_SAMPLES_DIR: "/tmp/samples"
BUILD_DIR: "/tmp/lief-build"
MACOSX_TARGET: "11.7"
MACOSX_DEPLOYMENT_TARGET: "11.0"
CCACHE_DIR: ${{ runner.temp }}/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
run: |
python -m pip install -r tests/requirements.txt
python tests/dl_samples.py ${LIEF_SAMPLES_DIR}
cd api/python
PYLIEF_CONF=${GITHUB_WORKSPACE}/scripts/osx/osx-testing-x64.toml \
python ./setup.py build \
--build-base=${BUILD_DIR}/base \
--build-temp=${BUILD_DIR}/temp \
install --user
cd ${GITHUB_WORKSPACE}
python tests/run_pytest.py
python tests/run_tools_check.py ${BUILD_DIR}/temp
ctest --output-on-failure --test-dir ${BUILD_DIR}/temp
wheels:
runs-on: macos-11.0
needs: osx-sdk
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9, '3.10']
python-version: [3.8, 3.9, '3.10', '3.11']
arch: ['x64', 'arm64']
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
@@ -22,73 +140,75 @@ jobs:
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup cache dir
shell: bash
run: |
mkdir -p ~/.ccache
mkdir -p $RUNNER_TEMP/.ccache
- name: ccache cache files
uses: actions/cache@v1.1.0
uses: actions/cache@v3
with:
path: ~/.ccache
key: osx-${{ runner.os }}-${{ steps.get-date.outputs.date }}
path: ${{ runner.temp }}/.ccache
key: osx-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
restore-keys: |
osx-${{ runner.os }}-
- name: Build Python ${{ matrix.python-version }} wheel and Test
osx-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}
- name: Upgrade pip
shell: bash
run: |
python -m pip install --upgrade pip setuptools
- name: Download LIEF install dir
uses: actions/download-artifact@v3
with:
name: osx-${{ matrix.arch }}-install
path: ~/lief-${{ matrix.arch }}-install
- name: Build Python ${{ matrix.python-version }} [${{ matrix.arch }}]
shell: bash
if: matrix.python-version == '3.6'
env:
MACOSX_DEPLOYMENT_TARGET: "10.14"
CCACHE_DIR: ~/.ccache
MACOSX_DEPLOYMENT_TARGET: "11.0"
CCACHE_DIR: ${{ runner.temp }}/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
PYLIEF_CONF: "${{ github.workspace }}/scripts/osx/py-${{ matrix.arch }}.toml"
run: |
python ./setup.py --ninja --lief-test build bdist_wheel --skip-build --plat-name=macosx_${MACOSX_DEPLOYMENT_TARGET}_x86_64
- name: Build Python ${{ matrix.python-version }} wheel
shell: bash
if: matrix.python-version != '3.6'
env:
MACOSX_DEPLOYMENT_TARGET: "10.14"
CCACHE_DIR: ~/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
run: |
python ./setup.py --ninja build bdist_wheel --skip-build --plat-name=macosx_${MACOSX_DEPLOYMENT_TARGET}_x86_64
- name: Build SDK
shell: bash
if: matrix.python-version == '3.9' # Build the SDk only with Python 3.9
env:
MACOSX_DEPLOYMENT_TARGET: "10.14"
CCACHE_DIR: ~/.ccache
CCACHE_MAXSIZE: 10.0G
CCACHE_CPP2: 1
CCACHE_COMPRESS: 1
run: |
bash scripts/osx/package_sdk.sh
- name: 'Upload SDK Artifact'
if: matrix.python-version == '3.9' # Build the SDk only with Python 3.9
python -m pip -vv wheel --wheel-dir=dist/ api/python
- name: 'Upload Python wheel artifact - ${{ matrix.python-version }}'
uses: actions/upload-artifact@v3
with:
name: osx-sdk
path: build/*.tar.gz
retention-days: 3
- name: 'Upload Python Wheel Artifact - ${{ matrix.python-version }}'
uses: actions/upload-artifact@v3
with:
name: osx-wheel-${{ matrix.python-version }}
name: osx-wheel-${{ matrix.arch }}-${{ matrix.python-version }}
path: dist/*.whl
retention-days: 3
deploy:
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [osx-sdk, wheels]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Display artifacts
run: ls -R
working-directory: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
python -m pip install --upgrade requests mako boto3
python .github/deploy.py
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
+96
View File
@@ -0,0 +1,96 @@
name: LIEF PR
on: [pull_request, workflow_dispatch]
env:
python-osx-version: '3.10'
python-win-version: '3.10'
jobs:
osx:
runs-on: macos-11.0
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-osx-version }}
- name: Install system dependencies
run: |
brew install cmake ninja ccache
python -m pip install --upgrade pip setuptools wheel
- name: Build with Python ${{ env.python-osx-version }} & Test
shell: bash
env:
LIEF_SAMPLES_DIR: "/tmp/samples"
BUILD_DIR: "/tmp/lief-build"
run: |
python -m pip install -r tests/requirements.txt
python tests/dl_samples.py ${LIEF_SAMPLES_DIR}
cd api/python
PYLIEF_CONF=${GITHUB_WORKSPACE}/scripts/osx/osx-testing-x64.toml \
python ./setup.py build \
--build-base=${BUILD_DIR}/base \
--build-temp=${BUILD_DIR}/temp \
install --user
cd ${GITHUB_WORKSPACE}
python tests/run_pytest.py
python tests/run_tools_check.py ${BUILD_DIR}/temp
ctest --output-on-failure --test-dir ${BUILD_DIR}/temp
linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Build & Test
shell: bash
env:
PYTHON_VERSION: 39
run: |
docker run --rm \
-e PYTHON_VERSION=$PYTHON_VERSION \
-e PYTHON_BINARY=/opt/python/cp39-cp39/bin/python3.9 \
-v $GITHUB_WORKSPACE:/src \
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_test.sh
windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ env.python-win-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-win-version }}
architecture: x64
- name: Install system dependencies
run: |
choco install ninja
python -m pip install --upgrade pip setuptools
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Set env variables
run: |
chcp 65001 #set code page to utf-8
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
echo ("BUILD_DIR=" + $env:RUNNER_TEMP + "/lief-build") >> $env:GITHUB_ENV
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-x64-test.toml") >> $env:GITHUB_ENV
- name: Build Python ${{ env.python-win-version }}
run: |
python -m pip install -r tests/requirements.txt
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
cd api/python
python ./setup.py build ^
--build-base=%BUILD_DIR%/base ^
--build-temp=%BUILD_DIR%/temp ^
install --user
shell: cmd
- name: Run tests
run: |
cd %GITHUB_WORKSPACE%
python tests/run_pytest.py
ctest --output-on-failure --test-dir %BUILD_DIR%/temp/Release
shell: cmd
+2 -8
View File
@@ -1,17 +1,11 @@
name: 'sanitize'
on:
push:
tags:
- '**'
schedule:
- cron: '0 0 * * 1'
workflow_dispatch:
on: workflow_dispatch
jobs:
gcc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: compile
+249
View File
@@ -0,0 +1,249 @@
name: LIEF Windows
on: workflow_dispatch
env:
python-test-version: '3.10'
python-version: '3.9'
jobs:
build-sdk:
runs-on: windows-2019
strategy:
matrix:
arch: ['x64', 'x86']
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-version }}
architecture: ${{ matrix.arch }}
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: ${{ vars.SCCACHE_DIR }}
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-sdk-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-${{ matrix.arch }}-sccache-sdk
- name: Start sccache server
run: sccache --start-server
- name: Build SDK
run: |
python ./scripts/windows/package_sdk.py
- name: 'Upload SDK artifact'
uses: actions/upload-artifact@v3
with:
name: windows-${{ matrix.arch }}-sdk
path: build/*.zip
retention-days: 3
- name: 'Upload install artifact'
uses: actions/upload-artifact@v3
with:
name: windows-${{ matrix.arch }}-install
path: ${{ runner.temp }}/lief-install
retention-days: 1
- name: sccache stats
run: sccache --show-stats
- name: stop sccache server
run: sccache --stop-server || true
tests:
runs-on: windows-2019
if: "!contains(github.event.commits[0].message, '[skip-test]')"
strategy:
matrix:
arch: ['x64']
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ env.python-test-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-test-version }}
architecture: ${{ matrix.arch }}
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: ${{ vars.SCCACHE_DIR }}
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-test-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-${{ matrix.arch }}-sccache-test
- name: Start sccache server
run: sccache --start-server
- name: Set arch specific env
if: matrix.arch == 'x64'
run: |
echo "ARCH=x64" >> $env:GITHUB_ENV
- name: Set arch specific env
if: matrix.arch == 'x86'
run: |
echo "ARCH=x86" >> $env:GITHUB_ENV
- name: Set Python config (${{ matrix.arch }})
run: |
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-" + $env:ARCH + "-test.toml") >> $env:GITHUB_ENV
- name: Set env variables
run: |
chcp 65001 #set code page to utf-8
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
echo ("BUILD_DIR=" + $env:RUNNER_TEMP + "/lief-build") >> $env:GITHUB_ENV
- name: Build Python ${{ env.python-test-version }}
run: |
python -m pip install -r tests/requirements.txt
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
cd api/python
python ./setup.py build ^
--build-base=%BUILD_DIR%/base ^
--build-temp=%BUILD_DIR%/temp ^
install --user
shell: cmd
- name: Run tests
run: |
cd %GITHUB_WORKSPACE%
python tests/run_pytest.py
ctest --output-on-failure --test-dir %BUILD_DIR%/temp/Release
shell: cmd
- name: sccache stats
run: sccache --show-stats
- name: stop sccache server
run: sccache --stop-server || true
wheels:
runs-on: windows-2019
needs: build-sdk
strategy:
matrix:
python-version: [3.8, 3.9, '3.10', '3.11', '3.12-dev']
arch: ['x86', 'x64']
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.arch }}
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools wheel
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: ${{ vars.SCCACHE_DIR }}
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-${{ matrix.arch }}-sccache-${{ matrix.python-version }}
- name: Download LIEF install dir
uses: actions/download-artifact@v3
with:
name: windows-${{ matrix.arch }}-install
path: ~/lief-${{ matrix.arch }}-install
- name: Start sccache server
run: sccache --start-server
- name: Upgrade pip
run: |
python -m pip install --upgrade pip
shell: cmd
- name: Set arch specific env
if: matrix.arch == 'x64'
run: |
echo "ARCH=x64" >> $env:GITHUB_ENV
- name: Set arch specific env
if: matrix.arch == 'x86'
run: |
echo "ARCH=x86" >> $env:GITHUB_ENV
- name: Set Python config (${{ matrix.arch }})
run: |
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-" + $env:ARCH + ".toml") >> $env:GITHUB_ENV
- name: Set env variables
run: |
chcp 65001 #set code page to utf-8
- name: Build Python ${{ matrix.python-version }}
run: |
python -m pip -vv wheel --wheel-dir=dist/ api/python
shell: cmd
- name: 'Upload Python artifacts [${{ matrix.python-version }}]'
uses: actions/upload-artifact@v3
with:
name: windows-${{ matrix.arch }}-wheel-${{ matrix.python-version }}
path: dist/*.whl
retention-days: 3
deploy:
if: ${{ always() }}
runs-on: ubuntu-latest
needs: [build-sdk, wheels]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: ${{ runner.temp }}/artifacts
- name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
shell: bash
run: |
docker run --rm \
-v $GITHUB_WORKSPACE:/src \
-v $RUNNER_TEMP:/runner_tmp \
-e GITHUB_ACTIONS="true" \
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
-e GITHUB_REF=$GITHUB_REF \
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
-e LIEF_S3_KEY=$LIEF_S3_KEY \
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
-30
View File
@@ -1,30 +0,0 @@
name: LIEF PR Windows Tests
on: [pull_request]
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
python-version: [3.8]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
run: |
choco install ninja
python -m pip install --upgrade pip setuptools
python -m pip install wheel mako
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Build and Test
run: |
python ./setup.py --ninja --lief-test bdist_wheel
shell: cmd
+70
View File
@@ -0,0 +1,70 @@
name: LIEF Windows Quick
on: workflow_dispatch
env:
python-version: '3.9'
jobs:
quick-test:
runs-on: windows-2019
strategy:
matrix:
arch: [x64, x86]
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python ${{ env.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.python-version }}
architecture: ${{ matrix.python-version }}
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools wheel
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
shell: bash
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: ${{ vars.SCCACHE_DIR }}
key: ${{ runner.os }}-${{ matrix.arch }}-quick-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-${{ matrix.arch }}-quick
- name: Start sccache server
run: sccache --start-server
- name: Set env variables
run: |
chcp 65001 #set code page to utf-8
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
- name: Upgrade pip
run: |
python -m pip install --upgrade pip
shell: cmd
- name: Build Python ${{ env.python-version }}
run: |
python -m pip install -r tests/requirements.txt
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
python -m pip -vv install api/python
shell: cmd
- name: Run tests
run: |
python ./tests/run_pytest.py
shell: cmd
- name: sccache stats
run: sccache --show-stats
- name: sccache server
run: sccache --stop-server || true
-116
View File
@@ -1,116 +0,0 @@
name: LIEF Windows x64
on:
push:
branches:
- 'master'
- 'release-**'
tags:
- '**'
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9, '3.10']
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools
python -m pip install wheel mako
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
shell: bash
- name: Save sccache
uses: actions/cache@v2
continue-on-error: false
with:
path: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
key: ${{ runner.os }}-x64-sccache-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-x64-sccache-
- name: Start sccache server
run: sccache --start-server
- name: ⛓ Build Python ${{ matrix.python-version }} & Test
if: matrix.python-version == 3.6
run: |
python ./setup.py --ninja --lief-test bdist_wheel
shell: cmd
- name: ❱ Build Python ${{ matrix.python-version }}
if: matrix.python-version != 3.6
run: |
python ./setup.py --ninja bdist_wheel
shell: cmd
- name: ❱ Build SDK
if: matrix.python-version == 3.9
run: |
python ./scripts/windows/package_sdk.py
- name: 'Upload SDK Artifact'
if: matrix.python-version == 3.9
uses: actions/upload-artifact@v3
with:
name: windows-x64-sdk
path: build/*.zip
retention-days: 3
- name: 'Upload Python Wheel Artifact - ${{ matrix.python-version }}'
uses: actions/upload-artifact@v3
with:
name: windows-x64-wheel-${{ matrix.python-version }}
path: dist/*.whl
retention-days: 3
- name: 📊 Print sccache stats
run: sccache --show-stats
- name: 🛑 Stop sccache server
run: sccache --stop-server || true
- name: Setup WSL
uses: Vampire/setup-wsl@v1
with:
distribution: Debian
use-cache: 'true'
wsl-shell-user: root
set-as-default: 'true'
wsl-conf: |
[automount]
options = "metadata"
additional-packages:
ca-certificates
curl
locales
python3 python3-pip
git
openssl
ssh
- shell: wsl-bash {0}
name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
GITHUB_ACTIONS: "true"
GITHUB_WORKSPACE: ${{ env.GITHUB_WORKSPACE }}
GITHUB_REF: ${{ env.GITHUB_REF }}
GITHUB_REPOSITORY: ${{ env.GITHUB_REPOSITORY }}
WSLENV: LIEF_S3_KEY:LIEF_S3_SECRET:GITHUB_ACTIONS:GITHUB_WORKSPACE:GITHUB_REF:GITHUB_REPOSITORY
run: |
python3 -m pip install --no-cache-dir --upgrade pip setuptools requests mako wheel boto3
python3 .github/deploy.py
-62
View File
@@ -1,62 +0,0 @@
name: LIEF Windows x64 Quick
on:
push:
branches:
- '**'
- '!master'
- '!release-**'
tags-ignore:
- "**"
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
python-version: [3.9]
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools
python -m pip install wheel mako
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
shell: bash
- name: Save sccache
uses: actions/cache@v2
continue-on-error: false
with:
path: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
key: ${{ runner.os }}-x64-sccache-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-x64-sccache-
- name: Start sccache server
run: sccache --start-server
- name: ⛓ Build Python ${{ matrix.python-version }} & Test
run: |
python ./setup.py --ninja --lief-test bdist_wheel
shell: cmd
- name: 📊 Print sccache stats
run: sccache --show-stats
- name: 🛑 Stop sccache server
run: sccache --stop-server || true
-116
View File
@@ -1,116 +0,0 @@
name: LIEF Windows x86
on:
push:
branches:
- 'master'
- 'release-**'
tags:
- '**'
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9, '3.10']
fail-fast: false
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
architecture: x86
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools
python -m pip install wheel mako
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
shell: bash
- name: Save sccache
uses: actions/cache@v2
continue-on-error: false
with:
path: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
key: ${{ runner.os }}-x86-sccache-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-x86-sccache-
- name: Start sccache server
run: sccache --start-server
- name: ⛓ Build Python ${{ matrix.python-version }} & Test
if: matrix.python-version == 3.6
run: |
python ./setup.py --ninja --lief-test bdist_wheel --plat-name=win32
shell: cmd
- name: ❱ Build Python ${{ matrix.python-version }}
if: matrix.python-version != 3.6
run: |
python ./setup.py --ninja bdist_wheel --plat-name=win32
shell: cmd
- name: ❱ Build SDK
if: matrix.python-version == 3.9
run: |
python ./scripts/windows/package_sdk.py
- name: 'Upload SDK Artifact'
if: matrix.python-version == 3.9
uses: actions/upload-artifact@v3
with:
name: windows-x86-sdk
path: build/*.zip
retention-days: 3
- name: 'Upload Python Wheel Artifact - ${{ matrix.python-version }}'
uses: actions/upload-artifact@v3
with:
name: windows-x86-wheel-${{ matrix.python-version }}
path: dist/*.whl
retention-days: 3
- name: 📊 Print sccache stats
run: sccache --show-stats
- name: 🛑 Stop sccache server
run: sccache --stop-server || true
- name: Setup WSL
uses: Vampire/setup-wsl@v1
with:
distribution: Debian
use-cache: 'true'
wsl-shell-user: root
set-as-default: 'true'
wsl-conf: |
[automount]
options = "metadata"
additional-packages:
ca-certificates
curl
locales
python3 python3-pip
git
openssl
ssh
- shell: wsl-bash {0}
name: Deploy
env:
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
GITHUB_ACTIONS: "true"
GITHUB_WORKSPACE: ${{ env.GITHUB_WORKSPACE }}
GITHUB_REF: ${{ env.GITHUB_REF }}
GITHUB_REPOSITORY: ${{ env.GITHUB_REPOSITORY }}
WSLENV: LIEF_S3_KEY:LIEF_S3_SECRET:GITHUB_ACTIONS:GITHUB_WORKSPACE:GITHUB_REF:GITHUB_REPOSITORY
run: |
python3 -m pip install --no-cache-dir --upgrade pip setuptools requests mako wheel boto3
python3 .github/deploy.py
-62
View File
@@ -1,62 +0,0 @@
name: LIEF Windows x86 Quick
on:
push:
branches:
- '**'
- '!master'
- '!release-**'
tags-ignore:
- "**"
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
python-version: [3.9]
env:
SCCACHE_CACHE_SIZE: 2G
SCCACHE_DIR: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: x86
- name: Install system dependencies
run: |
choco install ninja
choco install sccache
python -m pip install --upgrade pip setuptools
python -m pip install wheel mako
- uses: ilammy/msvc-dev-cmd@v1
with:
toolset: "14.16"
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
shell: bash
- name: Save sccache
uses: actions/cache@v2
continue-on-error: false
with:
path: "C:\\Users\\runner\\AppData\\Local\\Mozilla\\sccache"
key: ${{ runner.os }}-x86-sccache-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-x86-sccache-
- name: Start sccache server
run: sccache --start-server
- name: ⛓ Build Python ${{ matrix.python-version }} & Test
run: |
python ./setup.py --ninja --lief-test bdist_wheel
shell: cmd
- name: 📊 Print sccache stats
run: sccache --show-stats
- name: 🛑 Stop sccache server
run: sccache --stop-server || true
+5
View File
@@ -0,0 +1,5 @@
build/
*.so
*.whl
lief.egg-info/
dist/
+164 -164
View File
@@ -1,19 +1,18 @@
cmake_minimum_required(VERSION 3.5)
cmake_minimum_required(VERSION 3.15)
# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW)
endif()
# Enable https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html
cmake_policy(SET CMP0091 NEW)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
set(IS_WIN_CROSS_COMPILE 0)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_CROSSCOMPILING)
set(IS_WIN_CROSS_COMPILE 1)
endif()
if(WIN32 OR ${IS_WIN_CROSS_COMPILE})
include(ChooseMSVCCRT)
endif()
include(CheckCXXCompilerFlag)
include(CheckCCompilerFlag)
include(ExternalProject)
@@ -28,7 +27,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
include(LIEFGit)
else()
set(LIEF_VERSION_MAJOR "0")
set(LIEF_VERSION_MINOR "13")
set(LIEF_VERSION_MINOR "14")
set(LIEF_VERSION_PATCH "0")
endif()
@@ -39,6 +38,36 @@ project(
VERSION ${LIEF_VERSION_MAJOR}.${LIEF_VERSION_MINOR}.${LIEF_VERSION_PATCH})
message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION}")
# Select the MSVC runtime based on the LIEF_USE_CRT_XXX variable
if(MSVC)
foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
string(TOUPPER "${build_type}" build)
if(DEFINED "LIEF_USE_CRT_${build}")
set(runtime "${LIEF_USE_CRT_${build}}")
if(build_type STREQUAL Debug)
set(default_runtime MDd)
else()
set(default_runtime MD)
endif()
if(runtime AND NOT "${runtime}" STREQUAL "${default_runtime}")
if(runtime STREQUAL "MT")
set(runtime_library "MultiThreaded")
elseif(runtime STREQUAL "MD")
set(runtime_library "MultiThreadedDLL")
elseif(runtime STREQUAL "MTd")
set(runtime_library "MultiThreadedDebug")
elseif(runtime STREQUAL "MDd")
set(runtime_library "MultiThreadedDebugDLL")
else()
message(FATAL_ERROR "Unsupported value LIEF_USE_CRT_${build}=${runtime}")
endif()
message(STATUS "LIEF_CRT_${build}: ${runtime}")
set(CMAKE_MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}$<$<CONFIG:${build_type}>:${runtime_library}>")
endif()
endif()
endforeach()
endif()
# LIEF options
# =============
include(LIEFOptions)
@@ -108,7 +137,6 @@ set(LIBLIEF_SOURCE_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/src/errors.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/hash_stream.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/logging.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/exception.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/iostream.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/utils.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/internal_utils.cpp"
@@ -130,7 +158,6 @@ set(LIEF_INC_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/span.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Abstract.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/exception.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iostream.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iterators.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/LIEF.hpp"
@@ -176,7 +203,10 @@ source_group("Source Files" FILES ${LIBLIEF_SOURCE_FILES})
source_group("Header Files\\visitors" FILES ${LIEF_VISITOR_INCLUDE_FILES})
add_library(LIB_LIEF ${LIBLIEF_SOURCE_FILES} ${LIEF_INCLUDE_FILES})
add_library(LIEF::LIEF ALIAS LIB_LIEF)
if(NOT LIEF_PY_LIEF_EXT)
add_library(LIEF::LIEF ALIAS LIB_LIEF)
endif()
if(NOT LIEF_OPT_MBEDTLS_EXTERNAL)
set_source_files_properties(${mbedtls_src_crypto} PROPERTIES GENERATED TRUE)
@@ -209,9 +239,8 @@ if(WINDOWS AND BUILD_SHARED_LIBS)
target_link_libraries(LIB_LIEF ws2_32)
endif()
if(MSVC OR ${IS_WIN_CROSS_COMPILE})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
if(MSVC)
add_compile_options(/bigobj)
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug AND WINDOWS)
@@ -228,9 +257,6 @@ if(BUILD_SHARED_LIBS OR LIEF_FORCE_API_EXPORTS)
else()
target_compile_definitions(LIB_LIEF PRIVATE -DLIEF_STATIC)
endif()
if(LIEF_SUPPORT_CXX14)
target_compile_features(LIB_LIEF PRIVATE cxx_std_14)
endif()
# Abstract part
include("${CMAKE_CURRENT_SOURCE_DIR}/src/Abstract/CMakeLists.txt")
@@ -266,16 +292,13 @@ endif()
# =====================
target_compile_definitions(LIB_LIEF PRIVATE SPDLOG_DISABLE_DEFAULT_LOGGER
SPDLOG_NO_EXCEPTIONS
SPDLOG_FUNCTION=)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
target_compile_definitions(LIB_LIEF PRIVATE SPDLOG_NO_EXCEPTIONS SPDLOG_NO_THREAD_ID)
target_compile_definitions(LIB_LIEF PRIVATE SPDLOG_NO_THREAD_ID)
endif()
# Frozen Configuration
# ====================
if(LIEF_FROZEN_ENABLED)
endif()
# OAT part
# ========
@@ -333,7 +356,7 @@ list(APPEND LIEF_PUBLIC_INCLUDE_DIR
list(APPEND LIEF_PRIVATE_INCLUDE_DIR "${LIEF_PUBLIC_INCLUDE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/LIEF.pc.in ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/LIEF.pc.in ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
@ONLY)
target_include_directories(LIB_LIEF
@@ -372,29 +395,28 @@ if(LIEF_FROZEN_ENABLED)
endif()
endif()
# =======================================
# Leaf
# Expected
# =======================================
if(LIEF_EXTERNAL_LEAF)
message(STATUS "Using external LEAF version")
if(LIEF_EXTERNAL_LEAF_DIR)
message(STATUS "External LEAF include dir: ${LIEF_EXTERNAL_LEAF_DIR}")
target_include_directories(LIB_LIEF SYSTEM PUBLIC
"$<BUILD_INTERFACE:${LIEF_EXTERNAL_LEAF_DIR}>")
endif()
if(LIEF_EXTERNAL_EXPECTED)
message(STATUS "Using external Expected version")
find_package(tl-expected REQUIRED)
target_link_libraries(LIB_LIEF PUBLIC tl::expected)
else()
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/leaf.hpp
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/expected.hpp
COMMAND
${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
COMMAND
${CMAKE_COMMAND} -E copy_directory ${LEAF_SRC_DIR}/
${CMAKE_COMMAND} -E copy_directory ${EXPECTED_SRC_DIR}/include/tl/
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
DEPENDS lief_leaf)
DEPENDS lief_expected)
target_sources(LIB_LIEF PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/leaf.hpp)
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/expected.hpp)
endif()
# =======================================
# utfcpp
# =======================================
@@ -438,10 +460,12 @@ else()
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/span.hpp)
endif()
target_link_libraries(LIB_LIEF PRIVATE lief_spdlog)
if(ANDROID AND BUILD_SHARED_LIBS AND LIEF_LOGGING)
target_link_libraries(LIB_LIEF PUBLIC log)
endif()
# Flags definition
# ----------------
@@ -449,7 +473,7 @@ target_link_libraries(LIB_LIEF PRIVATE lief_spdlog)
set_target_properties(
LIB_LIEF
PROPERTIES POSITION_INDEPENDENT_CODE ON
CXX_STANDARD 11
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_VISIBILITY_PRESET hidden
C_VISIBILITY_PRESET hidden)
@@ -464,15 +488,6 @@ endif()
target_compile_definitions(LIB_LIEF PUBLIC -D_GLIBCXX_USE_CXX11_ABI=1)
# Enable support for MD2 and MD4 for parsing the Authenticode sigs of older
# executables. Also, some older signed executables use certs with the
# SpcSpAgencyInfo Critical Extension, which mbed TLS doesn't support, so set
# MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION to have it skip this
# extension.
add_definitions(-DMBEDTLS_FS_IO -DMBEDTLS_PEM_PARSE_C -DMBEDTLS_BIGNUM_C
-DMBEDTLS_X509_CRT_PARSE_C -DMBEDTLS_PEM_WRITE_C
-DMBEDTLS_PKCS1_V15 -DMBEDTLS_PKCS1_V21)
# LIEF Sanitizer options
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set(SANITIZER_FLAGS -fno-omit-frame-pointer -g -O1)
@@ -541,36 +556,16 @@ if(LIEF_FUZZING)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/fuzzing")
endif()
# Compile Flags
# =============
include(LIEFCompilerFlags)
# Profiling flags
# ---------------
if(LIEF_PROFILING)
set(PROFILING_FLAGS
-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc
-fno-builtin-free -fno-omit-frame-pointer -g)
target_compile_options(LIB_LIEF PUBLIC ${PROFILING_FLAGS})
add_executable(elf_profiler profiling/elf_profiler.cpp)
target_compile_options(elf_profiler PUBLIC ${PROFILING_FLAGS})
target_link_libraries(elf_profiler PRIVATE LIB_LIEF)
add_executable(macho_profiler profiling/macho_profiler.cpp)
target_compile_options(macho_profiler PUBLIC ${PROFILING_FLAGS})
target_link_libraries(macho_profiler PRIVATE LIB_LIEF)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/profiling")
endif()
# Coverage flags
# --------------
if(LIEF_COVERAGE)
target_compile_options(LIB_LIEF PRIVATE -g -O0 --coverage -fprofile-arcs
-ftest-coverage)
target_link_libraries(LIB_LIEF gcov)
endif()
set_target_properties(LIB_LIEF PROPERTIES OUTPUT_NAME LIEF EXPORT_NAME LIEF CLEAN_DIRECT_OUTPUT 1)
set_target_properties(LIB_LIEF PROPERTIES
OUTPUT_NAME LIEF
EXPORT_NAME LIEF
CLEAN_DIRECT_OUTPUT 1)
# Set a default build type if none was specified
@@ -615,18 +610,6 @@ if(LIEF_DOC)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/doc)
endif()
# Find Package Config
# ======================
configure_file(
LIEFConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
@ONLY)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
# Post-build operations
# ======================
if(BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
@@ -649,84 +632,101 @@ if(BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
endif()
endif()
# Install Prefix
# ======================
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND UNIX)
if(UNIX AND NOT APPLE)
set(CMAKE_INSTALL_PREFIX
"/usr"
CACHE PATH "Install path prefix prepended on to install directories."
FORCE)
elseif(APPLE)
set(CMAKE_INSTALL_PREFIX
"/usr/local"
CACHE PATH "" FORCE)
endif()
endif()
# Generate install target and package
# =======================================
if(LIEF_INSTALL)
# Installation
# ======================
# Find Package Config
# ======================
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LIEFConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
@ONLY)
if(UNIX)
include(GNUInstallDirs)
set(CMAKE_INSTALL_LIBDIR "lib")
else()
if(WIN32)
set(CMAKE_INSTALL_LIBDIR "lib")
set(CMAKE_INSTALL_DATADIR "share")
set(CMAKE_INSTALL_INCLUDEDIR "include")
set(CMAKE_INSTALL_BINDIR "bin")
set(CMAKE_INSTALL_DATAROOTDIR "share")
message(STATUS "Setting installation destination on Windows to: ${CMAKE_INSTALL_PREFIX}")
else()
message(FATAL_ERROR "System not UNIX nor WIN32 - not implemented yet")
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
# Install Prefix
# ======================
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND UNIX)
if(UNIX AND NOT APPLE)
set(CMAKE_INSTALL_PREFIX
"/usr"
CACHE PATH "Install path prefix prepended on to install directories."
FORCE)
elseif(APPLE)
set(CMAKE_INSTALL_PREFIX
"/usr/local"
CACHE PATH "" FORCE)
endif()
endif()
# Installation
# ======================
if(UNIX)
include(GNUInstallDirs)
set(CMAKE_INSTALL_LIBDIR "lib")
else()
if(WIN32)
set(CMAKE_INSTALL_LIBDIR "lib")
set(CMAKE_INSTALL_DATADIR "share")
set(CMAKE_INSTALL_INCLUDEDIR "include")
set(CMAKE_INSTALL_BINDIR "bin")
set(CMAKE_INSTALL_DATAROOTDIR "share")
message(STATUS "Setting installation destination on Windows to: ${CMAKE_INSTALL_PREFIX}")
else()
message(FATAL_ERROR "System not UNIX nor WIN32 - not implemented yet")
endif()
endif()
install(
TARGETS LIB_LIEF lief_spdlog
EXPORT LIEFExport
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(
DIRECTORY ${LIEF_PUBLIC_INCLUDE_DIR}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT headers
FILES_MATCHING
REGEX "(.*).(hpp|h|def|inc)$")
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
COMPONENT config)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
COMPONENT libraries)
if(BUILD_SHARED_LIBS)
set(lib_type shared)
else()
set(lib_type static)
endif()
install(
EXPORT LIEFExport
NAMESPACE LIEF::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
FILE LIEFExport-${lib_type}.cmake
COMPONENT config)
export(
EXPORT LIEFExport
NAMESPACE LIEF::
FILE LIEFExport-${lib_type}.cmake)
# Package
# ======================
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/package")
endif()
install(
TARGETS LIB_LIEF lief_spdlog
EXPORT LIEFExport
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(
DIRECTORY ${LIEF_PUBLIC_INCLUDE_DIR}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT headers
FILES_MATCHING
REGEX "(.*).(hpp|h|def|inc)$")
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
COMPONENT config)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
COMPONENT libraries)
if(BUILD_SHARED_LIBS)
set(lib_type shared)
else()
set(lib_type static)
endif()
install(
EXPORT LIEFExport
NAMESPACE LIEF::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
FILE LIEFExport-${lib_type}.cmake
COMPONENT config)
export(
EXPORT LIEFExport
NAMESPACE LIEF::
FILE LIEFExport-${lib_type}.cmake)
# Package
# ======================
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/package")
-21
View File
@@ -1,21 +0,0 @@
# Docker file used to compile LIEF on Linux x86-64 compliant with Python tag: manylinux1
# docker build -t liefproject/manylinux1_x86_64:latest -f ./Dockerfile .
FROM quay.io/pypa/manylinux1_x86_64:2020-12-30-e2b3664
RUN yum update -y \
&& yum install -y ccache \
&& yum clean all
RUN /opt/python/cp37-cp37m/bin/pip install cmake==3.13.3 ninja==1.10.0.post2
ENV PATH=$PATH:/opt/python/cp37-cp37m/bin/
RUN curl --output /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 -L https://github.com/squeaky-pl/centos-devtools/releases/download/6.3/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 && \
echo "ca3e9f92411507018c839c8cc2b496f14956a49fcf6df0cdcb356de7161bcbc5 /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2" | sha256sum --check --status && \
tar -C / -xj -f /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 && \
rm -rf /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2
ENV CC=/opt/devtools-6.3/bin/gcc
ENV CXX=/opt/devtools-6.3/bin/g++
ENV CXXFLAGS="-static-libstdc++ -static-libgcc"
WORKDIR /src
+2 -2
View File
@@ -186,8 +186,8 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2017 - 2022 R. Thomas
Copyright 2017 - 2022 Quarkslab
Copyright 2017 - 2023 R. Thomas
Copyright 2017 - 2023 Quarkslab
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
-26
View File
@@ -1,26 +0,0 @@
include README.md LICENSE setup.cfg CMakeLists.txt LIEF.pc.in LIEFConfig.cmake.in
# Examples
recursive-include examples *
# LIEF Sources
recursive-include src *
recursive-include include *
recursive-include third-party *
recursive-include cmake *
recursive-include scripts *
# Bindings
recursive-include api *
prune api/python/build
# Global exclude
recursive-exclude *.egg-info *.so
# Install script
recursive-include package *
# Documentation
recursive-include doc *
+29 -39
View File
@@ -3,32 +3,32 @@
</p>
<p align="center">
<a href="https://gitter.im/lief-project">
<img src="https://img.shields.io/gitter/room/gitterHQ/gitter.svg?style=flat-square">
<a href="https://discord.gg/7hRFGWYedu">
<img src="https://img.shields.io/discord/1117013848914931762">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3A%22Linux+x86-64%22">
<img alt="Linux x86-64 CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/Linux%20x86-64/master?label=Linux%20x86-64&logo=github">
<a href="https://github.com/lief-project/LIEF/actions/workflows/linux-x86-64.yml">
<img alt="Linux x86-64 CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/linux-x86-64.yml?branch=master&label=Linux%20x86-64&logo=github">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3A%22Linux+AArch64%22">
<img alt="Linux AArch64 CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/Linux%20AArch64/master?label=Linux%20AArch64&logo=github">
<a href="https://github.com/lief-project/LIEF/actions/workflows/linux-aarch64.yml">
<img alt="Linux AArch64 CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/linux-aarch64.yml?branch=master&label=Linux%20AArch64&logo=github">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AAndroid">
<img alt="Android CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/Android/master?label=Android&logo=github">
<a href="https://github.com/lief-project/LIEF/actions/workflows/android.yml">
<img alt="Android CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/android.yml?branch=master&label=Android&logo=github">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AmacOS">
<img alt="macOS CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/macOS/master?label=macOS&logo=github">
<a href="https://github.com/lief-project/LIEF/actions/workflows/osx.yml">
<img alt="macOS CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/osx.yml?branch=master&label=macOS&logo=github">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AiOS">
<img alt="iOS CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/iOS/master?label=iOS&logo=github">
<a href="https://github.com/lief-project/LIEF/actions/workflows/ios.yml">
<img alt="iOS CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/ios.yml?branch=master&label=iOS&logo=github">
</a>
&nbsp;
<a href="https://ci.appveyor.com/project/Romain/lief/branch/master">
<img alt="Windows CI status" src="https://img.shields.io/appveyor/build/Romain/LIEF/master?label=Windows&logo=appveyor">
<a href="https://github.com/lief-project/LIEF/actions/workflows/windows-all.yml">
<img alt="Windows CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/windows-all.yml?branch=master&label=Windows&logo=github">
</a>
&nbsp;
<a href="https://github.com/lief-project/LIEF/releases">
@@ -36,7 +36,7 @@
</a>
&nbsp;
<a href="https://twitter.com/LIEF_project">
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lief_project?color=1da1f2&label=Follow&logo=twitter&logoColor=white&style=flat-square">
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lief_project">
</a>
</p>
@@ -44,7 +44,7 @@
<p align="center">
<a href="https://lief-project.github.io/blog/"><b>Blog</b></a> •
<a href="https://lief-project.github.io/doc/latest/index.html"><b>Documentation</b></a> •
<a href="#about-A"><b>About</b></a>
<a href="#user-content-about-1"><b>About</b></a>
</p>
<br />
@@ -105,7 +105,7 @@ pip install lief
To install nightly build:
```console
pip install [--user] --index-url https://lief.s3-website.fr-par.scw.cloud/latest lief==0.13.0.dev0
pip install [--user] --index-url https://lief.s3-website.fr-par.scw.cloud/latest lief==0.14.0.dev0
```
### Packages
@@ -113,7 +113,7 @@ pip install [--user] --index-url https://lief.s3-website.fr-par.scw.cloud/latest
- **Nightly**:
* SDK: https://lief.s3-website.fr-par.scw.cloud/latest/sdk
* Python Wheels: https://lief.s3-website.fr-par.scw.cloud/latest/lief
- **v0.12.0**: https://github.com/lief-project/LIEF/releases/tag/0.12.0
- **v0.13.2**: https://github.com/lief-project/LIEF/releases/tag/0.13.2
Here are guides to install or integrate LIEF:
@@ -149,27 +149,18 @@ print(binary)
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;
if (std::unique_ptr<const LIEF::ELF::Binary> elf = LIEF::ELF::Parser::parse("/bin/ls")) {
std::cout << *elf << '\n';
}
// 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;
if (std::unique_ptr<const LIEF::PE::Binary> pe = LIEF::PE::Parser::parse("C:\\Windows\\explorer.exe")) {
std::cout << *pe << '\n';
}
// 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;
if (std::unique_ptr<LIEF::MachO::FatBinary> macho = LIEF::MachO::Parser::parse("/bin/ls")) {
std::cout << *macho << '\n';
}
return 0;
@@ -206,7 +197,7 @@ int main(int argc, char** argv) {
## Contact
* **Mail**: contact at lief re
* **Gitter**: [lief-project](https://gitter.im/lief-project)
* **Discord**: [LIEF](https://discord.gg/7hRFGWYedu)
## About
@@ -216,19 +207,18 @@ Romain Thomas ([@rh0main](https://twitter.com/rh0main)) - [Quarkslab](https://ww
### License
LIEF is provided under the [Apache 2.0 license](https://github.com/lief-project/LIEF/blob/0.12.0/LICENSE).
LIEF is provided under the [Apache 2.0 license](https://github.com/lief-project/LIEF/blob/0.13.0/LICENSE).
### Bibtex
```latex
```bibtex
@MISC {LIEF,
author = "Romain Thomas",
title = "LIEF - Library to Instrument Executable Formats",
howpublished = "https://lief.quarkslab.com/",
month = "April",
year = "2017",
month = "apr",
year = "2017"
}
```
+7 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,7 +36,6 @@ namespace LIEF {
namespace ELF {
void init_c_binary(Elf_Binary_t* c_binary, Binary* binary) {
c_binary->handler = reinterpret_cast<void*>(binary);
c_binary->name = binary->name().c_str();
c_binary->type = static_cast<enum LIEF_ELF_ELF_CLASS>(binary->type());
c_binary->interpreter = nullptr;
if (binary->has_interpreter()) {
@@ -65,6 +64,11 @@ void init_c_binary(Elf_Binary_t* c_binary, Binary* binary) {
Elf_Binary_t* elf_parse(const char *file) {
Binary* binary = Parser::parse(file).release();
if (binary == nullptr) {
return nullptr;
}
auto* c_binary = static_cast<Elf_Binary_t*>(malloc(sizeof(Elf_Binary_t)));
memset(c_binary, 0, sizeof(Elf_Binary_t));
init_c_binary(c_binary, binary);
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+16 -6
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -162,9 +162,9 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
{
c_binary->dynamic_entries[i] =
static_cast<Elf_DynamicEntry_t*>(malloc(sizeof(Elf_DynamicEntry_t)));
c_binary->dynamic_entries[i]->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
c_binary->dynamic_entries[i]->tag = static_cast<uint64_t>(entry.tag());
c_binary->dynamic_entries[i]->value = entry.value();
break;
}
}
}
@@ -208,14 +208,24 @@ void destroy_dynamic_entries(Elf_Binary_t* c_binary) {
case DYNAMIC_TAGS::DT_FINI_ARRAY:
case DYNAMIC_TAGS::DT_PREINIT_ARRAY:
{
free(reinterpret_cast<Elf_DynamicEntry_Array_t*>(dynamic_entries[idx]));
Elf_DynamicEntry_Array_t* entry_array=reinterpret_cast<Elf_DynamicEntry_Array_t*>(dynamic_entries[idx]);
free(entry_array->array);
free(entry_array);
break;
}
case DYNAMIC_TAGS::DT_FLAGS:
{
Elf_DynamicEntry_Flags_t* entry_flags=reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]);
free(entry_flags->flags);
free(entry_flags);
break;
}
case DYNAMIC_TAGS::DT_FLAGS_1:
{
free(reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]));
Elf_DynamicEntry_Flags_t* entry_flags=reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]);
free(entry_flags->flags_1);
free(entry_flags);
break;
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+4 -7
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,9 +28,6 @@ void init_c_sections(Elf_Binary_t* c_binary, Binary* binary) {
Section& b_section = sections[i];
c_binary->sections[i] = static_cast<Elf_Section_t*>(malloc(sizeof(Elf_Section_t)));
span<const uint8_t> section_content = b_section.content();
auto* content = static_cast<uint8_t*>(malloc(section_content.size() * sizeof(uint8_t)));
std::copy(std::begin(section_content), std::end(section_content),
content);
c_binary->sections[i]->name = b_section.fullname().c_str();
c_binary->sections[i]->flags = b_section.flags();
@@ -42,9 +39,10 @@ void init_c_sections(Elf_Binary_t* c_binary, Binary* binary) {
c_binary->sections[i]->info = b_section.information();
c_binary->sections[i]->alignment = b_section.alignment();
c_binary->sections[i]->entry_size = b_section.entry_size();
c_binary->sections[i]->content = content;
c_binary->sections[i]->size = section_content.size();
c_binary->sections[i]->entropy = b_section.entropy();
c_binary->sections[i]->content = !section_content.empty() ?
const_cast<uint8_t*>(section_content.data()) : nullptr;
}
c_binary->sections[sections.size()] = nullptr;
@@ -56,7 +54,6 @@ void destroy_sections(Elf_Binary_t* c_binary) {
Elf_Section_t **sections = c_binary->sections;
for (size_t idx = 0; sections[idx] != nullptr; ++idx) {
free(sections[idx]->content);
free(sections[idx]);
}
free(c_binary->sections);
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+4 -9
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,11 +27,6 @@ void init_c_segments(Elf_Binary_t* c_binary, Binary* binary) {
Segment& segment = segments[i];
span<const uint8_t> segment_content = segment.content();
auto* content = static_cast<uint8_t*>(malloc(segment_content.size() * sizeof(uint8_t)));
std::copy(
std::begin(segment_content),
std::end(segment_content),
content);
c_binary->segments[i] = static_cast<Elf_Segment_t*>(malloc(sizeof(Elf_Segment_t)));
c_binary->segments[i]->type = static_cast<enum LIEF_ELF_SEGMENT_TYPES>(segment.type());
@@ -41,7 +36,8 @@ void init_c_segments(Elf_Binary_t* c_binary, Binary* binary) {
c_binary->segments[i]->offset = segment.file_offset();
c_binary->segments[i]->alignment = segment.alignment();
c_binary->segments[i]->size = segment_content.size();
c_binary->segments[i]->content = content;
c_binary->segments[i]->content = !segment_content.empty() ?
const_cast<uint8_t*>(segment_content.data()) : nullptr;
}
c_binary->segments[segments.size()] = nullptr;
@@ -54,7 +50,6 @@ void destroy_segments(Elf_Binary_t* c_binary) {
Elf_Segment_t **segments = c_binary->segments;
for (size_t idx = 0; segments[idx] != nullptr; ++idx) {
free(segments[idx]->content);
free(segments[idx]);
}
free(c_binary->segments);
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,7 +32,6 @@ namespace MachO {
void init_c_binary(Macho_Binary_t* c_binary, Binary* binary) {
c_binary->handler = reinterpret_cast<void*>(binary);
c_binary->name = binary->name().c_str();
c_binary->imagebase = binary->imagebase();
init_c_header(c_binary, binary);
init_c_commands(c_binary, binary);
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+12 -4
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,11 +25,16 @@ using namespace LIEF::MachO;
Macho_Binary_t** macho_parse(const char *file) {
FatBinary* fat = Parser::parse(file).release();
if (fat == nullptr) {
return nullptr;
}
size_t nb_bin = fat->size();
auto** c_macho_binaries = static_cast<Macho_Binary_t**>(
malloc((fat->size() + 1) * sizeof(Macho_Binary_t**)));
for (size_t i = 0; i < fat->size(); ++i) {
for (size_t i = 0; i < nb_bin; ++i) {
Binary* binary = fat->at(i);
if (binary != nullptr) {
c_macho_binaries[i] = static_cast<Macho_Binary_t*>(malloc(sizeof(Macho_Binary_t)));
@@ -37,7 +42,10 @@ Macho_Binary_t** macho_parse(const char *file) {
}
}
c_macho_binaries[fat->size()] = nullptr;
fat->release_all_binaries();
c_macho_binaries[nb_bin] = nullptr;
delete fat;
return c_macho_binaries;
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+7 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@ namespace LIEF {
namespace PE {
void init_c_binary(Pe_Binary_t* c_binary, Binary* binary) {
c_binary->name = binary->name().c_str();
c_binary->handler = reinterpret_cast<void*>(binary);
init_c_dos_header(c_binary, binary);
@@ -51,6 +50,11 @@ void init_c_binary(Pe_Binary_t* c_binary, Binary* binary) {
Pe_Binary_t* pe_parse(const char *file) {
Binary* binary = Parser::parse(file).release();
if (binary == nullptr) {
return nullptr;
}
auto* c_binary = static_cast<Pe_Binary_t*>(malloc(sizeof(Pe_Binary_t)));
std::memset(c_binary, 0, sizeof(Pe_Binary_t));
init_c_binary(c_binary, binary);
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+3 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
#ifndef C_LIEF_ELF_H_
#define C_LIEF_ELF_H_
//! @defgroup elf_c_api ELF C API
/** @defgroup elf_c_api ELF C API */
#include "LIEF/ELF/Binary.h"
#include "LIEF/ELF/Symbol.h"
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+21 -21
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,44 +34,44 @@ extern "C" {
#endif
struct Elf_DynamicEntry_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
uint64_t tag;
uint64_t value;
};
struct Elf_DynamicEntry_Library_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
const char* name;
uint64_t tag;
uint64_t value;
const char* name;
};
struct Elf_DynamicEntry_SharedObject_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
const char* name;
uint64_t tag;
uint64_t value;
const char* name;
};
struct Elf_DynamicEntry_Array_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
uint64_t* array;
uint64_t tag;
uint64_t value;
uint64_t* array;
};
struct Elf_DynamicEntry_Rpath_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
const char* rpath;
uint64_t tag;
uint64_t value;
const char* rpath;
};
struct Elf_DynamicEntry_RunPath_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
const char* runpath;
uint64_t tag;
uint64_t value;
const char* runpath;
};
struct Elf_DynamicEntry_Flags_t {
enum LIEF_ELF_DYNAMIC_TAGS tag;
uint64_t value;
uint64_t tag;
uint64_t value;
enum LIEF_ELF_DYNAMIC_FLAGS *flags;
enum LIEF_ELF_DYNAMIC_FLAGS_1 *flags_1;
};
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+3 -3
View File
@@ -6,9 +6,9 @@
extern "C" {
#endif
#define _LIEF_EN(N) LIEF_ELF_##N // enum LIEF_N {
#define _LIEF_EN_2(N, TYPE) LIEF_ELF_##N // enum LIEF_N {
#define _LIEF_EI(X) LIEF_ELF_##X // LIEF_X
#define _LIEF_EN(N) LIEF_ELF_##N
#define _LIEF_EN_2(N, TYPE) LIEF_ELF_##N
#define _LIEF_EI(X) LIEF_ELF_##X
#include "LIEF/ELF/enums.inc"
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+3 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
#ifndef C_LIEF_MACHO_H_
#define C_LIEF_MACHO_H_
//! @defgroup macho_c_api MachO C API
/** @defgroup macho_c_api MachO C API */
#include "LIEF/MachO/Binary.h"
#include "LIEF/MachO/Symbol.h"
+3 -4
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
* @{
*/
#include <stddef.h>
#include <stdint.h>
#include "LIEF/visibility.h"
@@ -33,7 +33,6 @@
#include "LIEF/MachO/Symbol.h"
#include "LIEF/MachO/Section.h"
#include "LIEF/MachO/Segment.h"
#include "LIEF/MachO/enums.h"
#ifdef __cplusplus
extern "C" {
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+3 -3
View File
@@ -18,9 +18,9 @@ extern "C" {
#undef _LIEF_EI
#endif
#define _LIEF_EN(N) LIEF_MACHO_##N // enum LIEF_N {
#define _LIEF_EN_2(N, TYPE) LIEF_MACHO_##N // enum LIEF_N {
#define _LIEF_EI(X) LIEF_MACHO_##X // LIEF_X
#define _LIEF_EN(N) LIEF_MACHO_##N
#define _LIEF_EN_2(N, TYPE) LIEF_MACHO_##N
#define _LIEF_EI(X) LIEF_MACHO_##X
#include "LIEF/MachO/enums.inc"
+3 -3
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
#ifndef C_LIEF_PE_H_
#define C_LIEF_PE_H_
//! @defgroup pe_c_api PE C API
/** @defgroup pe_c_api PE C API */
#include "LIEF/PE/Binary.h"
#include "LIEF/PE/EnumToString.h"
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
+2 -2
View File
@@ -1,5 +1,5 @@
/* Copyright 2017 - 2022 R. Thomas
* Copyright 2017 - 2022 Quarkslab
/* Copyright 2017 - 2023 R. Thomas
* Copyright 2017 - 2023 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

Some files were not shown because too many files have changed in this diff Show More