【发布时间】:2016-03-03 12:40:51
【问题描述】:
我的问题是关于 tcpdump 命令的。 命令“tcpdump -i eth1 -d”列出了过滤器中涉及的汇编指令。 我很好奇没有指令正在访问 M[15](内存插槽 15)。
谁能告诉我,有没有使用这个内存插槽的过滤器? 它是为什么而保留的,它是如何使用的?
【问题讨论】:
我的问题是关于 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 以禁用优化器。)
【讨论】: