从程序中删除内存[关闭]


-1

假设你的program.exe占用了100kb的内存。你能将它减少到0kb所以它理论上不能运行吗?Taskmgr.exe可能会说它正在运行,但如果它减少到0kb,那么它的功能就无法跟进。

那么,如果程序达到0kb,它甚至会列在taskmgr下吗?

[编辑]我假设传统的taskkill或C ++ equivilent(忘了。我正在重新学习C ++)被阻止并且不起作用。

[编辑2]我的脚本只是一个简单的批处理脚本。它基本上看起来像这样:

@echo off
:x
taskkill /f /im program.exe
goto x

我很好奇:你的剧本究竟做了什么?你愿意把它贴在某个地方吗?(如果它很小,你可以把它放在你的问题;如果它非常大,使用一些pastebin。)
— Blacklight Shining 2013年

1
一个问题:为什么?
— 烟灰缸2013年

我正在重新学习C ++。我还没有学过内存分配。我的学校阻止任务经理,有时当我们的旧计算机开始放慢速度时,我需要它。我还没有尝试过独立的任务管理器,但是我可以从命令行执行此操作。他们没有阻止command.com无论如何,我试图想到一种替代方法来关闭程序而不是传统方法。
— Andrue 2013年

Answers:


3

如果你以某种方式设法让内核强制释放已经给予程序的内存,那么只要它试图访问该内存就可能崩溃。这样的事情很可能是不受支持的:程序不应该继续检查以查看它们被授予的内存是否仍然是他们使用的,并且程序在这样的环境中运行是非常困难的。

任何编写良好的程序都会在尝试使用它们之前检查堆分配是否成功。如果一个被拒绝,程序可以检测到这个(在C中,malloc()将返回一个空指针)并选择如何处理它(例如,它可能会打印错误消息并退出,或者它可能会继续尝试获取内存)。为了知道如果无法获得任何内存,你的限制性程序会做什么,我们需要访问大量文档或其源代码。

让我们说内核无论如何都会这样做。它为程序分配了一块内存foo,用它来存储一些数据。过了一会儿,内核会抢回内存,可能会将其重新分配给其他程序(甚至是操作系统)。怎么foo应该现在得到它的数据?如果它试图访问曾经拥有其数据的内存块,系统应该杀死它 - 这是正确的!内存现在可能包含另一个用户的敏感数据,在这种情况下允许foo读取它将是一个安全漏洞。如果它被分配给作为另一个用户或操作系统运行的程序,允许foo写入它可能会导致任何数量的不良和不可预测的事情发生。

当然,堆栈中也存储了变量。我从来没有听说过检查这些分配是否成功的方法; 一切似乎只是假设它们是。我猜每个程序会自动获得一些最小的内存量; 如果该内存不可用,系统将拒绝启动该程序。


什么是内核重新分配内存到另一个进程,应用程序试图写入它?您可以破坏正在运行的另一个程序,甚至是操作系统。
— Keltari 2013年

@Keltari我编辑了我的答案来解释这一点。你是绝对正确的。这正是系统永远不允许程序读取或写入其他程序内存的原因。
— Blacklight Shining 2013年

我没有意识到你可能搞砸了操作系统。当你说打破一个程序时,你指的是它崩溃了吗?
— 安德鲁2013年

它可能会崩溃。发生的事情取决于正在发生的一切; 程序执行的地方,对其内存的精确修改,以及所有内容的时间安排。如果内存只是在没有警告的情况下被释放,那么程序会在以后尝试使用该内存时崩溃。如果系统允许任意覆盖内存,则攻击者可能会覆盖正在运行的程序的内存root并获得root访问权限。
— Blacklight Shining 2013年

-2

并不是的。我对Windows的体系结构不太熟悉,但在Unix上,你正在寻找renice命令。这减少(或增加)为CPU进程分配CPU时间的优先级。例如,在良好值为-20时,程序将分配所有可能的CPU时间,而在+20时,只有在没有其他进程需要CPU时才会运行。

(如果您希望进程占用零CPU时间,可以SIGSTOP通过kill -STOP命令发送信号强制暂停它,并SIGCONT使用它恢复它kill -CONT。)


1
-1:renice减少进程的调度时间; 它不会影响内存分配。
— Blacklight Shining 2013年

我知道......请重新阅读我的答案...
— user55325 2013年

是?我贬低它是因为它只涉及CPU时间,而不是内存。
— Blacklight Shining 2013年

他问的不可能,我试图提供一个大致相同的解决方案,具有类似的效果。我想这不是他想要的......
— user55325 2013年

现有的内核(据我所知)是不可能的。有人可能会将该功能修补到Linux中。
— Blacklight Shining 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.