|
11 | 11 | find ../path/to/binaries -type f -executable | xargs python3 contrib/devtools/symbol-check.py
|
12 | 12 | '''
|
13 | 13 | import sys
|
14 |
| -from typing import List |
| 14 | +from typing import List, Dict |
15 | 15 |
|
16 | 16 | import lief
|
17 | 17 |
|
|
63 | 63 | 'environ', '_environ', '__environ',
|
64 | 64 | }
|
65 | 65 |
|
| 66 | +# Expected linker-loader names can be found here: |
| 67 | +# https://sourceware.org/glibc/wiki/ABIList?action=recall&rev=16 |
| 68 | +ELF_INTERPRETER_NAMES: Dict[lief.ELF.ARCH, Dict[lief.ENDIANNESS, str]] = { |
| 69 | + lief.ELF.ARCH.i386: { |
| 70 | + lief.ENDIANNESS.LITTLE: "/lib/ld-linux.so.2", |
| 71 | + }, |
| 72 | + lief.ELF.ARCH.x86_64: { |
| 73 | + lief.ENDIANNESS.LITTLE: "/lib64/ld-linux-x86-64.so.2", |
| 74 | + }, |
| 75 | + lief.ELF.ARCH.ARM: { |
| 76 | + lief.ENDIANNESS.LITTLE: "/lib/ld-linux-armhf.so.3", |
| 77 | + }, |
| 78 | + lief.ELF.ARCH.AARCH64: { |
| 79 | + lief.ENDIANNESS.LITTLE: "/lib/ld-linux-aarch64.so.1", |
| 80 | + }, |
| 81 | + lief.ELF.ARCH.PPC64: { |
| 82 | + lief.ENDIANNESS.BIG: "/lib64/ld64.so.1", |
| 83 | + lief.ENDIANNESS.LITTLE: "/lib64/ld64.so.2", |
| 84 | + }, |
| 85 | + LIEF_ELF_ARCH_RISCV: { |
| 86 | + lief.ENDIANNESS.LITTLE: "/lib/ld-linux-riscv64-lp64d.so.1", |
| 87 | + }, |
| 88 | +} |
| 89 | + |
66 | 90 | # Allowed NEEDED libraries
|
67 | 91 | ELF_ALLOWED_LIBRARIES = {
|
68 | 92 | # bitcoind and bitcoin-qt
|
@@ -215,11 +239,17 @@ def check_PE_subsystem_version(binary) -> bool:
|
215 | 239 | return True
|
216 | 240 | return False
|
217 | 241 |
|
| 242 | +def check_ELF_interpreter(binary) -> bool: |
| 243 | + expected_interpreter = ELF_INTERPRETER_NAMES[binary.header.machine_type][binary.abstract.header.endianness] |
| 244 | + |
| 245 | + return binary.concrete.interpreter == expected_interpreter |
| 246 | + |
218 | 247 | CHECKS = {
|
219 | 248 | 'ELF': [
|
220 | 249 | ('IMPORTED_SYMBOLS', check_imported_symbols),
|
221 | 250 | ('EXPORTED_SYMBOLS', check_exported_symbols),
|
222 |
| - ('LIBRARY_DEPENDENCIES', check_ELF_libraries) |
| 251 | + ('LIBRARY_DEPENDENCIES', check_ELF_libraries), |
| 252 | + ('INTERPRETER_NAME', check_ELF_interpreter), |
223 | 253 | ],
|
224 | 254 | 'MACHO': [
|
225 | 255 | ('DYNAMIC_LIBRARIES', check_MACHO_libraries),
|
|
0 commit comments