file
сообщает, что тип mime для исполняемых файлов ELF (и только исполняемых файлов 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
для отображения MIME-типа ).
Или просто возьмите эти байты из любого исполняемого файла ELF в вашей системе:
head -c18 < /bin/ls > file
Само собой разумеется, что это не делает эти файлы действительными исполняемыми файлами ELF. Заголовка файла ELF достаточно для file
, чтобы распознать их как исполняемые файлы ELF, но недостаточно, чтобы ваша система могла их выполнять.
Чтобы сделать небольшой исполняемый файл ELF, который все еще может выполняться, см. попытку этого парня создать самый маленький исполняемый файл «Hi World» (для Linux на x86/amd64):
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
об этом (потому что поле endianness равно 0 вместо 1/2)
Я помню этот вопрос об обмене стеками как самый подробный.
Среди этого сообщения я думаю, что ответ по мнемонике сделает свою работу. Вы можете публиковать дальнейшие обновления, если вы застряли.