Различать интерпретаторы для execve () в последовательности syscall в Linux - PullRequest
0 голосов
/ 28 августа 2018

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

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

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

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

1 Ответ

0 голосов
/ 28 августа 2018

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

$ 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
...