2015-10-24 2 views
1

Я подключаю exec в режиме ядра (смените имя system_call_table __NR_execve на мою функцию). Я хочу проверить код сборки ELF. Если это вредно, я вернусь напрямую, не выполняя его.В режиме ядра Linux, как выполнить команду пользовательского пространства

Я пишу модуль linux. В режиме ядра Linux я хочу использовать objdump для разборки файла ELF. Я хочу перейти в режим пользователя для выполнения objdump и вернуться в режим ядра. Это возможно? Спасибо.

+1

Звучит странно. Для чего вам это нужно? Возможно, это может быть сделано по-другому, без запуска приложения из пространства ядра. Поэтому, пожалуйста, объясните нам всю задачу, поэтому, возможно, мы придумаем еще более подходящее и элегантное решение. –

+0

Сэм Проценко, я зацепил exec в режиме ядра (смените имя system_call_table __NR_execve на мою функцию). Я хочу проверить код сборки ELF. Если это вредно, я вернусь напрямую, не выполняя его. Есть ли у вас другая идея? – siyuan

+0

Было бы намного лучше, если бы вы могли сделать то же самое в пользовательском пространстве. Просто для меня это не похоже на задачу ядра. Но я могу ошибаться. –

ответ

2

Возможно, вы можете разделить проект на две части: модуль ядра и приложение для пользовательского пространства. Таким образом, вы можете подключить execve() к ядру, а затем сообщить вашему приложению о запуске hook, затем выполнить дизассемблирование и проверку в вашем приложении, отправить полученный результат обратно в модуль ядра, а затем продолжить или разбить execve().

Если вы все еще хотите запустить objdump из ядра - зарегистрируйтесь call_usermodhelper().

См. Также this связанные вопросы.

+0

Спасибо, Сэм Проценко. Это очень полезно. Я хочу использовать call_usermodhelper(). Я собираюсь написать сценарий пользовательского пространства (или программу C), чтобы проверить код сборки, а затем отправить результат (0 или 1) обратно в ядро. Итак, мой следующий вопрос: как я могу получить значение в режиме ядра? написать в файл? – siyuan

+1

Вы можете просто запустить свое приложение для пользовательского пространства в качестве демона и не использовать 'call_usermodhelper()'. Что касается взаимодействия между ядром и пользовательским пространством: здесь есть много вариантов. Пожалуй, проще всего использовать возможности ** character device driver ** для обмена некоторыми данными между ядром и пользовательским пространством. Другой возможный и простой вариант - создать некоторые ** sysfs ** файлы/файлы в вашем модуле ядра и прочитать/записать в них из приложения для пользовательского пространства. –

+0

Сэм Проценко, не могли бы вы привести пример переноса данных из пользовательского пространства в пространство ядра? Большое спасибо. – siyuan

Смежные вопросы