技术解析

有大神知道 Linux 下的 ELF 可执行文件 和 Ascii text 可执行文件的区别吗
0
2021-06-22 08:41:12
idczone

我只知道 Ascii text 里面会引入 /bin/bash 这个 ELF 可执行文件 那这两种文件类型的具体区别,各自的利弊,以及 Ascii text 的运行原理 有大神指教下吗


建议你补习一下计算机常识。

https://book.douban.com/subject/3652388/
《程序员的自我修养》
其中一章 3.4 ELF 文件结构描述

刚看到 3.1... 等我看完应该就懂了

text 不是可执行文件,是由 bash 解析的

你说的“ Ascii Text ”应该指的是这个 https://en.wikipedia.org/wiki/Shebang_(Unix)

其实我搞不懂的是为啥 Linux 的 init 进程可以是一个 shell 脚步

text executable 不是 shell 解析的,是内核执行的。脚本内容是 shell 解析的。
exec 系的系统调用。

text executable 是内核解释的,见上

因为是内核支持的格式啦,你可以在 linux 内核 menu config 里面找到相关的选项。
还有就是 windows 上的 exe 在安装 wine 后也能直接运行, 原理就是 binfmt

sys_execve 去执行 /sbin/init (或者内核参数 init=),execve 会检查文件类型,对于 elf 文件去执行 elf 文件,对于text executable 和 elf executable 是对用户和应用程序透明的,无脑 exec 即可

就是通过 file 命令查看 shell 脚本的文件格式

execv 系列 syscall,支持#开头的可执行文件,就酱

因为那就是纯文本文件,所以这么显示。

text 一般是脚本,由对应的脚本解释器翻译成对应硬件体系的机器码执行。
elf 大部分情况下是包含一堆直接可以由硬件执行的机器指令。
脚本一般可读性很不错,机器码的话,天书了。
反正记住 cpu 只认它对应的机器码(指令集)。
这样理解就清楚多了,虽然不准确,且可能有特殊情况。

感觉你没看懂他们在讨论啥。。

我没管楼上在讨论啥,我是在回复楼主的部分问题。

Ascii text 可执行文件 原来是 shell 脚本啊

那为什么比如 hadoop 体系下的 一些启动脚本都是采用 text 方式,而比如 mysql 的服务启动脚本却直接编译成机器码呢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服