计算机程序的“行为学”之三——行为的解构及传统方法的缺陷

军团动向 专栏收录该内容
6 篇文章 0 订阅
首先要说的是,因为文章引用的内容比较繁杂,还有很多我自己整理的想法和结果,为了尽量避免引用错误,并且保证内容的一致性所以要花时间去查相关资料和复查上下文,写的速度就会慢下来了,请见谅。在这个章节里我们要对行为进行一种“非精确”解构,并提出很多新定义。为了更清晰地观察这些定义的真正用途,我们会和相关的传统方法(其实有些不是非常传统拉)作比较并着重分析异同。这一章节有很多实质性的东西,换句话说有很多“体系化”的猜想和论证,所以——欢迎拍砖啦。还有就是章节会比较长,所以会分很多次,有兴趣的慢慢踩了……

事实和事物

在讨论任何事物之前,我们往往会陷于一种困境,如几千年前的古希腊先贤一样,即我们无法精确地“定义”一件事物;实际上当我们试图定义这件事物的时候,我们会发觉我们的描述中又多出来许多件没有定义过的事物。而这也是符号语言(比如:谓词逻辑)的一大缺陷:我们根本看不到A,B,C,D或者α,β,γ,δ的后面隐藏着什么,它们都是自明的。通常的做法是选择一些众所周知的参照物,然后通过比较和构造,来演绎出新的定义。

但是,事实上我们往往忽略了此在(或观察者)在整个过程中的作用,作为观察者我们和事物发生着互动、我们思考着事物的规律、我们将看似不相关的事实联系起来。但是无论如何,我们都无法窥得事物的全部细节,也无法了解事物的一切因果。“此在”这个词来自海德格尔的催眠大作《存在与时间》,定义为可以领会其本身的存在并进行思考和干涉的一种特别的存在;在考虑行为的过程时,我们可以发觉观察者必然被牵涉到行为中去,并且往往就是行为的主体。

关于观察者如何被牵涉到行为中去,我们下文会做讨论。但是如上的讨论为我们揭示了一个重要的事实:事物可以通过观察者的行为来定义。如上所述,无论多少次观察都无法揭示事物的全部细节,但是我们往往只关心和我们的行为有关的一些判据性事实,因此我们可以把事物看成是已经观察到的事实和未被观察到的事实的集合。而在使用这些事实来决策我们的行为的时候,我们往往只关心少数已经观察到的事实和可能能被观察到的事实。由此,我们得到了关于事物的第一个“非精确”定义:

事物是相关的已知和未知事实的总和。

注意这里的几个关键词,关于“相关”的事实,我们一般倾向于将它们看成一个独立的事物,但是有时候我们也把它们归于两个或者更多不同的相关事物,这里并没有明确的标准;但是要组成一个事物,这些事实之间必然存在相关性,且这种相关性不一定和观察者的目的相联系,或者观察者可能尚未意识到这种联系。这里的“已知事实”,也可以说成“已确定事实”或者“已观察到的事实”,但是“已知事实”更加确切,因为其包含了两层含义:事物在该事实的相关的“轴”上达到了一种局部稳定状态;观察者可以通过某种手段直接或间接地观察到该事实。“未知事实”则可以再细分为“未确定事实”和“不可知事实”,前者指的是观察者因为某种原因而暂时无法得知该事实的状态,后者则指的是观察者对该事实完全不具有知识或完全不知道该事实的存在。还有一点就是我这里同时使用了事实和状态两个词,其实他们在这里描述的是同一个概念,但是状态更加贴切一些,我们下面会看到。

我们可以用符号F(O, H)来表示上面的定义,其中F为事物,O为已知事实的集合,而H为未知事实的集合。这个概念并不精确,因为我们对于H具有的知识是不完整的,而H的变化可能会影响甚至破坏整个F的构成(由此可见这样的符号语言表示是不可靠的,我们在这里只是暂时用用)。

以上定义的问题在于并没有很好地描述事物状态的可变性和连续性。显然每一次观察我们都可以得到事物的一组状态/事实,但是下一次观察这些状态/事实可能又会变化。在考察过程中我们往往会关注某些事实/状态的变化规律,因而我们得到的往往是某些事实/状态的一系列观察结果;这些观察结果揭示了事物背后的状态变化规律。前文之所以说状态更贴切,是因为状态一词的含义既带有一种瞬时性和变化性;而事实一词则强调了客观存在性,虽然作为观察者的我们并不一定能够知会某些事实。

另一方面,所谓已知事实和未知事实都是相对的,对于同一个事物,不同的观察者可能得到不同的结果,这取决于观察者的能力和所在的位置。同样,同一事物在不同环境下所呈现的状态也是不同的。关于环境我们接下来讨论,现在让我们先看看事物的第二个“非精确”定义:

事物是相关的已知和未知的连续状态的总和。

关于这个定义,需要注意的是,此处的连续并非和离散相对,而是代表所有的状态都有着发展和变化的特性。由如上定义,我们可以得到观察的定义:

某个观察者在特定环境中所能够知会的某个事物的所有状态称为该事物在该环境下对于该观察者的一个观察。

此处环境可以看成和事物的状态相关但是没有被涵盖进该事物的所有其他事实/状态,但是实际上我们也可以把一些暂时无关的状态/事实也归为环境,毕竟对于观察者来说某个外部状态和事物是否一定不相关总是值得商榷的。

和上面一样,我们用一种特殊的符号语言来表示事物和环境以及观察者的关系,其形式为:

{E, V} F(O, H)

此处E为环境状态的集合,V为观察者的集合。符号├同样是借用的(抱歉我用了制表符,但是在知识表达和人工智能领域这个符号应用还是比较广的)。关于E没有更多可说的,只是需要注意环境状态也分成已知和未知的,所以我们也可以把上面的形式改写成:

{(Eo, Eh), V} F(O, H)

关于观察者集合,在实际生活中我们习惯于只有一个观察者的情况,但是实际上在我们研究问题的时候往往假设不止一个观察者。并且这种假设是隐式的,我们在描述问题的时候不会提到,在解决问题的时候也不会去想,似乎这是理所当然的。很典型的一个例子就是我们先前看过得泥孩子问题,每个孩子的心理状态当然只有这个孩子自己才能够了解,因此此处所有的孩子都是观察者,而每个观察者又被强制不与其他观察者交流,因此这里的知识只可能来自一个观察者的集合而不是某一个观察者;当然我们可以想象这里有一个人和每个孩子进行私下的一对一交流,从而了解了所有孩子的想法,并且他在交流过程中是纯粹被动的,但是这个假设的问题在于这种交流是要花费时间的,而在交流过程中孩子们肯定会作进一步思考;当然我们还可以假设孩子们在交流的时候完全不思考问题,只是表述之前想到的结果,这种假设很不切实际但是又很有效,实际上我们在讨论很多问题的时候都在做这种假设。

由上面的讨论我们可以发觉观察者集合和观察者相比存在着知识分布的不均衡性,不同观察者所具有的知识会通过时间传播到所有的观察者那里(除非这种交流是被禁止的)。而在讨论很多问题的时候,我们都会假设存在一种“通用观察者集合”,这种特别的观察者集合存在如下两个特点:集合中包括了所有的观察者,集合中的观察者互相交流不需要时间。这样所有的观察结果就可以在第一时间为所有的观察者所知。

看过了观察者集合的问题,独立观察者还有一个很大的问题就是观察结果和当前状态的不一致性,换句话说观察者在观察到状态(或者经过思考而了解到事物的内在状态)时,被观察的事物的状态已经变化了。这种情况在物理学特别是量子力学上非常常见,但是在讨论实际问题的时候,我们会做某种程度上的假设,即观察者得到某些比较初级的观察结果的时间是可以忽略的,但是进一步思考仍然需要时间;这里的界定其实比较难,什么样的结果才是初步的观察结果呢?在讨论思维模式的时候我们会有一个相对有效的界定,而这里让我们秉承一个简单的原则:具体问题具体分析。如果我们假设观察者得到我们需要的观察结果的时间是可以忽略的,则我们称这样的观察者为“瞬时观察者”

