更改变量值(C程序)

Abh*_*bhi -4 c

int main(void)
{
  int a=5;
  fun();
  printf("%d",a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我需要编写函数fun(),以便printf将打印15.我不能改变fun()的原型,即它不能传递任何东西,我不能修改main()函数中的任何东西

Jas*_*onD 5

警告 - 可怕的黑客传入:

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)