memory scratch space 15 何时用于 BPF(Berkeley 数据包过滤器)或 tcpdump?

When is memory scratch space 15 used in BPF (Berkeley Packet Filter) or tcpdump?

我的问题是关于 tcpdump 命令的。 命令 "tcpdump -i eth1 -d" 列出过滤器中涉及的汇编指令.. 我很好奇,没有指令访问 M[15](内存插槽 15)。

谁能告诉我,这个内存插槽是否有过滤器? 它的用途是什么?如何使用?

内存插槽未分配给特定用途;它们由 pcap_compile() 根据需要动态分配。

对于大多数网络类型的大多数过滤器,pcap_compile() 的优化器将删除所有内存插槽使用,或者至少减少它们,以便代码不需要 16 个内存插槽。

对于 802.11(您在监控模式下看到的本机 802.11,而不是您在不处于监控模式下时看到的 "fake Ethernet"),当前未使用优化器(它是围绕不适用的假设设计的到处理 802.11 所需的更复杂的决策制定,修复它是一个大项目),因此您会看到更多地使用内存位置。但是,您可能需要 非常 复杂的过滤器才能使用 M[15] - 或 M[14] 或 M[13] 或大部分低地址内存位置。

(您也可以使用 -O 选项 运行 tcpdump 来禁用优化器。)