LINUX.ORG.RU

Как получить доступ к памяти пользовательского процесса из пространства ядра?


0

1

Всем привет

Хочу прочитать память процесса из пространства ядра (из модуля). Пробовал воспользоваться ptrace, но компилятор говорит «implicit declaration of function ptrace», хотя linux/ptrace.h подключен (но, кстати, там я экспортированного символа ptrace не нашёл).

Подскажите, пожалуйста, как добиться желаемого

Спасибо



Последнее исправление: hc (всего исправлений: 1)

Из ядра не надо дергать ptrace, это системный вызов, он для того и существует, чтобы вызываться из user-space. По теме: ты хочешь странного. Те куски памяти, которые пользователький процесс считает нужным пихнуть в ядро, передаются явно. Если ты хочешь отслеживать всю память пользовательского процесса из ядра, это еще более странная идея.

anonymous
()

[code=c] u8 __user *p = SOME_USERSPACE_ADDRESS; [/code]

например. И дальше как тэйлганнир предложил, да.

anonymous
()
Ответ на: комментарий от yoghurt

А поле mm в структуре процесса не в счет?

Если тебе просто нужно прочитать память вызывающего процесса, никаких сложностей не нужно. Если ты собираешься лезть в память другого процесса - я так сразу и не отвечу, что нужно делать. Но, в любом случае, это вопрос малварщика, а таким отвечать впадлу :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Отнюдь. Если я хочу знать, как это делать, то это ещё не значит, что я малварщик. Я действительно хочу влезть в память любого другого процесса. Хотя бы подскажите, куда посмотреть. Видел в ядре ptrace_attach и ptrace_readdata, но ещё их не пробовал. Тратить время на пробы?

hc
() автор топика
Ответ на: комментарий от hc

Если ты в целях самообразования, то ищи реализацию того самого ptrace. Делать системные вызовы из ядра расово неверно, но позаимствовать нижележащий механизм - вполне кошерно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ищу, спасибо. Всё ещё осложняется тем, что в разных ядрах разное API. Находишь функцию через LXR, лезешь на тестовую машину - а там такой и нет.

hc
() автор топика
Ответ на: комментарий от hc

Все, сделал через access_process_vm. Некрасиво, в новых ядрах не работает, но интерес удовлетворил.

hc
() автор топика
Ответ на: комментарий от hc

Можешь см. use_mm. Там для потоков, поэтому надо адекватно переделать для пользовательских процессов.

ttnl ★★★★★
()
Ответ на: комментарий от gag

Ух ты, здорово, для экспериментов на новых ведрах обращу внимание. Но в основном я работаю на 2.6.18 (CentOS)

hc
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.