GNU/Linux >> Znalost Linux >  >> Linux

Jak otestovat, zda byl binární soubor Linuxu zkompilován jako kód nezávislý na pozici?

Můžete použít perl skript obsažený v hardening-check balíček, dostupný ve Fedoře a Debianu (jako hardening-includes ). Přečtěte si tuto wiki stránku Debianu, kde najdete podrobnosti o tom, jaké příznaky kompilace jsou kontrolovány. Je to specifické pro Debian, ale teorie platí i pro Red Hat.

Příklad:

$ hardening-check $(which sshd)
/usr/sbin/sshd:
 Position Independent Executable: yes
 Stack protected: yes
 Fortify Source functions: yes (some protected functions found)
 Read-only relocations: yes
 Immediate binding: yes

Jednoduše použijte file na binární:

$ file ./pie-off
./pie-off: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0dc3858e9f0334060bfebcbe3e854909191d8bdc, not stripped
$ file ./pie-on
./pie-on: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=962235df5bd188e1ec48c151ff61b6435d395f89, not stripped

Všimněte si jiného typu vytištěného za informací LSB.


Použil jsem readelf --relocs otestovat, zda je statická nebo dynamická knihovna PIC na x86-64 následujícím způsobem:

$ readelf --relocs /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a |\
      awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u
R_X86_64_32
R_X86_64_32S
R_X86_64_64
R_X86_64_DTPOFF32
R_X86_64_GOTPCREL
R_X86_64_PC32
R_X86_64_PLT32
R_X86_64_TLSLD
R_X86_64_TPOFF32

Zde vidíme R_X86_64_32 a R_X86_64_32S . To znamená, že kód není nezávislý na pozici. Když znovu sestavím knihovnu pomocí -fPIC, dostanu:

$ readelf --relocs libstdc++.a |\
      awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u
R_X86_64_64
R_X86_64_DTPOFF32
R_X86_64_GOTPCREL
R_X86_64_PC32
R_X86_64_PLT32
R_X86_64_TLSGD
R_X86_64_TLSLD

Tato metoda může pravděpodobně fungovat pro spustitelné soubory, ale já jsem ji takto nepoužil.


Linux
  1. Jak Linux připravil školní pandemii

  2. Jak jsem zahodil svůj starý OS a skočil do Linuxu

  3. Jak jste začali s Linuxem?

  1. Jak otestovat rychlost načítání webu v Linuxu

  2. Jak otestovat balíček bez jeho instalace v Linuxu

  3. Linux – Jak otestovat, zda je blokové zařízení pouze pro čtení z /sys nebo /proc?

  1. Linux – Jak otestovat, zda byl binární soubor Linuxu zkompilován jako kód nezávislý na pozici?

  2. Jak třídit soubory v Linuxu pomocí příkazu Sort

  3. Jak rozebrat binární spustitelný soubor v Linuxu, abyste získali kód sestavení?