【发布时间】:2021-12-07 15:43:16
【问题描述】:
我正在编写一个不依赖于 thrift 定义的纯 JS thrift 解码器。在过去的几天里,我一直在关注这个方便的指南,它一直是我的圣经:https://erikvanoosten.github.io/thrift-missing-specification/
我的解析器几乎可以工作了,但是有一个字符串类型会给程序带来麻烦,我不太明白它在做什么。这是 hexdump 的摘录,我已尽力注释:
正确解析:
000001a0 0a 32 30 32 31 2d 31 31 2d 32 34 16 02 00 18 07 |.2021-11-24.....|
........................blah blah blah............| | |
Object End-| | |
0x18 & 0xF = 0x8 = Binary-| |
The binary sequence is 0x7 characters long-|
000001b0 53 65 61 74 74 6c 65 18 02 55 53 18 02 55 53 18 |Seattle..US..US.|
S E A T T L E |___| U S |___| U S
Another string, 2 bytes long |------------|
到目前为止一切顺利。
但后来我明白了这一点:
我要提取的字符串是"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4592.0 Safari/537.36 Edg/94.0.975.1",长度为134字节。
000001c0 09 54 61 68 6f 65 2c 20 43 41 12 12 00 00 08 c8 |.Tahoe, CA......|
Object ends here-| | |
0x8 & 0xF = 0x8 = Binary -| |
0xc8 bytes long (200)-|
000001d0 01 86 01 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 |...Mozilla/5.0 (|
| | | M o z i l l a
???? |--|-134, encoded as var-int
000001e0 4d 61 63 69 6e 74 6f 73 68 3b 20 49 6e 74 65 6c |Macintosh; Intel|
如您所见,我有一个字节序列0x08 0xC8 0x01 0x86 0x01,其中包含我要查找的字符串的长度,后面是我要查找的字符串,但还有 3 个额外的字节,目的不明。
0x01 尤其令人困惑,因为它既不是类型标识符,也似乎没有具体值。
我错过了什么?
【问题讨论】:
标签: hex thrift decoding thrift-protocol