惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
博客园 - 叶小钗
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
美团技术团队
aimingoo的专栏
aimingoo的专栏
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
Last Week in AI
Last Week in AI
The GitHub Blog
The GitHub Blog
小众软件
小众软件
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
B
Blog RSS Feed
月光博客
月光博客
量子位
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
Y
Y Combinator Blog
B
Blog
MyScale Blog
MyScale Blog

博客园 - format

使用Arduino Nano驱动Lora模块 DIY一个物联网平台:想法 jQuery 批量操作checkbox 国内的maven镜像 Python Flask UnicodeDecodeError 编码错误解决 关于Python的web框架 NHibernate 3 中的 In 集合查询 在MVC 4 中使用自定义Membership [学习][Java] Struts2 与页面传值 (转) C++ Utf8字符转换Gb312编码,解决TinyXml中文乱码 WIN32简单的窗体代码,带函数功能注释 WINSocket编程 发生HTTP GET请求,并接收服务器返回 Win32 API 的文件操作 - format C++ 类中封装Win32API的回调函数 Win32编程 创建从资源文件定义的对话框 Oracle 数据库 用脚本建表空间 把UserControl通过代码控制输入HTML WebService调用时候的Object Moved 异常 ICTCLAS 平台调用的封装
Linux学习 -- Linux的可执行文件
format · 2010-08-17 · via 博客园 - format

Linux的文件系统不像Windows用的是文件的扩展名来区分文件的类型,一般Linux区分文件类型是靠文件属性,也就是二进制文件的最开始的4个字符。
linux是识别文件头和文件属性来打开一个文件的。你就算把可执行的bin命名成.txt,打文件名,照样可以运行,与扩展名无关

用ls -F命令,后买带“*”的就是可执行文件。

下面是一些相关信息的摘录:

linux下,当你使用./xxx运行一个程序时,首先是SHELL来接管你的输入,然后用fork派生子进程,最后用execv系列将你的那个程序的代码交给内核

1。检查你运行的文件的属性,其属性在它的I节点中描述,如果你的那个文件不是可执行的属性,结果就会拒绝执行,如果有可执行的属性,但可执行的权限高于你目前正在使用的用户的权限,拒绝执行
2。检查是SHELL文件吗?如果是,调用相应的SHELL来解析你的这个脚本文件
3。是ELF文件格式吗??是coff文件格式吗?是a.out文件格式吗?如果是其中任何一种,并且当前的LINUX内核都支持这三种文件格式,那么就由操作系统内核分析你的文件格式,去掉文件头信息,将真正的代码,数据等加载进内存(实际过程并不是这样的,只不过为了描述简单,所以省略了很多细节,更多详细说明,请参见内核中的execv系统调用)...
4.等待系统的进程调度,当内核选中你的那个程序的时候,你的那个程序就得到运行了

LINUX下的文件扩展名是形同虚设的,只是一种习惯,为了给用户更好的理解其作用,比如配置文件一般都以.conf结尾,“文本文件”一般都以.txt结尾(主要是为了跟WINDOWS用户习惯相接近),ELF文件不用扩展名,所以当你说可执行文件的时候千万不要说是exe文件,那是很不严格的说法,只说明你仅是一个WINDOWS程序员而已。


Linux的加载程序一般是根据内嵌在可执行文件开头的“magic序列”(一个特殊字节序列)来识别文件,有时也会通过文件名的一些特性。例如,Java编译处理程序可以保证其文件名以.class结尾,并且文件起始前四个字节是 0xcafebabe,这是Java标准所定义的。下面是2.4版本内核在Intel体系下所提供的二进制处理程序,理论上,Linux灵活到足以处理几乎所有的目标文件格式。