在“通用观察者”和“瞬时观察者”的前提下,我们可以保证所有的事实都在第一时间被获取,因此我们可以将上面形式中的观察者部分去除,从而得到:

E F(O, H),或者(Eo, Eh) F(O, H)

在接下来的讨论中,如果没有特殊说明,这个形式将是事物的一般符号表示形式。但是如前文已经提到的,这种形式不是很完善,主要是因为符号语言无法很好地表达事实及其关联,因而我们在描述构成事物的那些事实/状态的时候会显得手足无措。下面就让我们来看看传统方法里是怎么做的。

  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

在安全网上逛的时候,突然发现一篇很好的文章!详细阐述了当前流行的api hook技术,rootkit技术和主动防御技术,涉到深入的操作系统知识,需要一定的功底才能看懂,真的很不错,可以说是一篇难得的教程!现摘选如下: 一. 黑匣子的原理 对于一般用户而言,一个程序从开始运行直到结束,这期间内都做过什么,并不是我们需要关心的事情,他们只要听到播放器里的音乐、看到电影画面、和远方的朋友用通讯工具聊天就可以了,有谁会去关心从用户点击播放器程序图标到音乐响起的时间里,这个程序具体做了什么事情呢?然而,如果面对的程序是恶意软件之流,用户就不得不关心一下它到底对自己的计算机造成什么影响了。 程序在运行期间所进行的操作被称为“程序行为”(Action),一般泛指程序进行的相对表现较明显的操作,例如创建读写文件、访问注册表、连接网络等,而在这些操作之外做的程序内部运算、判断、逻辑等操作并不是我们需要关心的,除非是对它进行复杂的分析如逆向工程。对程序行为进行监视记录的过程就是“跟踪”(Tracing),如果要进一步深入,则要使用调试器(Debugger)环境进行汇编级的指令分析,这就是“调试”(Debugging),也可视为更全面的跟踪,因为调试过程可观察到整个程序里的运算和每一步过程。 也许很多用户会觉得,这些复杂技术距离我们很远,甚至会想像为需要复杂设备和程序才能完成,其实,这些技术的应用范围,一直就在我们身边。如果你正在使用一款防毒产品,那么你系统里执行的程序就已经处于被记录行为的状态了;如果你使用HIPS产品,就会更强烈的感受到程序运行被监视着;如果你正在使用调试器,那就不用我说了吧…… 在Windows系统里,至少有三种技术可以实现程序行为的记录,甚至控制程序的某些行为,分别是“虚拟机”(VM)、“API钩子”(API Hooking)和“API跟踪”(API Tracing)。 应用广泛的虚拟机技术 经常提到的虚拟机技术有两种,一种是普遍应用上的虚拟机技术,它是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,此类虚拟机的概念比较广泛,可以是一种使用软件模拟一个完整的计算机硬件环境技术如VMWare,也可以是介于硬件和编译程序之间的交互介质,如Java虚拟机等;另一种则是反病毒产品中使用的“通用解密器”技术,为了检测一些复杂或者代码加密的病毒,杀毒引擎必须让它运行起来以便自我暴露危险程序行为,但是如果病毒真的在用户计算机里运行了,就违背反病毒产品的初衷了,因此反病毒产品也采取了一种虚拟环境检测方法,这就是虚拟机技术,但是这个技术并非是为病毒提供一套计算机仿真系统,这样就太庞大复杂和消耗资源了,这种虚拟机是指杀毒引擎模拟出一个仿真CPU,这个“CPU”具备和真正CPU等同的指令分析功能,杀毒引擎将待检测的程序代码读入“CPU”中逐条指令循环执行,直到出现特定情况才结束工作,在这个过程中探知程序是否具备病毒行为特征或者暴露出病毒特征码。这就是杀毒引擎的“虚拟机技术”,它的目的就是让程序文件在没有实际运行的情况下得到运行后的结果。
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值