我的教科书说:注意在这个例子中,你实际上并没有删除堆栈内容。如果您要存储秘密数据,则应使用零或(理想情况下)垃圾数据覆盖它。对于 现在,我们可以把垃圾放在身边。
Aren在执行此操作后删除了保存在堆栈中的内容?
add $30, $30, $4
因为它会弹出所有已保存的内容。
答案 0 :(得分:1)
仅增加堆栈指针不会改变堆栈下方的内存内容。它与在C中使用字符串变量相同:
char str[200] = { " Secret data" };
strcpy(str, "foo");
此时,C约定的变量有用值是" foo"。但当然数组包含
foo\0Secret data\0< 184 more zero bytes >
正如一个关心外观的功能可以看到字符串中的秘密数据,另一个运行恶意代码的函数或进程知道你的代码并没有擦除它的堆栈可以读取旧的&#34;弹出的&#34;数据那里。如果它是一个提供特权的密码或其他价值,那么坏人就会领先。