mirror of
https://github.com/yincongcyincong/wechat_chatter.git
synced 2026-07-15 10:26:52 +08:00
247 lines
16 KiB
Go
247 lines
16 KiB
Go
package main
|
||
|
||
import (
|
||
"bytes"
|
||
"encoding/json"
|
||
"fmt"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
// 把你抓到的 hexdump 直接粘到这里(支持地址列 + hex + ASCII 的完整格式)。
|
||
const dumpInput = `
|
||
0000000000000000 08 00 12 AD 10 08 02 12 A7 0D 08 05 12 A2 0D 08 ................
|
||
0000000000000010 9C 0D 12 9C 0D 08 ED EA 92 D5 01 12 15 0A 13 77 ...............w
|
||
0000000000000020 78 69 64 5F 6C 64 66 74 75 68 65 33 36 69 7A 67 xid_ldftuhe36izg
|
||
0000000000000030 31 39 1A 16 0A 14 34 35 38 37 32 30 32 35 33 38 19....4587202538
|
||
0000000000000040 34 40 63 68 61 74 72 6F 6F 6D 20 03 2A A0 0A 0A 4@chatroom .*...
|
||
0000000000000050 9D 0A 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 3D ..<?xml version=
|
||
0000000000000060 22 31 2E 30 22 3F 3E 0A 3C 6D 73 67 3E 0A 09 3C "1.0"?>.<msg>..<
|
||
0000000000000070 69 6D 67 20 61 65 73 6B 65 79 3D 22 39 61 34 39 img aeskey="9a49
|
||
0000000000000080 36 38 32 32 61 31 62 35 35 30 65 66 34 62 39 65 6822a1b550ef4b9e
|
||
0000000000000090 63 64 31 62 30 36 31 30 34 35 38 66 22 20 65 6E cd1b0610458f" en
|
||
00000000000000A0 63 72 79 76 65 72 3D 22 31 22 20 63 64 6E 74 68 cryver="1" cdnth
|
||
00000000000000B0 75 6D 62 61 65 73 6B 65 79 3D 22 39 61 34 39 36 umbaeskey="9a496
|
||
00000000000000C0 38 32 32 61 31 62 35 35 30 65 66 34 62 39 65 63 822a1b550ef4b9ec
|
||
00000000000000D0 64 31 62 30 36 31 30 34 35 38 66 22 20 63 64 6E d1b0610458f" cdn
|
||
00000000000000E0 74 68 75 6D 62 75 72 6C 3D 22 33 30 35 66 30 32 thumburl="305f02
|
||
00000000000000F0 30 31 30 30 30 34 34 62 33 30 34 39 30 32 30 31 0100044b30490201
|
||
0000000000000100 30 30 30 32 30 34 66 36 35 63 39 63 65 30 30 32 000204f65c9ce002
|
||
0000000000000110 30 33 32 66 35 63 33 39 30 32 30 34 32 33 30 30 032f5c3902042300
|
||
0000000000000120 30 63 37 39 30 32 30 34 36 61 34 66 34 64 63 66 0c7902046a4f4dcf
|
||
0000000000000130 30 34 32 34 33 34 36 32 36 34 36 33 33 33 33 39 0424346264633339
|
||
0000000000000140 33 38 33 32 32 64 33 37 33 34 33 33 33 33 32 64 38322d373433332d
|
||
0000000000000150 33 34 33 36 36 34 36 33 32 64 36 31 33 34 33 34 343664632d613434
|
||
0000000000000160 33 30 32 64 33 33 33 32 36 35 33 36 36 32 33 37 302d333265366237
|
||
0000000000000170 33 30 36 34 33 33 33 37 36 32 33 31 30 32 30 34 3064333762310204
|
||
0000000000000180 30 35 31 35 30 61 30 32 30 32 30 31 30 30 30 34 05150a0202010004
|
||
0000000000000190 30 64 30 30 34 63 35 61 65 31 30 30 30 30 30 30 0d004c5ae1000000
|
||
00000000000001A0 30 30 30 30 30 30 30 30 30 30 30 30 22 20 63 64 000000000000" cd
|
||
00000000000001B0 6E 74 68 75 6D 62 6C 65 6E 67 74 68 3D 22 39 38 nthumblength="98
|
||
00000000000001C0 37 37 22 20 63 64 6E 74 68 75 6D 62 68 65 69 67 77" cdnthumbheig
|
||
00000000000001D0 68 74 3D 22 32 31 30 22 20 63 64 6E 74 68 75 6D ht="210" cdnthum
|
||
00000000000001E0 62 77 69 64 74 68 3D 22 31 31 38 22 20 63 64 6E bwidth="118" cdn
|
||
00000000000001F0 6D 69 64 68 65 69 67 68 74 3D 22 30 22 20 63 64 midheight="0" cd
|
||
0000000000000200 6E 6D 69 64 77 69 64 74 68 3D 22 30 22 20 63 64 nmidwidth="0" cd
|
||
0000000000000210 6E 68 64 68 65 69 67 68 74 3D 22 30 22 20 63 64 nhdheight="0" cd
|
||
0000000000000220 6E 68 64 77 69 64 74 68 3D 22 30 22 20 63 64 6E nhdwidth="0" cdn
|
||
0000000000000230 6D 69 64 69 6D 67 75 72 6C 3D 22 33 30 35 66 30 midimgurl="305f0
|
||
0000000000000240 32 30 31 30 30 30 34 34 62 33 30 34 39 30 32 30 20100044b3049020
|
||
0000000000000250 31 30 30 30 32 30 34 66 36 35 63 39 63 65 30 30 1000204f65c9ce00
|
||
0000000000000260 32 30 33 32 66 35 63 33 39 30 32 30 34 32 33 30 2032f5c390204230
|
||
0000000000000270 30 30 63 37 39 30 32 30 34 36 61 34 66 34 64 63 00c7902046a4f4dc
|
||
0000000000000280 66 30 34 32 34 33 34 36 32 36 34 36 33 33 33 33 f042434626463333
|
||
0000000000000290 39 33 38 33 32 32 64 33 37 33 34 33 33 33 33 32 938322d373433332
|
||
00000000000002A0 64 33 34 33 36 36 34 36 33 32 64 36 31 33 34 33 d343664632d61343
|
||
00000000000002B0 34 33 30 32 64 33 33 33 32 36 35 33 36 36 32 33 4302d33326536623
|
||
00000000000002C0 37 33 30 36 34 33 33 33 37 36 32 33 31 30 32 30 7306433376231020
|
||
00000000000002D0 34 30 35 31 35 30 61 30 32 30 32 30 31 30 30 30 405150a020201000
|
||
00000000000002E0 34 30 64 30 30 34 63 35 61 65 31 30 30 30 30 30 40d004c5ae100000
|
||
00000000000002F0 30 30 30 30 30 30 30 30 30 30 30 30 30 22 20 6C 0000000000000" l
|
||
0000000000000300 65 6E 67 74 68 3D 22 34 37 32 35 31 22 20 6D 64 ength="47251" md
|
||
0000000000000310 35 3D 22 36 31 62 38 32 39 62 65 34 38 62 39 39 5="61b829be48b99
|
||
0000000000000320 65 34 65 36 36 62 65 36 65 36 64 62 61 39 33 34 e4e66be6e6dba934
|
||
0000000000000330 63 33 32 22 20 68 65 76 63 5F 6D 69 64 5F 73 69 c32" hevc_mid_si
|
||
0000000000000340 7A 65 3D 22 34 37 32 35 31 22 20 6F 72 69 67 69 ze="47251" origi
|
||
0000000000000350 6E 73 6F 75 72 63 65 6D 64 35 3D 22 62 63 39 31 nsourcemd5="bc91
|
||
0000000000000360 66 37 62 34 61 39 39 64 31 37 65 36 31 66 36 32 f7b4a99d17e61f62
|
||
0000000000000370 35 37 64 31 32 66 39 32 33 30 36 30 22 3E 0A 09 57d12f923060">..
|
||
0000000000000380 09 3C 73 65 63 48 61 73 68 49 6E 66 6F 42 61 73 .<secHashInfoBas
|
||
0000000000000390 65 36 34 3E 65 79 4A 77 61 47 46 7A 61 43 49 36 e64>eyJwaGFzaCI6
|
||
00000000000003A0 49 6A 45 77 4F 54 45 32 4D 6A 45 77 4E 54 49 79 IjEwOTE2MjEwNTIy
|
||
00000000000003B0 4D 44 45 77 4E 44 41 69 4C 43 4A 77 5A 48 46 6F MDEwNDAiLCJwZHFo
|
||
00000000000003C0 59 58 4E 6F 49 6A 6F 69 4F 44 51 77 59 7A 55 33 YXNoIjoiODQwYzU3
|
||
00000000000003D0 4D 47 49 33 59 54 4D 77 4D 57 45 7A 5A 57 45 32 MGI3YTMwMWEzZWE2
|
||
00000000000003E0 4E 6A 4E 6C 4F 57 59 32 4E 54 6B 77 5A 6A 56 6D NjNlOWY2NTkwZjVm
|
||
00000000000003F0 4F 44 68 68 4E 6D 45 7A 5A 57 45 33 4D 47 59 34 ODhhNmEzZWE3MGY4
|
||
0000000000000400 4E 47 51 77 4E 57 4D 7A 4D 44 63 77 4D 47 59 34 NGQwNWMzMDcwMGY4
|
||
0000000000000410 4D 44 4D 33 4F 44 4E 6D 5A 6D 5A 6D 5A 43 4A 39 MDM3ODNmZmZmZCJ9
|
||
0000000000000420 3C 2F 73 65 63 48 61 73 68 49 6E 66 6F 42 61 73 </secHashInfoBas
|
||
0000000000000430 65 36 34 3E 0A 09 09 3C 6C 69 76 65 3E 0A 09 09 e64>...<live>...
|
||
0000000000000440 09 3C 64 75 72 61 74 69 6F 6E 3E 30 3C 2F 64 75 .<duration>0</du
|
||
0000000000000450 72 61 74 69 6F 6E 3E 0A 09 09 09 3C 73 69 7A 65 ration>....<size
|
||
0000000000000460 3E 30 3C 2F 73 69 7A 65 3E 0A 09 09 09 3C 6D 64 >0</size>....<md
|
||
0000000000000470 35 20 2F 3E 0A 09 09 09 3C 66 69 6C 65 69 64 20 5 />....<fileid
|
||
0000000000000480 2F 3E 0A 09 09 09 3C 68 64 73 69 7A 65 3E 30 3C />....<hdsize>0<
|
||
0000000000000490 2F 68 64 73 69 7A 65 3E 0A 09 09 09 3C 68 64 6D /hdsize>....<hdm
|
||
00000000000004A0 64 35 20 2F 3E 0A 09 09 09 3C 68 64 66 69 6C 65 d5 />....<hdfile
|
||
00000000000004B0 69 64 20 2F 3E 0A 09 09 09 3C 73 74 69 6C 6C 69 id />....<stilli
|
||
00000000000004C0 6D 61 67 65 74 69 6D 65 6D 73 3E 30 3C 2F 73 74 magetimems>0</st
|
||
00000000000004D0 69 6C 6C 69 6D 61 67 65 74 69 6D 65 6D 73 3E 0A illimagetimems>.
|
||
00000000000004E0 09 09 3C 2F 6C 69 76 65 3E 0A 09 3C 2F 69 6D 67 ..</live>..</img
|
||
00000000000004F0 3E 0A 09 3C 70 6C 61 74 66 6F 72 6D 5F 73 69 67 >..<platform_sig
|
||
0000000000000500 6E 61 74 75 72 65 20 2F 3E 0A 09 3C 69 6D 67 64 nature />..<imgd
|
||
0000000000000510 61 74 61 68 61 73 68 20 2F 3E 0A 09 3C 49 6D 67 atahash />..<Img
|
||
0000000000000520 53 6F 75 72 63 65 49 6E 66 6F 3E 0A 09 09 3C 49 SourceInfo>...<I
|
||
0000000000000530 6D 67 53 6F 75 72 63 65 55 72 6C 20 2F 3E 0A 09 mgSourceUrl />..
|
||
0000000000000540 09 3C 42 69 7A 54 79 70 65 3E 30 3C 2F 42 69 7A .<BizType>0</Biz
|
||
0000000000000550 54 79 70 65 3E 0A 09 3C 2F 49 6D 67 53 6F 75 72 Type>..</ImgSour
|
||
0000000000000560 63 65 49 6E 66 6F 3E 0A 3C 2F 6D 73 67 3E 0A 30 ceInfo>.</msg>.0
|
||
0000000000000570 03 38 02 42 02 08 00 48 E4 EF BD D2 06 52 9B 02 .8.B...H.....R..
|
||
0000000000000580 3C 6D 73 67 73 6F 75 72 63 65 3E 0A 09 3C 62 69 <msgsource>..<bi
|
||
0000000000000590 7A 66 6C 61 67 3E 30 3C 2F 62 69 7A 66 6C 61 67 zflag>0</bizflag
|
||
00000000000005A0 3E 0A 09 3C 73 65 63 5F 6D 73 67 5F 6E 6F 64 65 >..<sec_msg_node
|
||
00000000000005B0 3E 0A 09 09 3C 75 75 69 64 3E 38 62 31 31 62 33 >...<uuid>8b11b3
|
||
00000000000005C0 66 63 32 33 35 34 30 33 62 36 63 65 34 37 32 33 fc235403b6ce4723
|
||
00000000000005D0 62 62 65 62 31 39 62 64 31 35 5F 3C 2F 75 75 69 bbeb19bd15_</uui
|
||
00000000000005E0 64 3E 0A 09 09 3C 72 69 73 6B 2D 66 69 6C 65 2D d>...<risk-file-
|
||
00000000000005F0 66 6C 61 67 20 2F 3E 0A 09 09 3C 72 69 73 6B 2D flag />...<risk-
|
||
0000000000000600 66 69 6C 65 2D 6D 64 35 2D 6C 69 73 74 20 2F 3E file-md5-list />
|
||
0000000000000610 0A 09 3C 2F 73 65 63 5F 6D 73 67 5F 6E 6F 64 65 ..</sec_msg_node
|
||
0000000000000620 3E 0A 09 3C 73 69 67 6E 61 74 75 72 65 3E 4E 30 >..<signature>N0
|
||
0000000000000630 5F 56 31 5F 6D 74 6F 4A 64 6D 49 35 7C 76 31 5F _V1_mtoJdmI5|v1_
|
||
0000000000000640 6E 6B 4D 6F 79 50 6F 55 3C 2F 73 69 67 6E 61 74 nkMoyPoU</signat
|
||
0000000000000650 75 72 65 3E 0A 09 3C 74 6D 70 5F 6E 6F 64 65 3E ure>..<tmp_node>
|
||
0000000000000660 0A 09 09 3C 70 75 62 6C 69 73 68 65 72 2D 69 64 ...<publisher-id
|
||
0000000000000670 3E 3C 2F 70 75 62 6C 69 73 68 65 72 2D 69 64 3E ></publisher-id>
|
||
0000000000000680 0A 09 3C 2F 74 6D 70 5F 6E 6F 64 65 3E 0A 3C 2F ..</tmp_node>.</
|
||
0000000000000690 6D 73 67 73 6F 75 72 63 65 3E 0A 60 FC 96 DB BC msgsource>.....
|
||
00000000000006A0 D3 F9 C6 BB 65 68 F8 B8 AC D4 02 72 02 08 00 78 ....eh.....r...x
|
||
00000000000006B0 00 12 FE 02 08 05 12 F9 02 08 F3 02 12 F3 02 08 ................
|
||
00000000000006C0 8E F9 82 DC 06 12 15 0A 13 77 78 69 64 5F 6C 64 .........wxid_ld
|
||
00000000000006D0 66 74 75 68 65 33 36 69 7A 67 31 39 1A 16 0A 14 ftuhe36izg19....
|
||
00000000000006E0 34 35 38 37 32 30 32 35 33 38 34 40 63 68 61 74 45872025384@chat
|
||
00000000000006F0 72 6F 6F 6D 20 33 2A 9D 01 0A 9A 01 3C 6D 73 67 room 3*.....<msg
|
||
0000000000000700 3E 0A 3C 6F 70 20 69 64 3D 27 31 27 3E 0A 3C 75 >.<op id='1'>.<u
|
||
0000000000000710 73 65 72 6E 61 6D 65 3E 34 35 38 37 32 30 32 35 sername>45872025
|
||
0000000000000720 33 38 34 40 63 68 61 74 72 6F 6F 6D 3C 2F 75 73 384@chatroom</us
|
||
0000000000000730 65 72 6E 61 6D 65 3E 0A 3C 6E 61 6D 65 3E 6C 61 ername>.<name>la
|
||
0000000000000740 73 74 4D 65 73 73 61 67 65 3C 2F 6E 61 6D 65 3E stMessage</name>
|
||
0000000000000750 0A 3C 61 72 67 3E 7B 22 6D 65 73 73 61 67 65 53 .<arg>{"messageS
|
||
0000000000000760 76 72 49 64 22 3A 30 2C 22 4D 73 67 43 72 65 61 vrId":0,"MsgCrea
|
||
0000000000000770 74 65 54 69 6D 65 22 3A 31 37 38 33 35 39 32 39 teTime":17835929
|
||
0000000000000780 33 32 7D 3C 2F 61 72 67 3E 0A 3C 2F 6F 70 3E 0A 32}</arg>.</op>.
|
||
0000000000000790 3C 2F 6D 73 67 3E 30 03 38 01 42 02 08 00 48 E5 </msg>0.8.B...H.
|
||
00000000000007A0 EF BD D2 06 52 76 3C 6D 73 67 73 6F 75 72 63 65 ....Rv<msgsource
|
||
00000000000007B0 3E 0A 09 3C 73 69 67 6E 61 74 75 72 65 3E 76 31 >..<signature>v1
|
||
00000000000007C0 5F 71 38 43 30 51 43 64 78 3C 2F 73 69 67 6E 61 _q8C0QCdx</signa
|
||
00000000000007D0 74 75 72 65 3E 0A 09 3C 74 6D 70 5F 6E 6F 64 65 ture>..<tmp_node
|
||
00000000000007E0 3E 0A 09 09 3C 70 75 62 6C 69 73 68 65 72 2D 69 >...<publisher-i
|
||
00000000000007F0 64 3E 3C 2F 70 75 62 6C 69 73 68 65 72 2D 69 64 d></publisher-id
|
||
0000000000000800 3E 0A 09 3C 2F 74 6D 70 5F 6E 6F 64 65 3E 0A 3C >..</tmp_node>.<
|
||
0000000000000810 2F 6D 73 67 73 6F 75 72 63 65 3E 0A 60 E2 BB AE /msgsource>....
|
||
0000000000000820 8D D0 B7 A7 ED 1A 68 F9 B8 AC D4 02 72 02 08 00 ......h.....r...
|
||
0000000000000830 78 00 18 00 22 EC 02 08 E6 02 12 E6 02 08 2F 12 x..."........./.
|
||
0000000000000840 08 08 01 10 B6 9F FA 8D 03 12 04 08 65 10 00 12 ............e...
|
||
0000000000000850 08 08 02 10 F9 B8 AC D4 02 12 04 08 66 10 00 12 ............f...
|
||
0000000000000860 04 08 0D 10 00 12 05 08 CC 01 10 00 12 08 08 03 ................
|
||
0000000000000870 10 8E 91 FA 8D 03 12 04 08 67 10 00 12 08 08 0B .........g......
|
||
0000000000000880 10 F2 9D FA 8D 03 12 04 08 6F 10 00 12 04 08 04 .........o......
|
||
0000000000000890 10 00 12 04 08 68 10 00 12 04 08 05 10 00 12 04 .....h..........
|
||
00000000000008A0 08 69 10 00 12 04 08 07 10 00 12 04 08 6B 10 00 .i...........k..
|
||
00000000000008B0 12 04 08 08 10 00 12 04 08 6C 10 00 12 08 08 09 .........l......
|
||
00000000000008C0 10 96 9F FA 8D 03 12 04 08 6D 10 00 12 08 08 16 .........m......
|
||
00000000000008D0 10 A1 9F FA 8D 03 12 04 08 06 10 00 12 04 08 7A ...............z
|
||
00000000000008E0 10 00 12 04 08 6A 10 00 12 04 08 10 10 00 12 04 .....j..........
|
||
00000000000008F0 08 11 10 00 12 04 08 72 10 00 12 08 08 0E 10 CA .......r........
|
||
0000000000000900 ED F9 8D 03 12 04 08 70 10 00 12 06 08 13 10 D9 .......p........
|
||
0000000000000910 EB 02 12 04 08 1A 10 00 12 06 08 1B 10 8B B7 02 ................
|
||
0000000000000920 12 08 08 18 10 E5 EF BD D2 06 12 08 08 17 10 D9 ................
|
||
0000000000000930 EF BD D2 06 12 08 08 19 10 F9 B8 AC D4 02 12 04 ................
|
||
0000000000000940 08 0A 10 00 12 09 08 C9 01 10 E5 EF BD D2 06 12 ................
|
||
0000000000000950 05 08 CD 01 10 00 12 05 08 CA 01 10 00 12 09 08 ................
|
||
0000000000000960 CB 01 10 E3 92 A7 D2 06 12 05 08 CE 01 10 67 12 ..............g.
|
||
0000000000000970 05 08 CF 01 10 00 12 04 08 14 10 00 12 04 08 15 ................
|
||
0000000000000980 10 00 12 09 08 E8 07 10 98 BF BD D2 06 12 09 08 ................
|
||
0000000000000990 E9 07 10 D9 DB BD D2 06 12 09 08 D3 0F 10 92 F4 ................
|
||
00000000000009A0 BC D2 06 28 01 30 DA E0 DA DA 02 38 E5 EF BD D2 ...(.0.....8....
|
||
00000000000009B0 06 42 15 08 11 12 11 0A 0F 08 02 08 1A 08 1B 10 .B..............
|
||
00000000000009C0 BF C0 B4 A7 0A 18 E9 07 ........
|
||
`
|
||
|
||
// TestProbeProtobufDump 直接测试 HandleProtobufMsg:
|
||
// 把 hexdump 还原成字节 → 按 JS 侧一样封装成 {"data": [byte...]} 的 payload
|
||
// → 调用 HandleProtobufMsg,打印它返回的 WechatMessage JSON 或错误。
|
||
func TestProbeProtobufDump(t *testing.T) {
|
||
rawBytes := parseDump(t, dumpInput)
|
||
t.Logf("解析出的字节数: %d", len(rawBytes))
|
||
|
||
// 构造 HandleProtobufMsg 期望的 payload:data 是 []interface{}{float64,...}
|
||
dataArr := make([]interface{}, len(rawBytes))
|
||
for i, b := range rawBytes {
|
||
dataArr[i] = float64(b)
|
||
}
|
||
payload := map[string]interface{}{"data": dataArr}
|
||
|
||
jsonList, err := HandleProtobufMsg(payload)
|
||
if err != nil {
|
||
t.Fatalf("HandleProtobufMsg 失败: %v", err)
|
||
}
|
||
if len(jsonList) == 0 {
|
||
t.Fatalf("HandleProtobufMsg 返回空(消息被全部跳过)")
|
||
}
|
||
|
||
fmt.Printf("========== HandleProtobufMsg 返回 %d 条消息 ==========\n", len(jsonList))
|
||
for idx, jsonData := range jsonList {
|
||
var pretty bytes.Buffer
|
||
if err := json.Indent(&pretty, jsonData, "", " "); err != nil {
|
||
fmt.Printf("--- 消息 %d ---\n%s\n", idx, string(jsonData))
|
||
} else {
|
||
fmt.Printf("--- 消息 %d ---\n%s\n", idx, pretty.String())
|
||
}
|
||
}
|
||
}
|
||
|
||
// parseDump 从 hexdump 里抽出真正的字节。
|
||
// 针对 lldb / hexdump -C 的固定列宽格式:
|
||
//
|
||
// 地址(16 hex) + 2空格 + hex列(16字节) + 2空格 + ASCII列
|
||
//
|
||
// 第 0..17 字符是地址列,第 18 起是 hex 列(16 字节 = 48 字符宽,
|
||
// 中缝再占 1 空格)。按固定列宽切片,彻底避开 ASCII 列被误当字节。
|
||
func parseDump(t *testing.T, dump string) []byte {
|
||
t.Helper()
|
||
const addrCols = 18 // 16 hex 地址 + 2 空格
|
||
const hexCols = 49 // 8字节*3 + 中缝1 + 8字节*3 = 49(含末尾空格,Fields 会忽略)
|
||
var out []byte
|
||
for _, line := range strings.Split(dump, "\n") {
|
||
if strings.TrimSpace(line) == "" {
|
||
continue
|
||
}
|
||
if len(line) <= addrCols {
|
||
continue
|
||
}
|
||
end := addrCols + hexCols
|
||
if end > len(line) {
|
||
end = len(line)
|
||
}
|
||
for _, tk := range strings.Fields(line[addrCols:end]) {
|
||
if len(tk) == 2 && isHexTok(tk) {
|
||
var v int
|
||
fmt.Sscanf(tk, "%02x", &v)
|
||
out = append(out, byte(v))
|
||
}
|
||
}
|
||
}
|
||
return out
|
||
}
|
||
|
||
func isHexTok(s string) bool {
|
||
for _, c := range s {
|
||
if !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
|
||
return false
|
||
}
|
||
}
|
||
return len(s) > 0
|
||
}
|