Как разобрать системный вызов

Если у меня есть виртуальный адрес системного вызова, могу ли я разобрать этот системный вызов? Я хочу сделать это при работающем ядре, чтобы узнать, какие все адреса обрабатываются конкретным системным вызовом во время работы.

Я использую 32-битное ядро ​​​​2.6.38 (x86).


person user567879    schedule 14.12.2011    source источник
comment
Я прочитал это несколько раз, и я до сих пор не могу понять, что вы имеете в виду. Каков адрес системного вызова?   -  person David Schwartz    schedule 14.12.2011
comment
@DavidSchwartz ЧТОБЫ узнать, повлиял ли руткит на систему, просмотрев дизассемблированные инструкции.   -  person user567879    schedule 14.12.2011
comment
Какой процессор? 32 бит недостаточно информации   -  person Paul R    schedule 14.12.2011
comment
Глядя на это, а также ответы и комментарии ниже, кажется, что это может быть лучше на unix.stackexchange.com.   -  person Chris J    schedule 14.12.2011
comment
@PaulR У меня есть corei3, на котором работает Debian Squeeze с пользовательским ядром Linux 2.6.38 (32-разрядная версия). Я мог легко получить виртуальный адрес системного вызова (файл System.map/модуль ядра). Могу ли я разобрать системный вызов, размещенный на этом конкретном виртуальном адресе. Я понял, что GDB может сделать это gdb /boot/vmlinux-2.4.* /proc/kcore. Но в моем Debian у меня есть только vmlinuz, а не vmlinux. Есть ли другой способ?   -  person user567879    schedule 14.12.2011
comment
ОК - я добавил отредактированный ваш вопрос, чтобы указать, что он специфичен для x86, и добавил тег x86   -  person Paul R    schedule 14.12.2011
comment
@ user567879: хороший руткит (особенно тот, который использует виртуализацию) не будет напрямую виден в уязвимой системе и будет обнаружен только косвенно, наблюдая за нарушениями во времени, производительности и, возможно, некоторыми сбоями.   -  person Alexey Frunze    schedule 14.12.2011


Ответы (1)


Я не уверен, что ваш вопрос имеет большое значение.

Подробнее о системных вызовах, ядра, операционные системы, linux и ядро Linux

По сути, системный вызов — это (с точки зрения приложения) атомарная операция, реализуемая одной машинной инструкцией (int 0x80, syscall и т. д.) с несколькими бухгалтерскими инструкциями до (например, загрузка аргументов системного вызова в регистры) и после (например, установка errno). Когда это происходит, управление переходит в ядро ​​с (своего рода) другим адресным пространством и другим защитное кольцо; вот список системных вызовов linux

Настоящий код, выполняющий системный вызов, находится внутри ядра. Вы можете получить код ядра Linux на kernel.org.

См. также инструкции по сборке Linux и asm.sourceforge.net

Чтобы понять, что система вызывает для данного приложения или процесса, используйте strace.

person Basile Starynkevitch    schedule 14.12.2011
comment
Извините, что не ясно изложил вопрос. Я хочу разобрать конкретный системный вызов для работающего ядра, чтобы узнать, произошла ли атака руткита или нет. - person user567879; 14.12.2011
comment
Как я уже объяснил вам, этот вопрос вообще не имеет смысла. Машинный код для системного вызова — это, по сути, одна машинная инструкция (syscall), и вы не можете ее дизассемблировать. Пожалуйста, найдите время, чтобы прочитать все ссылки, которые я вам дал. - person Basile Starynkevitch; 14.12.2011
comment
Я понял, что GDB может сделать это с помощью gdb /boot/vmlinux-2.4.* /proc/kcore. Но в моем Debian у меня есть только vmlinuz, а не vmlinux. Есть ли другой способ? Эта ссылка дает объяснение symantec.com/connect /статьи/ - person user567879; 14.12.2011
comment
Вы неправильно поняли. Если вы хотите понять, как реализованы системные вызовы, изучите ядро ​​Linux. Его исходный код свободен (GPLv2), и вам рекомендуется его изучить. Это очень сложно, и несколько хороших книг объясняют это. Действительно, если ваше ядро ​​скомпрометировано, ваша машина зомбирована... - person Basile Starynkevitch; 14.12.2011
comment
Но как я могу получить дамп кода сборки, когда я запускаю gdb /boot/vmlinux-2.4.* /proc/kcore (gdb) disass sys_read с помощью gdb? - person user567879; 14.12.2011
comment
Куда вы смотрите: внутри пространства ядра или внутри пространства пользователя... ??? (действительно есть какой-то способ отладки ядра, и в этом есть прогресс). Большинство системных вызовов, обрабатывающих код ядра, написаны на C. - person Basile Starynkevitch; 14.12.2011
comment
давайте продолжим это обсуждение в чате - person user567879; 14.12.2011