Linux Исполняемый файл не запускается с ошибкой «/ usr / bin / strace: exe c: нет такого файла или каталога» на работающем strace - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно проанализировать linux двоичный исполняемый файл с использованием strace для захвата системных вызовов.

При выполнении команды: /usr/bin/strace ./005f32fffe1da3bc100e7dcd8b2f8f2c

Я получил эту ошибку:

execve("./005f32fffe1da3bc100e7dcd8b2f8f2c", ["./005f32fffe1da3bc100e7dcd8b2f8f"...], 0x7fffd9d0a120 /* 53 vars */) = -1 ENOENT (No such file or directory) fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 write(2, "/usr/bin/strace: exec: No such f"..., 49/usr/bin/strace: exec: No such file or directory ) = 49 getpid() = 3699 exit_group(1) = ? +++ exited with 1 +++

Мой тип файла - 32-разрядный двоичный файл ELF.

file 005f32fffe1da3bc100e7dcd8b2f8f2c 005f32fffe1da3bc100e7dcd8b2f8f2c: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, stripped

Мой компьютер работает на 64-разрядной версии Ubuntu, и у меня есть libc6-i386 lib32stdc + +6 lib32gcc1 lib32ncurses5 lib32z1 установлен.

1 Ответ

1 голос
/ 23 апреля 2020

Этот двоичный файл странен: он связан с использованием /lib/ld- в качестве загрузчика динамического c.

32-разрядный загрузчик динамического c i386 обычно называется /lib/ld-linux.so.2. Мы можем предположить, что ваш двоичный файл был каким-то образом поврежден.

В другом своем комментарии вы сказали, что двоичный файл не будет работать без strace (поскольку /lib/ld- не существует). Запуск двоичного файла под strace может волшебным образом заставить двоичный файл работать.

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

strace -ff /lib/ld-linux.so.2 ./005f32fffe1da3bc100e7dcd8b2f8f2c

Обновление :

Я получаю некоторые системные вызовы, подобные этому:
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) stat64("/lib/i686/sse2", 0xffe9b300) = -1 ENOENT (No such file or directory) +++ exited with 127 +++
Я не уверен, что это за системные вызовы?

Это динамический компоновщик c, пытающийся загрузить вашу программу и использующий access и stat64 системные вызовы.

как запустить следующий файл с помощью strace? Как узнать, какую библиотеку использовать в команде strace с параметром -ff на основе выходных данных файловой команды?
file mosquitto_pub mosquitto_pub: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=7ced951dc3a859a6829feb46fd5cf757a6073361, not stripped

Это 64-разрядный двоичный файл с аналогичным повреждением /lib64/l dynamici * Loader 1049 *.

Стандартный 64-разрядный загрузчик для GLIB C на x86-64 равен /lib64/ld-linux-x86-64.so.2, поэтому вам нужна команда:

strace -ff /lib64/ld-linux-x86-64.so.2 ./mosquitto_pub
...