Logo
Section 1 / 6

伴随,锚点,因果链,历史,消息

本课程介绍了以下分析模式:伴随消息、锚定消息、因果链、因果历史和因果消息。

检查点

伴随,锚点,因果链,历史,消息

本课程介绍了以下分析模式:伴随消息、锚定消息、因果链、因果历史和因果消息。

伴随消息

类比于活动关联线程的概念,我们引入伴随消息分析模式。大多数(如果不是全部)分析模式聚焦于日志消息文本本身,并将TID、PID、模块、源文件和函数视为其属性。然而,我们可以选择其中一个属性,将其视为一条独立的消息,而原始消息文本则可被视为另一个属性。随后,我们可以从这一新选定的消息视角来分析追踪数据的结构。

...
分析模式:伴随消息

由于现在不同消息值的数量(例如模块名称)相比普通追踪消息更少,我们可以采用类似蛋白质的编码与结构分析方法。我们形象地将伴随消息称为氨基酸消息(A-消息)。此外,还可以将相同的消息序列压缩为单一消息,这在模式匹配中可能非常有用。甚至可以使用不同的颜色深浅来表示消息的出现频次。

...
压缩消息序列

锚点消息

当软件追踪数据较长时,基于锚点消息序列对数据进行分区会非常有帮助。我们可以利用词汇索引或活动关联线程来确定这些锚点的选择。例如,在一次持续6分钟的桌面连接过程中记录的ETW追踪数据,共包含近90万条消息,可以通过DLL_PROCESS_ATTACH消息的关联线程划分为14个段落。该消息由注入模块的DllMain生成(出于格式清晰考虑,未在追踪输出中显示):

...
ETW追踪示例

每个区域可独立分析异常情况——例如,查找wermgr.exe被启动的原因。以下示意图展示了这种分区方式:

...
分区示意图

也可以通过将上述区域与另一组锚点消息(如DLL_PROCESS_DETACH消息的关联线程)交错组合,实现不同的追踪数据分割方式。

...
锚点消息分析模式

因果链

因果历史消息(0-链)之间的关系可抽象为因果链(1-链)。当一个关系的终点同时也是另一个关系的起点时,二者即可连接。

...
因果链示意图

1-链之间的关系可进一步抽象为2-链,依此类推(n-链)。

...
1-链关系抽象为2-链

我们借鉴了前述书籍《离散因果理论》中的关系空间与链式结构思想。因果链术语也广泛应用于哲学领域。

因果历史

追踪路径与回溯路径共同构成了日志的因果历史,其中箭头指向可能的因果方向。

...
因果历史示意图

我们借用物理学及其对应数学中的因果集概念。左侧的图示灵感来自《离散因果理论》,但我们的图示方向与哈斯图相反。此外,这类图示是软件叙事内部的结构,区别于我们此前提出的更通用的外部空间模型。

我们省略时间箭头,因为可以处理不依赖时间轴的一般性追踪与日志,仅保留因果标记。

因果消息

在观察因果历史网络时,我们可以选择因果消息(不一定是顶层消息)。

...
因果消息分析模式

因果消息可能并不与追踪中的缺陷组重叠,后者可能仅包含相关消息,而无实际因果关联。

Quiz

单选题

你有一个非常大的软件日志,希望让不同的事件响应分析师独立地分析日志的各个部分。你应该考虑采用哪种分析模式?

1 / 1

错误与大规模

损坏的消息、陌生化、对话、叙事性消息(checkpoint)