来自 资讯 2021-12-14 06:05 的文章

ddos怎么防_高防ddos怎么打_无缝切换

ddos怎么防_高防ddos怎么打_无缝切换

数学界有一个虚构的故事,讲的是一个研究生在分析中写博士论文。他发现了一类有趣的新函数,他能证明许多非常强的定理。函数的确切类别似乎已消失在时间的迷雾中。在他的论文答辩中,有人问他这样一个函数的例子,经过深思熟虑,发现只有这样的函数是无聊的老常数。防守大概不会结束。不管是真是假,这个故事确实让任何一个在理论领域工作的人,或者像我一样,研究建立在大量理论基础上的具体工具的人产生了一定程度的不安。静态分析:琐碎还是不可能?我是沿着一条非标准的轨迹来的。我的博士学位是纯数学,与程序分析毫无关系。我和康奈尔大学的哈伯德博士一起研究偏微分方程的几何变换。哈伯德以问问题而闻名,这些问题切中要害,直截了当地抓住了问题的核心(这让许多一年级研究生试图做报告的人感到恐惧)。我们的首席执行官在我在GrammaTech的面试后就有了这样的经历,当时他决定打电话给哈伯德作为推荐人。哈伯德提前不知道我在申请什么,所以他有点惊讶:哈伯德:那么马特正在申请软件工程的工作?软件工程似乎不是很有趣——毕竟,软件开发不是一个完全微不足道的问题吗?首席执行官:嗯,不!有许多有趣的问题要解决!例如,我们编写软件来分析其他程序的错误。那就是。。。哈伯德:什么?!不,我一秒钟都不相信。通过停止问题,大家都知道那是完全不可能的!任务。。。不可能的?那么谁是对的?非平凡的静态分析真的不可能吗?从某种意义上说,完美的静态分析是不可能的。这被编入赖斯定理中,它说,高防cdn搭建要多久,ddos防御接入,对于你能想到的程序的任何有趣的属性,不可能制定一个算法来决定程序是否具有该属性。通常的证明方法是将问题归结为停止问题,阿里云escddos防御,但一个简单的对角化技巧给出了正确的直觉。例如,假设我们想证明一个程序在给定一个特定的输入时不会通过取消对NULL的引用而崩溃。任何一家值得一试的静态分析公司都会向您出售一个函数never_dereferences_NULL(f,ddos防御分类,x),它可以告诉您在输入x上运行程序f是否会导致空指针解引用。一切都会好起来的,物理服务器防御ddos,直到某个聪明人不可避免地提出这个计划:def棘手(f):如果从不解除引用空值(f,f):x=空;y=*x;//糟糕,我取消了对null的引用!返回Wise Guy先生坐下来问我们的宝贵工具,他的程序在运行自己的源代码时是否有空指针取消引用:从不解除引用空值(棘手、棘手)他应该期待什么样的回答?如果返回True,则该工具声称计算技巧(棘手)不会导致空指针解引用。但是,trigger(trigger)中的if语句将被执行,最终导致空指针取消引用。听起来有点矛盾。如果返回False,则该工具声称计算技巧(棘手)将导致空指针解引用。但是在这种情况下,所有棘手的(棘手的)就是调用never-dereferences_-NULL,我们被告知它是100%准确的(而且可能没有bug)。又是一个矛盾-要么工具是谎言,要么是它是马车!所有这些都表明,没有完美的never-unu-dereferences-NULL工具等待静态分析公司发现。那么哈伯德是否得到了辩护?GrammaTech会在一股数学悖论中消失吗?打开逃生门!幸运的是,在控制赖斯定理的矛盾中,有一个逃生门。让我们先退一步,想想我们是如何陷入这种混乱的:我们假设存在一个完美的工具,它总是正确地告诉我们程序是否包含空指针解引用。这让我们在分析怀斯盖伊的棘手(棘手)计划时遇到了麻烦。宇宙中的每一个原子都需要比我们想象的更麻烦的东西来分析吗?如果我们打开逃生舱门,并考虑到工具可能——有时,可能非常罕见——不总是给出正确答案的可能性,会怎样?一旦我们削弱了程序总是正确的保证,那么矛盾就消失了。似乎没有什么能阻止我们写一个关于never-dereferences_-NULL的近似值,它可以像您所希望的那样精确,尽管我们知道它永远不可能是完美的。假设任何静态分析工具偶尔都会出错,我们可以对它可能犯的错误进行分类:误报:工具说有问题,但实际上没有。假阴性:工具说没有问题,但确实存在。高质量的静态分析工具可以最大限度地减少这两种误差。太多的误报意味着真正的bug会在错误的报告中丢失。很难看到"太多假阴性"的情况,但它同样糟糕——这意味着有太多的错误被忽略了。幸运的是,对于静态分析工具的精确程度似乎没有任何限制。通过设计巧妙的新技术,静态分析工具可以继续发现更多隐藏的错误(减少误报),同时减少误报的噪音。我们知道(有证据!)我们永远无法达到完美,但我们可以接近。称之为静态分析的wabi-sabi。