Понимание команды objcopy в книге

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

Так что можно

  1. Изменить «AIRSOFT -4 Player Split Screen.mp4» на «AIRSOFT\ -\ 4\ 4 Player Split\ Screen.mp4»
  2. Поместите $video_dirв кавычки. (?)
  3. Переименуйте файл во что-нибудь без пробелов, чтобы bash мог легко его разобрать.

В вашем случае проще всего использовать третий вариант.

0
20.11.2018, 13:27
1 ответ

Добро пожаловать в Unix и Linux SE!

Файл ELF имеет один или два двоичных заголовка и ряд именованных разделов. В Википедии есть описание структуры файла ELF, если вам интересно.

Ваша команда objcopy -O binary -j.interp /bin/ls /dev/stdoutпросто выводит содержимое секции .interpфайла /bin/lsточно так же, как -равно(-O binary)"файлу" /dev/stdout.

/dev/stdoutдолжен быть символической ссылкой на файловый дескриптор текущего процесса #1, то есть его стандартный поток вывода. По сути, это просто способ сообщить программе, которая ожидает записи вывода в именованный файл, вместо этого использовать стандартный вывод. Некоторые программы могут сделать это, если вы укажете имя выходного файла просто -,но, по-видимому, objcopyне следует этому соглашению.

Если вы видите «какую-то информацию журнала» при открытии /dev/stdout, это может означать, что эта символическая ссылка была случайно заменена какой-то программой или сценарием, запущенным от имени пользователя root. Это должно выглядеть так:

$ ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 Nov 17 23:25 /dev/stdout -> /proc/self/fd/1

В 64-битной -системе x86 ваша команда objcopyдолжна вывести что-то вроде /lib64/ld-linux-x86-64.so.2. Поскольку выходные данные не включают символ перевода строки -в конце, он может появиться в той же строке, что и следующая командная строка, что затрудняет обнаружение :

.
[my command prompt]$ objcopy -O binary -j.interp /bin/ls /dev/stdout
/lib64/ld-linux-x86-64.so.2[my command prompt]$

В 32-битном -битном x86 выводе будет что-то вроде /lib/ld-linux.so.2.

Результатом является имя файла интерпретатора программы , также известного как динамический компоновщик/загрузчик , который следует использовать с исследуемым двоичным файлом. Вы можете получить больше информации об этом, используя команды man ld.soили man ld-linuxв вашей системе.

4
28.01.2020, 02:18

Теги

Похожие вопросы