Функция mprotect вызывается с 5 аргументами - PullRequest
5 голосов
/ 27 октября 2009

Согласно справочной странице 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 Ответ

7 голосов
/ 28 октября 2009

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

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

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

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

...