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

标题有点困惑。 但是,我试图做的是一些事情:

我有一个应用程序中的button(来自TButton类Button1)。 我想获得这个button的指针值,并从第二个应用程序检查它的属性。

有人可以说是否有可能? 如果不是,解释为什么?

韩国社交协会。


重新开放,因为我在互联网上获得其他信息。

如果我使用的东西? ReadProcessMemory

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

Solutions Collecting From Web of "是否有可能从应用程序访问内存到另一个? 怎么样?"

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

应用程序彼此保护,试图腐败对方。 您的电脑中有特定的硬件(MMU)。 它使事情既健壮又安全。

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

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

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

这不是不可能的…这只是非常复杂的。

就像您自己写的一样,您可以使用ReadProcessMemory来读取另一个应用程序的部分内存。 事情是找到正确的地址来阅读。 即使你会找到正确的方法来做到这一点,这可能会破坏德尔福的版本。

当然,如果你的目标应用程序“暴露”一些方法来做到这一点(通过回答一个Windows消息,例如),这是一个不同的故事。

真正取决于操作系统

通常情况下,所有新的操作系统和多用户操作系统都提供内存保护。 所以你不能访问另一个进程的内存,除非你有特权通过OS系统调用来做到这一点。

在像MSDOS这样的操作系统中,你可以访问你想要的任何地址。 用C你可以声明一个char *远指针,并为它分配一个地址。

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

如果你在远程机器上,你可以通过IPC或RPC完成你想要的东西。 你不会得到一个指针,但可以使用你最喜欢的IPC / RPC API来访问按钮属性。

我首先有一个问题,你为什么要这样做,是你的应用程序?

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

也许你可以在这个问题中找到一些信息编写一个非常基本的调试器