-38 в eax для записи syscall, по-видимому, является ENOSYS (функция не реализована) и помещается туда syscall_trace_entry в arch / x86 / kernel / entry_32.S.Я полагаю, можно с уверенностью предположить, что он всегда будет там при входе в системный вызов, однако он также может быть там при выходе из системного вызова , если системный вызов возвращает ENOSYS.
Лично я всегда простоотслеживал, вхожу ли я во вход или выход из системного вызова при использовании ptrace, хотя я также видел некоторый код, использующий ENOSYS.(Я предполагаю, что вы используете ptrace) Я думаю, что это не сработает, если процесс окажется внутри системного вызова при подключении к нему, но мне повезло, что я не столкнулся с этой проблемой.
Я быстро взглянул на источники strace и думаю, что он также отслеживает состояние, поскольку в нем был комментарий: «Мы подключаемся к уже запущенному процессу. Попробуйте выяснить состояние процесса в системных вызовах,хорошо справиться с первым событием ".и чуть позже после этого он сказал: «Процесс спит в середине системного вызова. Подделка события входа системного вызова.».
Короче говоря, значение не может быть безопасно использовано, чтобы отличить запись от выхода,Тем не менее, я не уверен, что отслеживание этого вручную - лучший метод, так как у меня действительно нет никакого источника, который определенно сказал бы вам использовать эту технику, извините.:)