2016-05-26 2 views
0

Я новичок в сборке и в ядре Linux. Я хочу показать 100 недавно используемых для всех процессов. (strace просто показывает для одного процесса.). Чтобы сделать это, я хочу объявить массив со 100 индексами в arch/kernel/entry_64.s, а затем отправить его адрес памяти в функцию C моего системного вызова и показать их пользователю, но я не могу объявить массив в сборке. как мне это сделать?объявить переменную в сборке в ядре Linux?

+2

Научится ходить, прежде чем бежать. Исход из взлома ядра Linux может быть не лучшей идеей. В любом случае, вам нужно знать, какие типы элементов вы хотите хранить в своем массиве. Вы можете сделать что-то вроде 'array .space 100 * item_size'. Вероятно, вы захотите также разместить его в разделе для записи. – Jester

+0

Я просто хочу сохранить номера системных вызовов и добавить новый системный вызов, чтобы показать 100 недавно использованных системных вызовов. у вас есть идея? – hamid

+0

Для чего вам нужны? Как насчет 'strace'? PS: Не забывайте, что у вас, вероятно, несколько ядер. – Jester

ответ

1

Если вы не можете использовать аудит как есть, тогда я предлагаю вам настроить путь к коду аудита.

1) сделать вызов безусловным, например, путем введения jmp auditsys до system_call_fastpath 2) изменение audit_syscall_entry по своему вкусу (это C-код в ядре/auditsc.c)

+0

благодарит за ответ! если я объявляю массив в этом файле, как я могу получить доступ к нему из моей функции syscall C? – hamid

+0

Знаете ли вы C? Просто объявите его глобальным и используйте «extern» в другом файле. Вы также можете просто создать свою собственную функцию аудита в другом файле и изменить сборку, чтобы вызвать ее вместо исходной. – Jester