Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问另一个进程的内存并调用其函数?_C++_Windows - Fatal编程技术网

C++ 如何访问另一个进程的内存并调用其函数?

C++ 如何访问另一个进程的内存并调用其函数?,c++,windows,C++,Windows,我想学习如何读取其他进程的内存,让我的程序调用其他进程的函数,而不是使用我自己的参数和东西。我在谷歌上搜索过,似乎你需要使用ReadProcessMemory之类的东西,但我还没有找到任何好的教程来解释如何使用它们。有人能给我指出正确的学习方向吗?我想在C++上(如果可能java)在Windows上(7和64位,如果这很重要)。 此外,我知道这听起来很主观,可能被用于恶意目的,但我保证我不会将从中获得的任何知识用于任何有害的原因。我纯粹是为了好玩而学习,并教自己一些新东西。您不能直接调用其他进程

我想学习如何读取其他进程的内存,让我的程序调用其他进程的函数,而不是使用我自己的参数和东西。我在谷歌上搜索过,似乎你需要使用ReadProcessMemory之类的东西,但我还没有找到任何好的教程来解释如何使用它们。有人能给我指出正确的学习方向吗?我想在C++上(如果可能java)在Windows上(7和64位,如果这很重要)。
此外,我知道这听起来很主观,可能被用于恶意目的,但我保证我不会将从中获得的任何知识用于任何有害的原因。我纯粹是为了好玩而学习,并教自己一些新东西。

您不能直接调用其他进程中的函数,因为您的进程和其他进程有不同的地址空间。解决此问题的一种方法是在进程中创建远程线程(使用CreateRemoteThread或RtlCreateUserThread),但这只允许您向函数传递一个参数。您可以尝试创建远程线程,将参数写入其堆栈,并使用SetThreadContext更改其寄存器。另一种方法是注入调用函数的DLL

另一个问题是定位要调用的函数。您可能需要为未导出所需函数的EXE或DLL加载符号

有关Windows内部构件的一般问题,请尝试询问

编辑:如果事先不知道图像文件中指令和数据的布局,在程序中很难执行您所说的(读取进程根据用户输入检查的字符串)。例如,如果您有一个crackme程序,您可以使用诸如IDA Pro之类的静态分析工具,或者在调试器下运行该程序。无论哪种方式,这些事情通常都需要人工输入,而且很难自动完成。

根据设计和定义,它们是相互隔离的。它们有单独的地址空间

操作系统保持其 进程分离并分配 他们需要的资源,以便 不太可能相互干扰 其他

他们当然可以通过某种形式的交流进行交流,但前提是他们选择这样做

然而,有时称为轻量级进程,共享它们的地址空间并可以读取彼此的数据结构

不确定,你的意思是什么

调用其他进程函数

函数
f()
可以编译成多个进程的可执行代码。进程A和进程B可以在各自的上下文中独立调用
f()


否则,进程A可以与进程B“通信”以执行某些操作,例如可以在B中的函数
g()
中实现。B可以在其上下文中执行它,并将结果“通信”回A。

我看不出这有什么好处,但无论如何。至少有两种方法可以使另一个进程调用某些内容:

1)
CreateRemoteThread()
,将在进程中创建线程

2)
QueueUserAPC()
将使该进程中的现有线程调用回调函数

如果ASLR被禁用,那么调用一个没有参数的函数就足够了。否则您还需要
VirtualQueryEx()
ReadProcessMemory()
WriteProcessMemory()


是的,这在java中是不需要做的:)

您到底想用ReadProcessMemory做什么?你的问题不够具体。我想找人给我推荐一个关于如何使用ReadProcessMemory之类的教程。我现在没有什么具体的想法。我基本上想做的是学会“破解”我自己的程序。我想做一些事情,比如制作一个程序,要求用户输入上面的字符串以继续。然后我想制作一个“机器人”,它将读取进程内存,查看字符串是什么,然后输入它本身。我只想玩类似的东西,但我不知道从哪里开始。如果线程不执行可警报的等待,则不会执行用户APC。大多数线程没有。@wj32是的,但是如果另一个进程是你的,那么你可以让它们发出警报。但是,根据OP的目的判断,这将是欺骗:)当然,应该可以在NtTestAlert创建远程线程,以便线程在恢复后立即执行APC。