是否可以在一个 C 程序中“创建”垃圾内存数据,然后再从另一个 C 程序中读取相同的数据?
Posted
技术标签:
【中文标题】是否可以在一个 C 程序中“创建”垃圾内存数据,然后再从另一个 C 程序中读取相同的数据?【英文标题】:Is it possible to "create" garbage memory data in one C program, and then later read in that same data in from another C program? 【发布时间】:2022-01-19 05:37:00 【问题描述】:我想知道是否可以在第一个C程序中:
-
为内存中
5
的值分配并声明一个int
打印出变量的地址(如:0x7ffee6a98ad8
)
终止
然后在第二个 C 程序中,在第一个完全执行完之后:
-
读入之前在地址
0x7ffee6a98ad8
声明的数据
打印5
的正确值
这是在 C 中的可能性吗?
如果是这样,人们将如何完成这样的任务?
我正在使用 Linux,如果这很重要的话。
【问题讨论】:
是的,但前提是您在不清除进程之间内存的操作系统上运行程序,例如 DOS(和 Windows 3.x?) 请注意,内存地址是虚拟化的。不能保证来自两个不同进程的相同指针值将引用 RAM 中的相同物理位置。 @paddy 这不在 C 规范中。 @Dai - 当然不是。 C 规范没有说明这种事情......除非它提到访问未初始化内存的行为是未指定的。 我是从系统角度讲的:Difference between logical and physical addresses 【参考方案1】:这曾经是可能的。如果您在DOS
中创建了一个大型 C 程序并使用malloc()
分配了一些 RAM,那么您实际上可以将该地址保存在某个地方(例如磁盘上)并启动另一个 C 程序并读取该内存。
我听说在深度嵌入式平台上仍然可以,但在现代多用户操作系统上,当您从操作系统分配 RAM 时,它会首先清除 RAM,因此您看不到它。
问题编辑说Linux。嗯,不,但也是。用ptrace()
打开shell进程,在shell进程中分配一些内存并写入,下一个程序可以在那里找到。这与野指针游戏完全不同,而且非常棘手。 https://techryptic.github.io/2018/04/07/Using-PTRACE-to-Inspect-&-Alter-Memory/
窗口正在关闭;他们开始收紧事情,因此您无法调试除您自己的子进程之外的任何进程,因为他们不希望出现sudo
灾难。
【讨论】:
以上是关于是否可以在一个 C 程序中“创建”垃圾内存数据,然后再从另一个 C 程序中读取相同的数据?的主要内容,如果未能解决你的问题,请参考以下文章