2012-07-31 51 views
0

我试图破译usbmon生产的USB I/O流量的跟踪和我有一些问题让我的头部周围的字节顺序。例如起见,这里是从跟踪两行我一起工作:usbmon,USB规范和字节序/字节顺序

ffff8800650e7000 433121059 S Ci:2:000:0 s 80 06 0100 0000 0040 64 < 
ffff8800650e7000 433121661 C Ci:2:000:0 0 18 = 12010002 00000040 da0b8781 00010102 0301 

我起初没有怀疑任何的比微量大字节序其他任何东西,但后来我在第二次看到da0b8781线,它对应于我跟踪的USB设备的标识,其具有供应商ID为0x0bda和产品ID为0x8187(注意跟踪中的字节顺序颠倒)。

所以在这一点上,我认为可能在一个usbmon跟踪的给定字段内,这些字节始终是反向字节顺序,应该这样解释。但恰恰相反,让我们来看一下第一条跟踪线末端附近的一小部分:... 0040 64

0040是一个十六进制字段,表示接受的最大响应大小。 64是一个十进制字段,应该表示完全相同的东西。 0x0040 = 64小数,没有字节顺序切换到0x4000,其将然后!= 64小数。因此,在这一点上,我开始对usbmon trace的不同部分的字节顺序有些不确定。

接下来,我想,也许这只是usbmon跟踪是在相反的字节顺序的数据部分。所以我想也许我真的应该读

...12010002 00000040 da0b8781 00010102 0301 

1030 20101000 1878b0ad 04000000 20001021... 

不,这似乎并不是正确的要么。 USB规范指出供应商Id(0x0bda在我的情况下)应该在字节偏移量为8的特定字符串。如果我们将上面的字符串保留原来的顺序,那么供应商Id确实从字节偏移量8开始(12010002 00000040消耗前8个字节),但如果我们按照上面的方式反转它,那么它将从字节偏移量6开始(仅限1030 20101000消耗前6个字节)。

所以我最好猜测现在是usbmon显示一切大端,接受它切换到反向内字节顺序每4个字节的字,但对于数据仅供。任何人都可以提供一些关于这是否正确的澄清,或者是否可能有其他我错过的东西?

回答