【问题标题】:Distinguish interpreters for execve() in syscall sequence on Linux在 Linux 系统调用序列中区分 execve() 的解释器
【发布时间】:2018-08-28 07:29:27
【问题描述】:

如何从 strace 系统调用日志中知道 execve() 在 Debian Linux 上执行文件时使用的是哪个解释器?

例如,如何知道文件是作为 bash 脚本(#!/bin/bash)、python 脚本(#!/usr/bin/env python)还是纯 ELF 文件执行的?

假设我们没有正确的文件后缀,所以我们不能简单地从 execve() 的参数中分辨出来。

如果无法从 strace 系统调用日志中获取,还有哪些方法可以使用?

【问题讨论】:

    标签: linux shell system-calls interpreter execve


    【解决方案1】:

    为此使用file

    $ 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
    

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 2015-03-23
      • 2012-09-23
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2011-06-23
      相关资源
      最近更新 更多