GNU/Linux >> Linux Esercitazione >  >> Linux

Come verificare se un binario Linux è stato compilato come codice indipendente dalla posizione?

Puoi usare il perl script contenuto nel hardening-check pacchetto, disponibile in Fedora e Debian (come hardening-includes ). Leggi questa pagina wiki Debian per i dettagli su quali flag di compilazione vengono controllati. È specifico di Debian, ma la teoria si applica anche a Red Hat.

Esempio:

$ 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

Usa semplicemente file sul binario:

$ 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

Nota il diverso tipo stampato dopo le informazioni LSB.


Ho usato readelf --relocs per verificare se la libreria statica o dinamica è PIC su x86-64 nel modo seguente:

$ 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

Vediamo qui R_X86_64_32 e R_X86_64_32S . Ciò significa che il codice non è indipendente dalla posizione. Quando ricostruisco una libreria con -fPIC ottengo:

$ 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

Questo metodo potrebbe probabilmente funzionare per gli eseguibili, ma non l'ho usato in questo modo.


Linux
  1. Come Linux ha reso una scuola pronta per la pandemia

  2. Come ho abbandonato il mio vecchio sistema operativo e sono passato a Linux

  3. Come hai iniziato con Linux?

  4. Come ordinare i file in Linux usando il comando di ordinamento

  5. Come disassemblare un eseguibile binario in Linux per ottenere il codice assembly?

Come gioco a Tetris sul mainframe

Come è cresciuto il desktop Linux

Come utilizzare gli operatori di test di file Bash in Linux

Come testare la velocità di caricamento del sito Web in Linux

Come eseguire un pacchetto .run o .bin in Linux

Come posso profilare il codice C++ in esecuzione su Linux?