LINUX.ORG.RU

Модификация памяти процесса в ядре

 


0

4

Есть рабочий процесс test_proc.Мне нужно прочесть данные этого процесса содержащиеся в памяти(в куче) , да и производить различные операции с этими данными(читать/писать).
Как это сделать?
Получили указатель на
struct mm_struct
start_brk - начало сегмента кучи
end_brk - конец кучи
Как правильно работать с этими данными?
Как посмотреть данные, содержащиеся в памяти процесса?

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

g0t0 ()

Еще один яумамыхакер?

Как это сделать?

copy_from_user и copy_to_user

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

Я же писал, что я не настоящий сварщик, познания только теоретические.

1. надо получить вирутальный адрес в памяти на структуру данных
Это тебе должно обеспечить твое приложение. В идеале - передать этот адрес в какую-то структуру.

Дальше копай ядерные функции для работы с памятью, там все это должно быть.

g0t0 ()

copy_from_user и copy_to_user - в конексте этого процесса. Из остальных контекстов - уже херомантия.

Deleted ()

Вспомню детство - Artmoney. Данные процесса можно менять, хотя и ограниченно. А вообще - разве ОС не должна такую шляпу блочить?

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

если чужой процесс ptrace && read /proc/$pid/mem если твой процесс shm_open && mmap гадский хакерс хочет украсть нашу прелесть!

anonymous ()

А потом ты сюда запостишь очередную новость «пацаны, сделал на коленке игру, вот 32-битный бинарь, сорцы не покажу - хочу с нее потом денег поиметь, кому надо 64-битный бинарь - пишите на почту». а потом все полезут жаловаться, что линукс тормозит у них.

anonymous ()

А как просмотреть «сырые» данные в блоках памяти? и как сделать трасляцию адреса памяти на прикладном уровне , на данные которые содержатся в страницах памяти ядра? Например в прикладной проге адрес данных 0x55555555 а в ядре данные по адресу 0x00007f91aafcb000, как определить соответствие, что 0x55555555 в процессе, это 0x00007f91aafcb000 в ядре?

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