Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Windows 是否可以从一个应用程序访问另一个应用程序的内存?怎么用?_Windows_Delphi_Pointers - Fatal编程技术网

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

Windows 是否可以从一个应用程序访问另一个应用程序的内存?怎么用?,windows,delphi,pointers,Windows,Delphi,Pointers,标题有点混乱。但是,我想做的是: 我在应用程序中有button(来自TButton类的Button1)。 我想获取这个按钮的指针值,并从第二个应用程序检查它的属性 有人会说这是否可能?如果不是,解释原因 Tks 重新开放是因为我在网上得到了其他信息 如果我使用像这样的东西? 读处理存储器 示例: http://forum.cheatengine.org/viewtopic.php?p=4150408&sid=2358f118bab9f54b032d99377aed0545取决于操作系统 通常,

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

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

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

Tks


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

如果我使用像这样的东西? 读处理存储器

示例:
http://forum.cheatengine.org/viewtopic.php?p=4150408&sid=2358f118bab9f54b032d99377aed0545取决于操作系统

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

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

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


如果您在远程计算机中,则可以通过IPC或RPC完成所需的操作。您不会获得指针,但可以使用您喜爱的IPC/RPC api访问按钮属性。

应用程序相互保护,以防试图破坏彼此。您的电脑中有特定的硬件来执行此操作(MMU)。它使事物既坚固又安全

因此,您不能简单地在另一个应用程序的内存中四处搜索。您可以使用内存映射文件在应用程序之间共享内存。。。。但这对于数据传输来说通常更重要

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


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

这并非不可能。。。这很复杂

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


当然,如果您的目标应用程序“公开”了一些方法(例如,通过回答windows消息),情况就不同了

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

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

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


也许你可以在这个问题中找到一些信息

我会接受你的回答,因为你先发。tks。但是tks也会修改。对不起,我需要删除accept,因为我发现这是可能的。我想从我的应用程序中包装malloc调用,从请求内存中访问可能的MVT,并检查我的应用程序中每个类中有多少对象。为什么?检查泄漏(我知道FastMM)并进行研究。就像你说的。这有点复杂。但我已经做了一部分,以防出现问题。我会再学习一点,然后把代码贴在这里。如果有人有什么想法可以帮助我学习,我准备好阅读了。你为什么不发送一些Windows消息呢?因为我需要在原始可执行文件上实现或重建或类似的东西。就像我之前说过的,这比其他事情更适合自学。在这些搜索中,我学到了很多不同的东西。