2014-01-29 28 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位体系结构...我将不胜感激任何有关此主题的建议。干杯

+1

您可以使用ptrace直接写入其他进程的内存。这与gdb使用的系统调用相同。 http://linux.die.net/man/2/ptrace。至于获取哪些代码实际上可以做任何有用的事情,如何重新定位符号等等,这听起来像是一项重大任务。 –

回答

-5

为了让这开辟了巨大的安全漏洞,因此它在任何健全的环境中严格禁止的。特别是更新的Linux(在x86_64上更是如此)严格将可执行内存区域与可修改区域分开。此外,现代CPU不会对其缓存之外的代码更改等作出友善的反应。也许最近会动态加载共享库。

这种操作是大多数脚本语言的工作的一部分,如Perl或Python。

+0

GDB的变更执行功能如何?您可以随时修补正在运行的应用程序。 @Magnus Reftel [链接](http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_12.html) –

+0

@StuartGordon,它*可以*(可以在调试器中完成)所有的东西)并不意味着它是任何形式的*生产*代码的好主意。 – vonbrand

相关问题