使用c#从另一个进程调用一个函数

时间:2013-04-02 15:01:12

标签: c# c function winapi

我正在为自己的学习目的创建一个内存修改程序。我的一个朋友指出了我想触发的另一个程序中的函数。

该功能在另一个程序中为0x004B459C。我知道如何读写内存,但是如何从程序中触发此功能。我没有这个其他程序的来源。

我的问题是,如果我知道这个十六进制代码,我是否需要注入函数,或者我只是写一些内存来触发它?

2 个答案:

答案 0 :(得分:2)

想一想你真正想要的东西。您希望其他进程执行此功能。进程不执行代码,它是执行代码的线程。如果您希望其他进程将此函数作为其正常操作的一部分进行调用,则必须确定输入等,这将使其他进程的一个线程调用它。一般来说,任何其他方式您都将面临破坏其他流程的风险。可以将一个线程注入另一个进程并让它调用你感兴趣的函数(参见CreateRemoteThread)。如果要在消息泵线程上调用此函数,则可以inject a message hook进入另一个进程,向其发送特殊消息并从挂钩中调用它。还有一些方法(APC),但这些方法仍然更复杂,收益甚微。

答案 1 :(得分:2)

你缺少一些基本的架构基础:-)你不能简单地从另一个进程调用一个知道其地址的函数!想一想,这意味着你的程序可以获取任何程序的内存并执行代码!这将是一个混乱和一个完全不安全的环境。首先是一些基础知识: 1)windows保证你只看到自己进程的内存,操作系统(甚至Windows)最重要的原则之一就是隔离包括内存在内的进程。 2)确实考虑过权限,通常运行的任何代码必须在用户帐户下运行,另一个进程可能意味着另一个进程帐户。

答案很简单,如果你的程序是.NET / C#,那么检查.NET框架为进程间通信提供什么,这是你必须搜索的东西,每个平台,Java,windows native,.NET提供进程如何相互通信的正式方式,称为进程间通信,在.NET框架中进行检查