更改变量值(C程序)

时间:2013-03-22 08:26:15

标签: c

int main(void)
{
  int a=5;
  fun();
  printf("%d",a);
  return 0;
}

我需要编写函数体 fun(),以便printf打印 15 。我无法更改 fun()的原型,即它无法传递任何内容,我无法修改main()函数中的任何内容

4 个答案:

答案 0 :(得分:5)

警告 - 可怕的黑客入侵:

void fun()
{
    int b;
    int *a = &b;
    while(*a != 5)
    {
        a++;
    }
    *a = 15;
}

这会在堆栈中搜索我们希望修改的变量所期望的值,前提是它将与本地声明的int具有相同的对齐方式。它还假设变量实际上将在堆栈中(它可以被优化掉),并且我们将找不到具有相关数字的任何其他位置。这些当然是危险的假设。如果假设不正确,可能会发生不好的事情。对于任何导致使用此类黑客行为的伤害,肢体损失或死亡,我概不负责。

或者,更安全一点:

void fun()
{
    printf("1");
}

答案 1 :(得分:2)

您的问题只是标记为[c]除非afun()的定义不同,否则使用正确的便携式C无法完成您的要求。

如果这个问题是关于堆栈粉碎攻击,那么没有:

是无法回答的
  • 知道这就是问题所在;
  • 了解目标硬件架构和操作系统的完整详细信息。

答案 2 :(得分:1)


如果您无法更改fun()的原型,请将其设为宏; - )

#define fun() (a = 15)

int main(void)
{
  int a=5;
  fun();
  printf("%d",a);
  return 0;
}

答案 3 :(得分:0)

#include <stdio.h>
void fun();

int main(void)
{
  int a=5;
  fun();
  printf("%d", a); 
  return 0;
}

void fun() {
  int p[1];
  p[11] = 15; 
  printf("%d\n", p[11]);
}