Почему strace показывает, что системный вызов =?

Проблема может заключаться в том, что Wireshark не преобразует IP-адреса в имена хостов, а наличие фильтра имен хостов не включает это преобразование автоматически.

Чтобы фильтр имен хостов работал, включите разрешение DNS в настройках. Для этого перейдите в меню «Вид > Разрешение имен» и включите необходимые опции «Разрешить *адреса» (или просто включите их все, если не уверены :).

2
01.07.2019, 11:34
2 ответа

Это означает, что системный вызов был прерван и не (не смог )вернуть значение. Пример приведен в руководстве strace:

Interruption of a (restartable) system call by a signal delivery is
processed differently as kernel terminates the system call and also
arranges its immediate reexecution after the signal handler
completes.

   read(0, 0x7ffff72cf5cf, 1)     = ? ERESTARTSYS (To be restarted)

Похоже, что ваш системный вызов readздесь был завершен и не имеет возвращаемого значения. (В отличие от вашего системного вызова, readздесь было запланировано повторное -выполнение.)

Другие системные вызовы, которые не возвращают (, например, exit_group), также показывают?:

~ strace -e exit_group /bin/true
exit_group(0)                           = ?
+++ exited with 0 +++
6
27.01.2020, 21:50

Это означает, что ваш straceне знает оsyscall_0x224(и я [1] )не знаю, и не знает, какое значение возвращается и как его декодировать.

Вы можете посмотреть исходник здесь:

        if (sys_res & RVAL_NONE)
                tprints("= ?");

Если вы скомпилировали какой-то модуль, добавляющий еще один системный вызов, не ожидайте, что strace узнает об этом по волшебству.

[1] Мне не удалось найти ни одного системного вызова с nr = 0x224/548 (x32pwritev2является последним = 547 ).

3
27.01.2020, 21:50

Теги

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