Где размонтировать системный вызов?
В файле util-linux-2.17.2/mount/umount.c
в строке № 246 написано res = umount (node);
,
Но где же umount
функция расположена? Я так много искал, но не нашел.
2 ответа
umount - это вызов библиотечной функции с таким же именем в libc. Эта функция, в свою очередь, выполняет системный вызов umount. Как библиотечная функция вызывает ядро для выполнения определенной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в процессе. Как работают системные вызовы?
Если вы хотите узнать, где присутствует системный вызов umount, скачайте последнее ядро. Перейдите в файл fs/namespace.c. Там вы найдете
SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
а также
SYSCALL_DEFINE1(oldumount, char __user *, name)
которые определяют функции umount и oldumount.
umount
Функция является частью вашей системной библиотеки libc. Вы можете найти столько же, используя, например, objdump -T /lib/libc.so.6 | grep umount
, .text
запись в одном из выходных столбцов будет указывать, что эта функция (и ее брат umount2
) определены в этой библиотеке как символы для исполняемого кода (в отличие от глобальных переменных).
Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента кода сборки. В отличие от большинства системных вызовов, glibc не просто включает этот системный вызов в свой основной список системных вызовов Linux. Вместо этого для этого есть специальный ассемблерный код. Смысл этого скрыт за многими уровнями раскрытия макросов, и я не могу заставить препроцессор выдавать код окончательной сборки прямо сейчас.