Linux не может выполнить двоичный файл на каждом исполняемом файле, который я компилирую, chmod 777 не помогает - PullRequest
2 голосов
/ 22 ноября 2010

У меня работает red с linux 7.3 (старый, я знаю), и в течение последних нескольких месяцев я изучал программирование на ассемблере, писал небольшие программы и компилировал с помощью nasm. В течение многих месяцев все шло хорошо, и теперь по неизвестной причине я не могу выполнить какие-либо программы, которые я компилирую.

nasm file.s //used to work just fine, then I'd execute ./file

теперь, когда я запускаю ./file, сначала я получаю «разрешение запрещено», чего раньше никогда не было. затем, как только я chmod +777 файл, я получаю "не могу выполнить двоичный файл".

У меня НЕТ ИДЕИ, почему это происходит, но это крайне разочаровывает, так как НИЧЕГО, что я скомпилирую, больше не будет работать.

Вход в систему как root ничего не меняет. Все предложения приветствуются, СПАСИБО !!

Ответы [ 6 ]

3 голосов
/ 22 ноября 2010

nasm не создает исполняемый файл, а просто объектный файл (как это делает gcc -c).Вам все еще нужно запустить компоновщик на нем.

Примечание: «0777 почти всегда неверно».

2 голосов
/ 22 ноября 2010

Запустите команду file в своих двоичных файлах и убедитесь, что они правильно определены как исполняемые файлы.

Также попробуйте команду ldd.Скорее всего, он потерпит неудачу по той же причине, но это стоит того.

1 голос
/ 09 апреля 2012

Это только что случилось со мной. После запуска

file <executable name>

это вывод <file name> ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

И проблема была в том, что я пытался запустить приложение 64 бит на 32 бит машине!

1 голос
/ 22 ноября 2010

«Невозможно выполнить двоичный файл» - это сообщение strerror(3) для кода ошибки ENOEXEC.Это имеет очень конкретное значение: (цитируя man-страницу для execve(2))

[ENOEXEC]          The new process file has the appropriate access
                   permission, but has an unrecognized format
                   (e.g., an invalid magic number in its header).

Так что это означает, что ваш вызов nasm не производит исполняемый файл, а скорее что-то еще.Как предлагает Джон Кугельман, команда file скажет вам, что это такое (очень вероятно, что user502515 прав, что это несвязанный объектный файл, но я никогда не использовал nasm, поэтому не знаю).

Кстати, вы сделаете себе одолжение, если будете изучать синтаксис сборки GAS / "AT & T" сейчас, а не тогда, когда вам нужно переписать код сборки для архитектуры, которая не поддерживает синтаксис Intel странного мира.И я делаю надеюсь, что вы используете сборку только для подпрограмм внутреннего цикла, которые на самом деле нуждаются в для оптимизации вручную.

1 голос
/ 22 ноября 2010

Это может произойти, если файловая система, в которой вы работаете, смонтирована с опцией noexec.Вы можете проверить это, выполнив mount | grep noexec и посмотреть, страдает ли от этого ваш текущий рабочий каталог.

0 голосов
/ 22 ноября 2010

Вы можете попробовать заглянуть в / var / log, чтобы с этого начала произошли некоторые изменения в системе.

...