在chrome中有乙個很有意思的工具courgette,翻譯成中文是小胡瓜的意思。我很難把這個單詞和這個小工具聯絡在一起,也許作者比較偏愛這個蔬菜吧!
courgette主要用於chrome的公升級過程,他的主要作用是,針對兩個版本不同的二進位制檔案(binary file),尋找其中區別,生成補丁檔案;另外就是根據這個補丁檔案加上舊版本的二進位制檔案生成新版本的二進位制檔案的還原過程了。類似於加解密流程。
courgette構建在乙個開源**bsdiff和bspatch 基礎上的。並在bsdiff的基礎上做了一些優化。
本人是半路出家的人,對編譯原理和彙編了解不深,按照我對bsdiff的演算法 理解,乙個二進位制檔案裡面,包含了**部分(函式,資料),指向這些函式的指標列表(編譯鏈結產生,包含了如何定位函式等資訊),由於這些位址是內部的相對位址,即使更改了一小行**,重新編譯後,函式的位址將發生變化了,指向這些函式的指標值也全部變化了。因此,即使更改了乙個小小的變數,也會導致很多部分的修改。bsdiff的原理就是對二進位制檔案進行反彙編,將上面所說的兩部分進行分別處理,對於**部分,其實就和普通的文字檔案類似了,改變不會太大,這部分體積基本上占去了整個二進位制檔案的80%左右。然後對動態指標部分進行一些更新處理,就基本上達到了打補丁的目標了。
server:
diff = bsdiff(original, update)
transmit diff
client:
receive diff
update = bspatch(original, diff)
server:
asm_old = disassemble(original)
asm_new = disassemble(update)
asm_new_adjusted = adjust(asm_new, asm_old)
asm_diff = bsdiff(asm_old, asm_new_adjusted)
transmit asm_diff
client:
receive asm_diff
asm_old = disassemble(original)
asm_new_adjusted = bspatch(asm_old, asm_diff)
update = assemble(asm_new_adjusted)
chrome的大致處理流程如上,和bsdiff流程類似,多了
asm_new_adjusted = adjust(asm_new, asm_old)這乙個步驟,這個步驟主要就是上面說的對位址標籤化的過程。
Chrome除錯小技巧
前言 除了我們日常使用的除錯方法,在chrome中,其含有一些有意思的方法,有助於提高我們的開發除錯效率。sources頁 command p檔案跳轉 使用sublime的人或習慣用command p進行檔案的跳轉,在chrome dev tools中其實也有類似的跳轉方法。command p co...
Chrome除錯小技巧
除了我們日常使用的除錯方法,在chrome中,其含有一些有意思的方法,有助於提高我們的開發除錯效率。command p檔案跳轉 使用sublime的人或習慣用command p進行檔案的跳轉,在chrome dev tools中其實也有類似的跳轉方法。command p command p 檔名 數...
小技巧 chrome 的 vim 外掛程式
安裝後就可以用 vim 模式來對 chrome 進行操作。對於習慣鍵盤的人比較方便。比如 shift f 可以顯示各個鏈結對應的按鍵,這樣就可以直接用鍵盤開啟某乙個鏈結。f,f 也可以,另外前者是在當前頁面開啟鏈結,後者是在新的頁面開啟。j,k 分別是向下,向上滾動。另外,有時該外掛程式的快捷鍵會和...