Меню

Ошибка попытка послать бинарный файл

Когда я захожу через SSH, я вижу только это …

-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected

Я ничего не мог сделать здесь. Такие команды, как halt , poweroff , reboot , вернут command not found .

Как я могу это исправить? Я использую Debian Squeeze Linux

изменён Der Hochstapler68k

Обычно это сообщение об ошибке означает, что Linux не распознает файл как сценарий оболочки или как исполняемый файл.

Обычно причиной является запуск исполняемого файла в неправильной архитектуре — если вы попытаетесь запустить исполняемые файлы x86 на процессоре ARM, появится это сообщение.

Возможно, файл /usr/bin/id перезаписан?

Попробуйте запустить его, используя ./executablefilename вместо использования sh executetablefilename. В конце концов, это не скрипт оболочки.

ответ дан RidDeBakTiYar306

Проблема заключается в запуске двоичного файла для другой архитектуры процессора.
Вы можете использовать objdump (из binutils) для проверки архитектуры двоичных файлов.
Вы можете использовать uname для проверки архитектуры машины.

Например, я столкнулся с этой ошибкой «невозможно выполнить двоичный файл» при установке FF.Communicator — плагина Firefox для Chrome (поэтому я могу запускать страницы, которые используют Java-апплеты).

  • objdump показывает, что двоичный файл является 64-битным elf64-x86-64
  • uname показывает, что моя машина 32-битная i686

    $./FF.Communicator bash:./FF.Communicator: невозможно выполнить двоичный файл $ uname -mpio i686 i686 i386 GNU/Linux $ objdump -a./FF.Communicator./FF.Communicator: формат файла elf64-x86-64./FF.Communicator

  • objdump на работающем бинарнике на моей машине показывает, что это 32-битный elf32-i386

    $ objdump -a /bin /ls /bin /ls: формат файла elf32-i386

Используя эти инструменты, вы можете проверять архитектуры машин и двоичных файлов — не только архитектуры Intel, но и любого процессора.

Для пользователей Mac OSX вы можете узнать информацию об архитектуре определенного файла, используя команду «file»:

$ file filename_here

Я делаю некоторые дикие предположения здесь, но похоже, что происходит следующее:

  1. Вы входите через SSH, вызывая bash для запуска ~/.profile или ~/.bashrc для настройки вашей среды (это нормально).
  2. В какой-то момент он пытается выполнить /bin/id чтобы получить ваш uid, который завершается неудачно, вызывая ошибку целочисленного выражения и завершая работу сценария, прежде чем он сможет настроить ваш $PATH .
  3. Поскольку ваш $PATH не установлен, bash может выполнять команды только с указанным полным путем.

Используйте export PATH=/bin:/usr/bin:/sbin:/usr/sbin чтобы исправить проблему $PATH пока не сможете устранить основную причину сбоя /bin /id.

ответ дан Darth Android34k

двоичный файл состоит из машинных инструкций, которые процессор может понять.
Ваша операционная система не означает, что один и тот же исполняемый файл будет работать.
перемещение вперед и назад между набором команд процессора, совместимым с, обычно будет работать хорошо, если они несовместимы, процессор не сможет понять инструкции.

Это означает, что вы пытаетесь выполнить двоичный файл, используя ваш bash-скрипт, который не предназначен для запуска так, как вы пытаетесь. Это уже бинарный файл, и вы пытаетесь проанализировать и запустить его $ SHELL.

