Функция mprotect вызывается с 5 аргументами

Согласно справочной странице по Linux для mprotect, функция имеет 3 аргумента:

int mprotect(const void *addr, size_t len, int prot);

но при запуске ltrace в программе, которую я анализирую, я вижу, что mprotect вызывается так:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)      = 0

каковы 4 и 5 аргумент для??

Изменить: с помощью ltrace версии 0.5. и ядро ​​2.6.24-24-generic

Спасибо

1 ответ

Решение

Пять - это число аргументов, которые ltrace напечатает, если не сможет найти описание функции в файле конфигурации. (/etc/ltrace.conf по умолчанию, я думаю).

В моей системе я вижу такое же поведение, и mprotect там не найден, только SYS_mprotect.

Если вы хотите иметь второй взгляд на источник ltrace, интересующей вас является output.c, условный после "func = name2func(function_name);" - который печатает 5 аргументов в случае, если метаинформация для имени функции не найдена (и в этом случае линейный поиск внутри name2func возвращает NULL).

Таким образом, руководство является правильным, это ltrace, который является "неправильным" (цитируется "неправильно", потому что технически код работает так, как должен, хотя, вероятно, значения в конфигурации должны быть исправлены)

Другие вопросы по тегам