int main(void)
{
int a=5;
fun();
printf("%d",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要编写函数fun(),以便printf将打印15.我不能改变fun()的原型,即它不能传递任何东西,我不能修改main()函数中的任何东西
警告 - 可怕的黑客传入:
void fun()
{
int b;
int *a = &b;
while(*a != 5)
{
a++;
}
*a = 15;
}
Run Code Online (Sandbox Code Playgroud)
这会在堆栈中搜索我们希望修改的变量所期望的值,前提是它将与本地声明的int具有相同的对齐方式.它还假设变量实际上将在堆栈中(它可以被优化掉),并且我们将找不到具有相关数字的任何其他位置.这些当然是危险的假设.如果假设不正确,可能会发生不好的事情.对于任何导致使用此类黑客攻击的伤害,肢体损伤或死亡,我概不负责.
或者,有点安全:
void fun()
{
printf("1");
}
Run Code Online (Sandbox Code Playgroud)