в очень простом примере, если вы попытаетесь запустить команду `w ‘, как

$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file

Точно так же вы можете использовать тот же метод или как он выглядит из вашего фрагмента кода.

В то время как для остальных команд все эти команды останова, выключения, перезагрузки и т.д. Являются командами, принадлежащими корню, и для выполнения и выполнения требуемой операции требуются привилегированные привилегированные права пользователя. обычные пользователи не могут запускать их. Другое объяснение состоит в том, что эти команды размещены в /sbin / и / usr /sbin, которых может не быть в вашей переменной $ PATH (которая используется для проверки команд в вашем распоряжении)

ответ дан Nasir Mahmood 1

Вы используете неверную версию установщика, например, 64-разрядную машину и пытаетесь установить 32-разрядную версию установщика.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками linux bash ssh debian.

В операционной системе Linux при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой: 


bash: /путь/до/файла: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла

 

 Если у вас англоязычная локаль, то ошибка будет примерно такой:

 bash: ./program: cannot execute binary file: Exec format error

 В самой ошибке вместо /путь/до/файла и ./program будет указан путь до файла программы, который вы хотите запустить.

  •  Причинами данной ошибки могут быть:
  • попытка запустить 64-битный файл на 32-битной системе
  • файл скомпилирован для другой архитектуры (например, для ARM, а вы пытаетесь запустить его на ПК)
  • вы пытаетесь выполнить не исполнимый файл, а ссылку
  • файл размещён в совместной (shared) папке

Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту file, после которой укажите путь до файла:

 file /путь/до/программы

 Пример вывода: 


program: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=03ada11d91d298913990bfc074ccc3a380d26b69, with debug_info, not stripped

 Здесь мы видим, что файл предназначен для 64-битной системы, об этом говорит запись 64-bit, для процессора с архитектурой x86-64.

 Ещё один пример: 


program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped

 Этот файл для 32-битных систем, для процессора с архитектурой ARM EABI4.

Если вы не знаете, какой битности ваша система, то выполните команду: 


uname -m

 Для 64-битных систем будет выведено x86_64, а для 32-битных – x86

О разрядности дистрибутивов Linux и о программ 

На компьютер с 32-битным процессором вы можете установить только 32-битную операционную систему и в ней запускать только 32-битные программы.

На компьютер с 64-битным процессором вы можете установить как 64-битную ОС, так и 32-битный Linux. В случае, если вы установили 64-битный дистрибутив Linux, то в нём вы можете запускать и 64-битные программы и 32-битные. А если вы установили 32-битный дистрибутив, то в нём возможно запускать только 32-битные программы.

Итак, если у вас 32-битная система, а файл для 64-битной системы или даже для ARM архитектуры, то у вас следующие варианты:

  • скачать файл подходящей для вас битности и архитектуры
  • если вы самостоятельно компилировали файл из исходного кода, то заново скомпилируйте для процессора вашей архитектуры

Запуск ARM файлов в Linux 

Часто можно запустить исполнимые образы ARM на amd64 системах если установить пакеты binfmt-support, qemu, и qemu-user-static:

 sudo apt install binfmt-support qemu qemu-user-static

Заключение

Итак, ошибка формата выполняемого файла с невозможностью запустить бинарный файл возникает из-за несоответствия программы операционной системе или архитектуре процессора. Эта проблема не должна возникать, если вы установили программу из исходных репозиториев (кроме случаев неправильной настройки источников репозитория). При возникновении этой проблемы поищите файл, подходящий для вашей архитектуры или скомпилируйте файл из исходных кодов под архитектуру вашей операционной системы.

Понравиласть статья? Жми лайк или расскажи своим друзьям!

Похожие новости:

Linux (видео уроки) Обзор Linux видео уроки 1. Введение в ОС Linux/Unix Ubuntu. Видео linux уроки 2017 года. gnu linux operating system. Linux администрирование и linux уроки, linux скачать. To linux distros for 2017 and обзор linux mint 18 1.

Linux mint 19.1 (скачать) Развиваемый сообществом дистрибутив Linux mint, основанный на Ubuntu и Debian, который ставит целью предоставить пользователю «современную, элегантную и удобную операционную систему, которая одновременно является мощной и

Стала доступна для скачивания финальная версия Linux Mint 19 сразу со всеми основными вариантами рабочих столов: Cinnamon, MATE и Xfce. Если вы только начинаете знакомиться с удивительным миром Linux, то поясню: Cinnamon – это самый передовой и

Rosa Linux — Linux из России. ROSA Fresh. Сделана для дома. Создана для вас. ROSA Fresh — это современная отечественная операционная система Linux, создаваемая сообществом и легально доступная всем желающим совершенно бесплатно и без регистрации.

Иногда программа не запускается из-за отсутствия библиотеки определённой версии, при этом в системе может присутствовать эта самая библиотека, но другой версии. Чтобы было понятно, после одного из обновлений (в Arch Linux) перестал запускаться

Новая версия Deepin 15 включает в себя новый дизайн Центра Управления и компьютера, он имеет новый размытый и прозрачный стиль, также включены новые взаимодействия для угловой навигации и оконного менеджера наряду с выбором обоев рабочего стола,

Новые возможности в Linux Mint 19.3. Linux Mint 19.3 — это долгосрочный релиз поддержки, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и приносит уточнения и множество новых функций, чтобы сделать

Linux Mint 19 – это релиз с длительной поддержкой до 2023 года. Он поставляется с обновлённым программным обеспечением и приносит усовершенствования и множество новых функций, чтобы сделать ваш рабочий стол более удобным. На момент написания, Linux

Linux Mint 18.1 Serena Cinnamon (Подробный обзор) Подробный обзор Beta версии Linux Mint 18.1 Serena Cinnamon Linux Mint команда объявила о выпуске обновления для 18.x филиала проекта. В новой версии, Linux Mint 18.1, доступен в двух версиях

Linux mint 18.2 Основные новшества Linux Mint 18.2 (MATE, Cinnamon, KDE и Xfce): В состав включены новые версии десктоп-окружений MATE 1.18 и Cinnamon 3.4, оформление и организация работы в которых продолжает развитие идей GNOME 2 — пользователю

Какой линукс выбрать? Какой linux лучше? Сегодня мы разберемся какие дистрибутивы линукс бывают и какой из них самый лучший. Первое что нужно понять: дистрибутивов линуксов очень много, больше 100. Но, как и в любой экосистеме, тут существует

Начало работы с btrfs для Linux. Файловая система B-tree — это файловая система и менеджер томов, объединенные в одно целое. Он предлагает много перспектив для доставки расширенного набора функций файловой системы в Linux.

Команда с гордостью объявляет о выпуске Linux Mint 20” Ulyana » Cinnamon Edition. Linux Mint 20-это долгосрочный релиз поддержки, который будет поддерживаться до 2025 года. Он поставляется с обновленным программным обеспечением и приносит

Linux Mint 20.2 Ума (Uma) Скачать. Самая большая новость в этом месяце-предстоящий выпуск Linux Mint 20.2 “Uma”. Мы надеемся, что БЕТА-версия будет готова к середине июня.

Новости Linux Январь 2017. НОВОСТИ LINUX, UBUNTU 2017 ЯНВАРЬ В Telegram появилась возможность удалить отправленное сообщения В мессенджере Telegram появилась возможность удалить отправленное сообщения. И если раньше оно удалялось только с одной

Обзор Solus 3 с рабочим окружением Budgie Этот релиз включает в себя из-из-коробки поддержка, универсальных программных пакетов для Linux. Поддержка снимков снимает давление со стороны поставщиков программного обеспечения для конкретной платформы,

Все три издания Linux Mint 19 (Cinnamon, MATE, Xfce) в настоящее время доступны для публичного тестирования. Официально новую бета версию планируют представить 4 июня 2018 года. Хотя перед началом публичных тестирования уже отловлено и исправлено

Преимущества и проблемы беспилотных летательных аппаратов БПЛА или беспилотный летательный аппарат представляет собой самолет с дистанционным управлением. Он может работать удаленно в режиме реального времени или запрограммирован для автономного

Новая ICQ (Windows, Linux, Mac, Web) Что нового: Mail Group представила обновленный мессенджер ICQ. Новая версия знаменитой «аськи» стала «умной, быстрой, гибкой». Разработчики добавили несколько интересных функций, которые

RFRemix 26 основанный на Fedora 26 (Russian Fedora) Официально объявили о выходе Fedora 26. Это проект по поддержке пользователей и разработчиков открытого ПО в России. Основная цель проекта — обеспечить, чтобы Fedora полностью отвечала

MayaNash

1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

1

Ошибка при записи в бинарный файл

09.05.2014, 11:09. Показов 1767. Ответов 8

Метки нет (Все метки)


Задание — записать в бинарный файл последовательность из N байт вида «00001111 11110000 00001111 …».
Почему-то 11110000 записывается неправильно. Это 240 в десятичной и F0 в шестнадцатеричной системе, но при считывании получается FFFFFFF0. И дублируется последний байт. Почему?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <fstream>
using std::ifstream;
using std::ofstream;
using std::cin;
using std::cout;
using std::endl;
using std::ios;
 
void main()
{
    int n;
    setlocale(LC_ALL,"rus");
    cout << "Введите N: ";
    cin >> n; // вводим количество байтов
 
    char byte[2] = {15,240};
    ofstream fout("binfile",ios::binary);
    for (int i = 0; i < n; i++)
        fout.write(&byte[i%2], 1);
    fout.close();
 
    ifstream fin("binfile",ios::binary);
    char ch;
    while (!fin.eof())
    {
        fin.read(&ch,1);
        cout << std::hex << (int)ch << " ";
    }
    cout << endl;
    fin.close();
    system("pause");
}



0



7275 / 6220 / 2833

Регистрация: 14.04.2014

Сообщений: 26,871

09.05.2014, 11:14

2

У тебя массив byte фиксированной длины. Для чего вводить n? А если введут 10? Будет чтение за границами массива. И почему byte[i%2], а не byte[i]?



0



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:31

 [ТС]

3

Обрати внимание, что если введут 10, то все будет нормально. i%2 — это остаток от деления на 2, то есть или 0 или 1. Так что выхода за границы по сути быть не может. Вопрос вообще не в этом.

Добавлено через 2 минуты
Задание конечно глупое, но как ни крути, в файле должны чередоваться 2 байта — 15 и 240. И всего должно быть N байтов.



0



3254 / 2056 / 351

Регистрация: 24.11.2012

Сообщений: 4,909

09.05.2014, 11:39

4

Керра, пишется и читается все верно. Второй байт — действительно 0xF0. Но вспомним, что char — знаковый. Т.е. это значение интерпретируется как -16. Приводим к int — получаем то же значение -16, но уже в ячейчке размером 4 байта. Что в дополнительном коде как раз 0xfffffff0.



0



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:43

 [ТС]

5

Ясно, и что делать? abs не помогает



0



7275 / 6220 / 2833

Регистрация: 14.04.2014

Сообщений: 26,871

09.05.2014, 11:44

6

Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

Лишний байт у тебя выходит из-за того, что флаг конца файла устанавливается только после неудачного чтения, поэтому одна лишняя итерация выполняется после чтения последнего символа. Тебе нужно после read(), например peek() вызвать, чтобы флаг был установлен. Или ещё что-то придумать, может читать исходя из размера файла.



1



0x10

3254 / 2056 / 351

Регистрация: 24.11.2012

Сообщений: 4,909

09.05.2014, 11:48

7

Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

Керра, в выводе можно вот такую загогулину воткнуть.

C++
1
static_cast<int>(static_cast<unsigned char>(ch))



1



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:52

 [ТС]

8

nmcf, 0x10, спасибо, помогло



0



nmcf

7275 / 6220 / 2833

Регистрация: 14.04.2014

Сообщений: 26,871

09.05.2014, 11:53

9

У меня вот так работает:

C++
1
(int)(unsigned char)ch



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.05.2014, 11:53

9

When i try to send my app to App Store, i’m getting this error:

The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seems to have been built whit Apple’s linker.

i don’t know where is the error in my app

asked May 29, 2014 at 15:29

user2783443's user avatar

2

I had the same problem.
My solution :
Remove arm64 from Valid Architectures, the last IPA that I uploaded didn’t have arm64 so I compared the LC_ENCRYPTION_INFO

I used this command to get LC_ENCRYPTION_INFO

otool -arch all -Vl YOURAPP.app/YOURAPP | grep -A5 LC_ENCRYP

Result with ARM64:

    
      cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
    cryptoff  16384
    cryptsize 2801664
    cryptid   0
        pad   0

Result without ARM64

          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13

I hope this will help you, if someone know why remove ARM64 help to resolve this, the response interest me too.

skywinder's user avatar

skywinder

21.1k15 gold badges92 silver badges123 bronze badges

answered Jun 6, 2014 at 14:20

Hikosei's user avatar

HikoseiHikosei

1831 silver badge11 bronze badges

2

When i try to send my app to App Store, i’m getting this error:

The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seems to have been built whit Apple’s linker.

i don’t know where is the error in my app

asked May 29, 2014 at 15:29

user2783443's user avatar

2

I had the same problem.
My solution :
Remove arm64 from Valid Architectures, the last IPA that I uploaded didn’t have arm64 so I compared the LC_ENCRYPTION_INFO

I used this command to get LC_ENCRYPTION_INFO

otool -arch all -Vl YOURAPP.app/YOURAPP | grep -A5 LC_ENCRYP

Result with ARM64:

    
      cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
    cryptoff  16384
    cryptsize 2801664
    cryptid   0
        pad   0

Result without ARM64

          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13
--
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
    cryptoff  16384
    cryptsize 2375680
    cryptid   0
Load command 13

I hope this will help you, if someone know why remove ARM64 help to resolve this, the response interest me too.

skywinder's user avatar

skywinder

21.1k15 gold badges92 silver badges123 bronze badges

answered Jun 6, 2014 at 14:20

Hikosei's user avatar

HikoseiHikosei

1831 silver badge11 bronze badges

2

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка попытка использовать имя переменной нулевой длины
  • Ошибка последовательного порта 1 no such file or directory