是否可以从应用程序访问内存到另一个应用程序?怎么样?

时间:2011-02-28 00:10:44

标签: windows delphi pointers

标题有点混乱。但是,我想要做的就是:

我在应用程序中有按钮(来自TButton类的Button1)。 我想获取此按钮的指针值,并从第二个应用程序中检查它的属性。

有人可以说是否可能?如果不是,请解释原因?

韩国社交协会


重新开放'因为我在网上得到了其他信息。

如果我使用的话? ReadProcessMemory

实施例: http://www.codeproject.com/KB/threads/int64_memsteal.aspx http://forum.cheatengine.org/viewtopic.php?p=4150408&sid=2358f118bab9f54b032d99377aed0545

5 个答案:

答案 0 :(得分:2)

应用程序彼此保护,试图相互破坏。您的PC中有特定的硬件(MMU)。它使事情既健壮又安全。

所以你不能简单地在另一个应用程序的内存中探索。您可以使用内存映射文件在应用程序之间共享内存....但这通常用于数据传输。

然而,对于Windows控件(按钮,窗口等),它们是GDI对象,您可以使用Windows API将消息发送到其他应用程序控件,以使它们执行操作或查询其属性。

或者,您可以公开跨进程API,RPC / Com / Webservices / Sockets以允许其他应用程序查询和更改状态

答案 1 :(得分:2)

有可能。只需使用Windows API函数WriteProcessMemory/ReadProcessMemory即可。传递进程的句柄和指向数据的指针。

答案 2 :(得分:1)

这不是不可能......它只是相当复杂。

就像你自己写的一样,你可以使用ReadProcessMemory来读取另一个应用程序的部分内存。问题是找到正确的地址来阅读。即使你找到了正确的方法,这可能会在delphi版本之间中断。

当然,如果您的目标应用程序“公开”了一些方法(通过回答Windows消息,例如),这是一个不同的故事。

答案 3 :(得分:0)

完全取决于操作系统

通常所有新操作系统和多用户操作系统都会提供内存保护。因此,除非您有通过OS系统调用执行此操作的权限,否则无法访问其他进程的内存。

在像MSDOS这样的操作系统中,您可以访问所需的任何地址。使用C,您可以声明一个char far *指针并为其指定一个地址。

我用它来做库之类的ncurses,直接访问视频内存,写入/读取内存的8位部分来设置/获取控制台文本属性。

如果您在远程计算机上,可以通过IPC或RPC完成所需的操作。您没有获得指针,但可以使用您喜欢的IPC / RPC API访问按钮属性。

答案 4 :(得分:0)

我首先向您提问: 你为什么要这样做并且是你的应用程序?

如果它是用于测试/调试,并且您可以在调试模式下构建目标,则可以使用调试应用程序编程接口来访问您想要的任何内容(来自调试构建应用程序)。

也许您可以在此问题中找到一些信息Writing a very basic debugger