我正在为自己的学习目的创建一个内存修改程序。我的一个朋友指出了我想要触发的另一个程序中的一个函数。
该函数在另一个程序中位于 0x004B459C。我知道如何读写内存,但是如何从我的程序中触发这个功能。我没有这个其他程序的来源。
我的问题是,如果我知道这个十六进制代码,我是否需要注入函数,或者我只是在内存中写一些东西来触发它?
想想你真正想要什么。您希望其他进程执行此功能。进程不执行代码,它是执行代码的线程。如果您希望其他进程调用此函数作为其正常操作的一部分,您将必须弄清楚输入等,这将使其他进程的线程之一调用它。一般来说,任何其他方式都会冒着破坏其他进程的风险。可以将线程注入另一个进程并让它调用您感兴趣的函数(请参阅CreateRemoteThread)。如果打算在消息泵线程上调用此函数,则可以注入消息挂钩进入另一个进程,向它发送一条特殊消息并从你的钩子中调用它。还有更多方法(APC),但这些方法仍然更复杂,收效甚微。
您缺少一些基本的架构基础知识:-) 您不能简单地从另一个进程调用知道其地址的函数!想想看,这意味着你的程序可以获取任何程序的内存并执行代码!这将是一个混乱和完全不安全的环境。首先是一些基础知识:1)windows保证你只能看到你自己进程的内存,操作系统(甚至Windows)最重要的原则之一是隔离进程,当然包括它们的内存。2)确实考虑了权限,通常任何运行的代码都必须在用户帐户下运行,另一个进程可能意味着另一个进程帐户。
答案很简单,如果你的程序是 .NET/C#,那么检查一下 .NET 框架为你提供了哪些进程间通信,这是你必须搜索的东西,每个平台,Java,windows native,.NET 都提供了一种官方方式进程如何相互通信,称为进程间通信,在.NET框架中查看