Linux如何执行文件?
我想知道
Linux操作系统如何执行文件.
因此,通过我在网络上的搜索,我了解到每个运行可运行位的文件都可以执行.但后来我了解到有一种称为格式的ELF,它是可执行文件的Linux标准. 所以我想知道的是,为了在系统中执行代码,有权运行(runnable bit is)的文件需要什么?我可以用十六进制编辑器创建一个新文件并在内部写入90(NOP操作码)并期望它被执行吗?或者Linux是否需要某种标准格式,如ELF格式或Bash格式? 解决方法
是的,linux要求文件采用某种支持(注册)格式并执行位设置以执行它. Linux中的大多数文件都有ELF format或“shebang” format(它们的两个第一个符号是#!然后编写解释器的路径,由bash,perl,python和大多数其他脚本使用).有时允许文本文件作为shell脚本执行,例如当你从bash执行./script时(不是由内核处理,而是由bash shell处理). 有关更多详细信息,请参阅fs/exec.c file中的linux内核,从do_execve函数开始. 有内核子系统“binfmt”来注册其他可执行格式.例如, 我们可以在 binfmt_aout.c 11374 bytes binfmt_elf.c 58415 bytes binfmt_elf_fdpic.c 48256 bytes binfmt_em86.c 2710 bytes binfmt_flat.c 27054 bytes binfmt_misc.c 15175 bytes binfmt_script.c 2768 bytes binfmt_som.c 7315 bytes 如果您尝试执行的文件不支持格式,exec * syscalls将返回错误: $hexdump -C asd 00000000 07 01 09 00 11 12 13 14 0a |.........| 00000009 $strace ./asd execve("./asd",["./asd"],[/* 179 vars */]) = -1 ENOEXEC (Exec format error) .... 根据
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |