最近由于工作需要將原本flex解析的.sol文件邏輯改為c++版本dll打包到客戶端中,從而解決端游無(wú)法采集到瀏覽器中的廣告數(shù)據(jù)吆玖,所以對(duì)sol文件的解析有一定的研究,下面將部分成果公開(kāi)供大家學(xué)習(xí)和補(bǔ)足用马篮。
sol文件是swf文件所產(chǎn)生的沾乘,所以flex讀取sol文件只需要使用
var so:SharedObject = SharedObject.getLocal("xxx");
即可獲取到flex本地?cái)?shù)據(jù),我們并不需要了解sol是如何編碼的浑测,解碼的過(guò)程SharedObject已經(jīng)幫我們做了翅阵。
如果改為c++版則需要我們自己解析sol,解析之前我們就必須了解sol是如何進(jìn)行編碼的迁央,網(wǎng)上的相關(guān)資料很少掷匠,所以只能通過(guò)最笨的方式來(lái)尋找編碼規(guī)則,我的方式是通過(guò)編寫(xiě)flex寫(xiě)入不同的值然后在使用c++讀出16進(jìn)制碼進(jìn)行比較岖圈,看存入1與存入2有什么不同讹语,存入整數(shù)與存入字符串有什么不同從而找出規(guī)律。
對(duì)應(yīng)的讀取結(jié)果
下面分別對(duì)不同類(lèi)型進(jìn)行解析說(shuō)明蜂科,目前只研究了基礎(chǔ)的數(shù)據(jù)類(lèi)型且AS版本為3.0顽决,其余版本解析略有不同未做研究。
頭部信息(基礎(chǔ)信息)解析
sol文件總是以00 BF開(kāi)頭导匣,所以我們可以先讀取這兩個(gè)數(shù)看是不是有效的sol文件再?zèng)Q定是否往下解析才菠。
接著4個(gè)字節(jié)表示塊大小,表示此后所有字節(jié)的長(zhǎng)度逐抑。
然后是固定的10個(gè)字節(jié)54 43 53 4F 00 04 00 00 00 00
緊接著兩個(gè)字節(jié)表示SharedObject表名的長(zhǎng)度鸠儿,隨后的N個(gè)字節(jié)表示表名,N等下前兩個(gè)字節(jié)表示的長(zhǎng)度厕氨。
表名后4個(gè)字節(jié)表示AS的版本00 00 00 00為2.0版 00 00 00 03為3.0版进每。
上面所介紹的是sol文件頭部信息,也是一些基礎(chǔ)信息命斧,接下來(lái)的數(shù)據(jù)是sol的數(shù)據(jù)區(qū)田晚,數(shù)據(jù)區(qū)的解析根據(jù)AS不同的版本有所不同,
上面測(cè)試數(shù)據(jù)為例頭部信息解讀實(shí)例:
數(shù)據(jù)區(qū)的解析將在隨后更新国葬。