From e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Fri, 16 Aug 2019 15:48:11 +0200 Subject: [PATCH] setup.sh introduce isELFExec, isELFDyn These can be used to determine whether a ELF file with ELF header is an executable or shared library. We can't implement it in pure bash, as bash has problems with null bytes. --- pkgs/stdenv/generic/setup.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index ebcedce60b8..311292169ec 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -212,6 +212,18 @@ isELF() { if [ "$magic" = $'\177ELF' ]; then return 0; else return 1; fi } +# Return success if the specified file is an ELF object +# and its e_type is ET_EXEC (executable file) +isELFExec() { + grep -ao -P '^\177ELF.{11}\x00\x02' "$1" >/dev/null +} + +# Return success if the specified file is an ELF object +# and its e_type is ET_DYN (shared object file) +isELFDyn() { + grep -ao -P '^\177ELF.{11}\x00\x03' "$1" >/dev/null +} + # Return success if the specified file is a script (i.e. starts with # "#!"). isScript() {