我的问题是关于 tcpdump 命令的。命令“tcpdump -i eth1 -d”列出了过滤器中涉及的汇编指令。我很好奇没有指令正在访问 M[15](内存插槽 15)。
谁能告诉我,有没有使用这个内存插槽的过滤器?它的用途是什么?它是如何使用的?
内存插槽没有分配给特定用途;它们pcap_compile()
根据需要动态分配。
对于大多数网络类型的大多数过滤器,pcap_compile()
的优化器将删除所有内存插槽使用,或者至少减少它们,以便代码不需要 16 个内存插槽。
对于 802.11(您在监控模式下看到的本机 802.11,而不是您在不处于监控模式时获得的“假以太网”),当前未使用优化器(它是围绕不适用于更复杂决策的假设设计的需要处理 802.11,修复它是一个大项目),所以你会看到更多的内存位置使用。但是,您可能需要一个非常复杂的过滤器来使用 M[15] - 或 M[14] 或 M[13] 或大多数低地址内存位置。
(您也可以使用-O
禁用优化器的选项运行 tcpdump。)