当我执行二进制代码时,我希望它们的堆栈段充满特殊的数据。
我所做的只是编写一个程序,在堆栈上分配巨大的缓冲区,调用大量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/

10-12 17:33
查看更多