Различают интерпретаторы для execve() в последовательности syscall в Linux

Как узнать, какой интерпретатор он использует, когда execve() выполняет файл в Debian Linux, из его системных журналов strace?

Например, как узнать, что файл выполняется как скрипт bash (#!/ Bin/bash), или как скрипт python (#!/ Usr/bin/env python), или как чистый файл ELF?

Предположим, у нас нет правильного суффикса файла, поэтому мы не можем просто узнать из аргументов execve().

Если он не может быть извлечен из журналов системных вызовов strace, какие еще методы можно использовать?

1 ответ

Используйте файл для этого:

$ echo '#!/bin/python' > 1
$ file 1
1: a /bin/python script, ASCII text executable

$ echo '#!/bin/sh' > 2
$ file 2
2: POSIX shell script, ASCII text executable

$ echo '#!/usr/bin/env python' > 3
$ file 3
3: Python script, ASCII text executable

$ echo 'int main() { return 0; } ' | gcc -xc -o4 -
$ file 4
4: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d2f65ad2fe7b73bd5f4acc9fc9da25f748fe9915, not stripped
Другие вопросы по тегам