LINUX.ORG.RU

Изменение кода в памяти


0

2

Задача: есть .so, которая грузится процессом. Эта сошка должна изменить код процесса, т.е. вписать в нужные места jmp-ы. В винде я бы воспользовался WriteProcessMemory, а в линуксе? Я пробовал открывать /proc/<PID>/mem при помощи open/read/write/close. read вполне даже считывает код процесса, но вот write записывать отказывается. Пробовал вставлять ptrace(PTRACE_POKEDATA, pid, adr_strangepacket, buffer);, всё равно ноль эффекта. Что делать, уже не знаю.


Code injection?

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

Спасибо, заработало! Сколько мучался, а оказалось, всё решается так:

int pagesize = sysconf(_SC_PAGE_SIZE);
mprotect((void*)(adr_strangepacket-adr_strangepacket%pagesize),pagesize,PROT_WRITE|PROT_READ);
memcpy((void*)adr_strangepacket,buffer,6);
mprotect((void*)(adr_strangepacket-adr_strangepacket%pagesize),pagesize,PROT_EXEC|PROT_READ);

Balbes
() автор топика

mprotect, и кэш инструкций сбросить не забудь

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