2014-01-29 4 views
4

Я ищу советы о том, как управлять функциями, вставляя код непосредственно в память во время выполнения. Цель состоит в том, чтобы в конечном итоге запустить запустить внешнее приложение, которое может управлять запущенными процессами для целей оптимизации. До сих пор, я пошел вниз по маршруту с помощью GDB для управления памятью, следуя этим учебное пособие:Как вводить код в выполняемый процесс с использованием C/C++

http://www.codeproject.com/Articles/33340/Code-Injection-into-Running-Linux-Application?fid=1534990&df=90&mpp=10&sort=Position&spc=Relaxed&tid=4678205

Однако довольно датирован и теперь я не могу показаться, чтобы получить это работает на 64-битном архитектура ... Я был бы признателен за любые советы по этой теме. Cheers

+1

Вы можете записать в память другого процесса, используя ptrace напрямую. Это тот же самый syscall gdb. http://linux.die.net/man/2/ptrace. Что касается получения кода, в котором на самом деле будет что-то полезное, переместите его на символы и т. Д., Это будет звучать как важное дело. –

ответ

-5

Чтобы разрешить это, огромные уязвимостей безопасности, поэтому это строго запрещено в любой разумной среде. Более новый Linux в частности (и многое другое на x86_64) строго отделяет области исполняемой памяти от изменяемых областей. Кроме того, современные процессоры не реагируют добровольно на изменения кода вне своих кешей и т. Д. Возможно, ближайшей будет динамическая загрузка разделяемых библиотек.

Этот вид операции является частью работы большинства языков сценариев, таких как Perl или Python.

+0

Что касается функционального изменения GDB? где вы можете исправлять запущенное приложение «на лету». @Magnus Reftel [ссылка] (http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_12.html) –

+0

@StuartGordon, что он * может * быть выполнен (в отладчике, из все вещи) не означает, что это хорошая идея в * производстве * кода любого рода. – vonbrand

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