【发布时间】:2013-05-12 18:59:14
【问题描述】:
我修复了this question 中的代码,以便编译:
#define text ();
#define return &argv;return
int *** emphasized () {
static int x, *argv = &x, **xpp = &argv;
puts("\r10 11 11");
return &xpp;
}
int main (int argc, char *argv[]) {
int a;
int n = 10;
printf("%d",n);
n++;
printf("%d",n);
a = n++;
printf("%d",n);***emphasized text***
return 0;
}
在原来的问题中,提问者说:
输出= 10 11 11 为什么它不是第二个增量运算符中 n 的增量值
这就是为什么emphasized() 做了一些有趣的事情。我试图想出一种方法,让提问者的文字代码按照他/她所说的去做。为此,我将***emphasized text*** 视为源代码的一部分。
我的 问题是:如何更改 emphasized() 以便在不调用任何输出函数的情况下呈现 10 11 11 输出?我希望能观察到一种将printf() 呈现的输出更改为标准输出以添加空格但会破坏最后一个数字的方法。
由于这个问题被标记为混淆,如果解决方案涉及添加更多#defines,那就去吧。
【问题讨论】:
-
是什么让您认为增量不会发生?如果是输出,那仅仅是因为
puts调用的输出就是这样。 -
为什么要删除
#define printf(a,b) (void)0这一行? -
@JohnBode:不需要它来获得观察到的输出。
-
@user315052:是的,你做到了;如果你再次运行程序,你将肯定得到不同的输出。
-
@JohnBode:如果重定向到文件,但如果在控制台上观察到则不会。
标签: c obfuscation