Puoi determinare la natura di un eseguibile in Unix usando il file
comando e il type
comando.
genere
Si utilizza type
per determinare la posizione di un eseguibile sul disco in questo modo:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Quindi ora so che ls
si trova qui sul mio sistema in 2 posizioni: /usr/bin/ls
& /bin/ls
. Guardando quei file eseguibili posso vedere che sono identici:
$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls
NOTA: è possibile confermare che sono identici oltre le dimensioni utilizzando cmp
o diff
.
con diff
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
con cmp
$ cmp /usr/bin/ls /bin/ls
$
Utilizzando il file
Se li interrogo usando il file
comando:
$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
Quindi questi sarebbero veri e propri programmi fisici che sono stati compilati da C / C ++. Se fossero script di shell, in genere si presenterebbero in questo modo per file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
Cos'è ELF?
ELF è un formato di file , è l'output di un compilatore come gcc
, che viene utilizzato per compilare programmi C / C ++ come ls
.
Nell'informatica, il formato eseguibile e collegabile (ELF, precedentemente chiamato Extensible Linking Format) è un formato file standard comune per eseguibili, codice oggetto, librerie condivise e core dump.
In genere avrà una delle seguenti estensioni nel nome file: none, .o, .so, .elf, .prx, .puff, .bin