linux - 在 Linux 系统调用序列中区分 execve() 的解释器
问题描述
当 execve() 在 Debian Linux 上执行文件时,如何从其 strace 系统调用日志中知道它使用哪个解释器?
例如,如何知道文件是作为 bash 脚本(#!/bin/bash)、python 脚本(#!/usr/bin/env python)还是纯 ELF 文件执行的?
假设我们没有正确的文件后缀,所以我们不能简单地从 execve() 的参数中分辨出来。
如果它不能从 strace 系统调用日志中获取,可以使用哪些其他方法?
解决方案
为此使用文件:
$ 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
推荐阅读
- odata - 为 Dynamics 365 Finance and Operations 生成 OData 客户端
- apache-kafka - Apache Kafka 集群消费者故障转移
- android - 滚动时RecyclerView问题
- javascript - react-router 和 Next.js 有什么区别
- powershell - 在带有特殊字符和空白的文件上运行 sha256sum(来自 Cygwin)(引用不起作用)
- pandas - 将列表附加为数据框行
- node.js - 如何将 Uint8Array 视频转换为 nodejs 中的帧
- django - Django从视图传递参数挂起服务器
- php - Opencart:多个域 - 一个站点/安装?
- angular - 使用 CSS Grid(Angular 6 with Angular Material)时,mat-raised-button 在 Safari 浏览器上不起作用