一,查保护。
标准全保护。
二,解决方案。
main():
逻辑没什么好说的,3轮测试直接就赢了。
先来看看round1():
通过方案:
X - Y = 1337(X <= 1336,Y <= 1336)
令X = 1336 Y = -1即可通过,但17行函数strchr()过滤符号 " - "(减号)使得无法输入 -1。
注意到v1,v2数据类型为int,但符号检测只针对s(char),v4(const char),所以可以输入特定值使得v2值为FFFFFFFFh(-1)。
则:X = 1336 Y = 4294967295
round2():
通过方案:
此轮与上题相反,利用正溢出通过,即 v1 * v2 = 100000539h.
由于int大小为4byte,最高位1溢出,使得 v1 * v2 实际等于 00000539h(1337)
示例v1 , v2:
v1 = 3 , v2 = 1431656211
round3():
解决方案:
该轮要求输入5个int值,分别保存在v2,v3,v4,其中 v2,v3以高低位分别保存两个int值。
5个值要求单调递增,且其和等于其积。
只要使其和与积为零即可通过。
示例数列:
-2 ,-1 , 0 , 1 , 2
三,总结。
本题主要考察对数值格式的理解以及代码审计,没什么特别的难点。