Skip to content

Commit 65ba8a7

Browse files
committed
contrib: add ELF ABI check to symbol-check.py
1 parent 7b45d17 commit 65ba8a7

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

contrib/devtools/symbol-check.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,25 @@
7272
},
7373
}
7474

75+
ELF_ABIS: Dict[lief.ELF.ARCH, Dict[lief.ENDIANNESS, List[int]]] = {
76+
lief.ELF.ARCH.x86_64: {
77+
lief.ENDIANNESS.LITTLE: [3,2,0],
78+
},
79+
lief.ELF.ARCH.ARM: {
80+
lief.ENDIANNESS.LITTLE: [3,2,0],
81+
},
82+
lief.ELF.ARCH.AARCH64: {
83+
lief.ENDIANNESS.LITTLE: [3,7,0],
84+
},
85+
lief.ELF.ARCH.PPC64: {
86+
lief.ENDIANNESS.LITTLE: [3,10,0],
87+
lief.ENDIANNESS.BIG: [3,2,0],
88+
},
89+
lief.ELF.ARCH.RISCV: {
90+
lief.ENDIANNESS.LITTLE: [4,15,0],
91+
},
92+
}
93+
7594
# Allowed NEEDED libraries
7695
ELF_ALLOWED_LIBRARIES = {
7796
# bitcoind and bitcoin-qt
@@ -242,12 +261,19 @@ def check_ELF_interpreter(binary) -> bool:
242261

243262
return binary.concrete.interpreter == expected_interpreter
244263

264+
def check_ELF_ABI(binary) -> bool:
265+
expected_abi = ELF_ABIS[binary.header.machine_type][binary.abstract.header.endianness]
266+
note = binary.concrete.get(lief.ELF.NOTE_TYPES.ABI_TAG)
267+
assert note.details.abi == lief.ELF.NOTE_ABIS.LINUX
268+
return note.details.version == expected_abi
269+
245270
CHECKS = {
246271
lief.EXE_FORMATS.ELF: [
247272
('IMPORTED_SYMBOLS', check_imported_symbols),
248273
('EXPORTED_SYMBOLS', check_exported_symbols),
249274
('LIBRARY_DEPENDENCIES', check_ELF_libraries),
250275
('INTERPRETER_NAME', check_ELF_interpreter),
276+
('ABI', check_ELF_ABI),
251277
],
252278
lief.EXE_FORMATS.MACHO: [
253279
('DYNAMIC_LIBRARIES', check_MACHO_libraries),

0 commit comments

Comments
 (0)