我需要创建一个文件,当运行命令“file filename”时,它应该显示它是一个“application/x-executable”文件
答案1
file
报告 ELF 可执行文件的 mime 类型(并且仅 ELF 可执行文件,至少在我正在查看的版本 5.22 中似乎如此)。
因此,您只需要足够的 ELF 文件头即可找到 ELF 可执行文件。例如:
printf '\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\2\0' > file
其中重要的是:
\177ELF
将其标识为 ELF 文件- 这
\2\0
意味着可执行文件(与共享库或其他 ELF 文件类型相反)。 - 第一个
\1
告诉它是小尾数法(如果将其更改为\2
,则\2\0
必须更改为\0\2
)。
其余的一切你都可以改变。例如,您可以将其缩短为printf '\177ELF.\1%10s\2\0'
.
这包括被识别为 ELF 可执行文件所需的最低限度。
(file --mime-type file
显示哑剧类型)。
或者只是从系统上的任何 ELF 可执行文件中获取这些字节:
head -c18 < /bin/ls > file
不用说,它不会使这些文件成为有效的 ELF 可执行文件。 ELF 文件头足以file
将它们识别为 ELF 可执行文件,但不足以让您的系统能够执行它们。
要制作仍然可以执行的小型 ELF 可执行文件,请参阅这家伙的尝试创建最小的“Hi World”可执行文件(适用于 x86/amd64 上的 Linux):
uudecode << EOF
begin-base64 755 file
f0VMRgEBAUhpIFdvcmxkCgIAAwABAAAAgIAECDQAAAAAuAQAAADNgOtYIAAC
ACgABQAEAAEAAAAAAAAAAIAECACABAiiAAAAogAAAAUAAAAAEAAAAQAAAKQA
AACkkAQIpJAECAkAAAAJAAAAugkAAAC5B5AECLsBAAAA66QAAADr6rsAAAAA
uAEAAADNgA==
====
EOF
或来自http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html(45 个字节!),除了以代码 42 退出之外什么也不做:
uudecode << EOF
begin-base64 755 file
f0VMRgEAAAAAAAAAAAABAAIAAwAgAAEAIAABAAQAAACzKjHAQM2AADQAIAAB
====
EOF
有趣的是,Linux 接受将其作为 ELF 可执行文件执行,即使它不是有效的可执行文件(它甚至比 ELF 标头还短),并且file
不报告application/x-executable
它(因为字节顺序字段是 0 而不是 1/2)