Я новичок в сборке и в ядре Linux. Я хочу показать 100 недавно используемых для всех процессов. (strace
просто показывает для одного процесса.). Чтобы сделать это, я хочу объявить массив со 100 индексами в arch/kernel/entry_64.s
, а затем отправить его адрес памяти в функцию C моего системного вызова и показать их пользователю, но я не могу объявить массив в сборке. как мне это сделать?объявить переменную в сборке в ядре Linux?
ответ
Если вы не можете использовать аудит как есть, тогда я предлагаю вам настроить путь к коду аудита.
1) сделать вызов безусловным, например, путем введения jmp auditsys
до system_call_fastpath
2) изменение audit_syscall_entry
по своему вкусу (это C-код в ядре/auditsc.c)
благодарит за ответ! если я объявляю массив в этом файле, как я могу получить доступ к нему из моей функции syscall C? – hamid
Знаете ли вы C? Просто объявите его глобальным и используйте «extern» в другом файле. Вы также можете просто создать свою собственную функцию аудита в другом файле и изменить сборку, чтобы вызвать ее вместо исходной. – Jester
Научится ходить, прежде чем бежать. Исход из взлома ядра Linux может быть не лучшей идеей. В любом случае, вам нужно знать, какие типы элементов вы хотите хранить в своем массиве. Вы можете сделать что-то вроде 'array .space 100 * item_size'. Вероятно, вы захотите также разместить его в разделе для записи. – Jester
Я просто хочу сохранить номера системных вызовов и добавить новый системный вызов, чтобы показать 100 недавно использованных системных вызовов. у вас есть идея? – hamid
Для чего вам нужны? Как насчет 'strace'? PS: Не забывайте, что у вас, вероятно, несколько ядер. – Jester