如何在c#应用程序中修改来自不同进程的变量
有一次,我需要修改另一个应用程序中的变量,以便修改其行为如何在c#应用程序中修改来自不同进程的变量,c#,C#,有一次,我需要修改另一个应用程序中的变量,以便修改其行为 我想知道是否有可能创建一个应用程序来访问运行在同一台计算机上的另一个进程并修改一些变量值。进程是本地的,应用程序是用C++编写的。您知道一些有助于实现此目的的好教程吗?您可以使用共享内存来实现此目的,但这是一个更高级的概念: 你可以看看其他的选择:我想你是在寻找WriteProcessMemory函数,看看我想他并不是想做一些漂亮的IPC。我认为他想在运行时突兀地修补一个进程映像。然后,如果启用DEP,UAC将变得疯狂,可能永远不会允许它
我想知道是否有可能创建一个应用程序来访问运行在同一台计算机上的另一个进程并修改一些变量值。进程是本地的,应用程序是用C++编写的。您知道一些有助于实现此目的的好教程吗?您可以使用共享内存来实现此目的,但这是一个更高级的概念:
你可以看看其他的选择:我想你是在寻找WriteProcessMemory函数,看看我想他并不是想做一些漂亮的IPC。我认为他想在运行时突兀地修补一个进程映像。然后,如果启用DEP,UAC将变得疯狂,可能永远不会允许它。除非可执行文件被授予做某些事情的权利。例如,抗病毒病毒和防火墙不会因为修补一个进程的内存而受到指责。我不知道一个进程修补另一个进程内存的实际要求是什么,但我知道有时候是可能的。此外,DEP有一个不同的目标。即使DEP被禁用,其他进程的内存也会受到保护。据我所知,在现代操作系统中,从另一个进程修补正在运行的进程的内存并不容易,您将不得不在运行作为Windows服务运行的某个软件时挣扎。同时,您可以使用功能强大的调试器(如IDA Prouhm)尝试内存修补程序。。。文档说:
WriteProcessMemory将数据从当前进程中指定的缓冲区复制到指定进程的地址范围。任何具有process_VM_WRITE和process_VM_OPERATION访问要写入的进程的句柄的进程都可以调用该函数。通常,但并非总是,正在对写入地址空间的进程进行调试。
@Giacomo:Yes WriteProcessMemory的主要功能是在调试过程中使用。但是没有规则阻止您在没有调试的情况下使用它。但在工作中你会遇到另一个问题——你应该在你打算修改的另一个进程中找到变量的地址,这是另一个大问题,如果变量是在堆中分配的,这将是一个困难的问题,但当然仍然是可能的。我在这个问题上没有做好充分的准备,但我想这并不容易。我无法创建一个以正常(非特权)进程运行的可执行文件,它会将以前运行的WINWORD.EXE映像地址空间弄乱。必须有一些必要条件/限制/顾虑/等等。。。有时间的话,我会深入研究的。贾科莫:这可能对你也有帮助