为什么这段代码不安全?
#include <stdio.h>
int main( int argc, char *argv[] )
{
printf(argv[1]);
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
printf将处理它的第一个参数,寻找像%d和的东西%s.
根据这些值,它将从堆栈中获取更多数据并将其打印出来.
如果有人打电话给你的程序:
a.out "%d %d %d %d %d %d %d %d %d %d %d %d"
Run Code Online (Sandbox Code Playgroud)
他们可以查看计算机的一部分callstack.
如果他们使用格式说明符更有创意,也许他们可以转储重要的东西,比如信用卡号或密码.