是否可以在一个 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 程序中读取相同的数据?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA性能优化总结

python进阶之垃圾回收

JVM垃圾回收机制

写java程序自己是否不用管理内存了???

Java内存管理——垃圾收集

JavaScript的垃圾回收机制与内存泄漏