当我执行二进制代码时,我希望它们的堆栈段充满特殊的数据。
我所做的只是编写一个程序,在堆栈上分配巨大的缓冲区,调用大量malloc和mmap,例如用“a”字符填充所有内存。然后我检查并发现程序使用了大约80%的内存。然后我停止这个程序并启动另一个程序,它只需遍历堆栈并检查堆栈上的值。反正我也看不到我的“A”字。有人能告诉我怎么做吗?
升级版
我为什么这么做只是因为一个ctf。我提到任务之类的。
int func()
{
int i;
if(i == 0xdeadbeef)
system("cat flag");
else
func();
}
int main()
{
func();
}
最佳答案
不,如果不对内核做重大更改的话。新的匿名页面总是零填充的,即使您可以用其他东西填充它们,也没有合理的方法可以让它们从旧进程中传递数据。这样做本身就是一个巨大的安全漏洞。
关于c - 我可以强制Linux内核对新的可执行文件使用特定的内存页面吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31817899/