Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実行ファイルにおけるバイナリ差分 アルゴリズム/cybozulabs-youth10-minoji
Search
Cybozu
PRO
March 31, 2021
Technology
0
560
実行ファイルにおけるバイナリ差分 アルゴリズム/cybozulabs-youth10-minoji
Cybozu
PRO
March 31, 2021
Tweet
Share
More Decks by Cybozu
See All by Cybozu
AIツール開発ワークショップ(Dify)【サイボウズ新人研修2025】
cybozuinsideout
PRO
2
1.7k
モバイル【サイボウズ新人研修2025】
cybozuinsideout
PRO
0
530
Git/GitHub を使う上で知っておくと嬉しいかも Tips【サイボウズ新人研修2025】
cybozuinsideout
PRO
1
850
GitHub Copilot活用【サイボウズ新人研修2025】
cybozuinsideout
PRO
1
850
ソフトウェアライセンス【サイボウズ新人研修2025】
cybozuinsideout
PRO
1
310
エンジニアのためのアウトプット講座 〜知識をシェアするはじめの一歩〜【サイボウズ新人研修2025】
cybozuinsideout
PRO
0
450
Docker入門【サイボウズ新人研修2025】
cybozuinsideout
PRO
0
540
セキュリティ【サイボウズ新人研修2025】
cybozuinsideout
PRO
0
500
TLS 1.3をざっと理解する【サイボウズ新人研修2025】
cybozuinsideout
PRO
0
250
Other Decks in Technology
See All in Technology
ゼロからはじめる採用広報
yutadayo
2
510
20250705 Headlamp: 專注可擴展性的 Kubernetes 用戶界面
pichuang
0
240
Beyond Kaniko: Navigating Unprivileged Container Image Creation
f30
0
130
KiCadでPad on Viaの基板作ってみた
iotengineer22
0
290
改めてAWS WAFを振り返る~業務で使うためのポイント~
masakiokuda
2
240
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
160
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
230
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
150
PO初心者が考えた ”POらしさ”
nb_rady
0
190
LangChain Interrupt & LangChain Ambassadors meetingレポート
os1ma
2
290
本が全く読めなかった過去の自分へ
genshun9
0
920
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
6
1.4k
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Docker and Python
trallard
44
3.5k
Optimizing for Happiness
mojombo
379
70k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building Adaptive Systems
keathley
43
2.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
280
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Making Projects Easy
brettharned
116
6.3k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Transcript
実行ファイルにおけるバイナリ差分 アルゴリズム サイボウズラボユース成果報告会 10期 美濃地 正貴 (hiromi_mi) 2021年3月30日
自己紹介 • 美濃地 正貴 (みのじ まさたか) – Twitter: @_hiromi_mi –
https://hiromi-mi.github.io/ • 2020年8月から活動 – メンター: 光成さん – 今後も継続予定です。現状報告をし ます
テーマ • 各種バイナリ差分アルゴリズムの調査や実装 – Levenshtein 距離 にもとづく動的計画法 – bsdiff –
Chromium Courgette • 現状: – Levenshtein距離とBsdiff アルゴリズムを再実装 – Courgette の実装解読および再実装をしている
動機 • ソフトウエア更新におけるデータ通信量削減 – 無尽蔵にデータが使えない環境がまだまだある – 日本でナローバンド回線は 企業13% 家庭7% [1]
– 4G などの従量課金通信 • 多くのパッケージマネージャはソフトウエア更 新時に更新版のバイナリファイルを全て転送し ている – 旧版と新版の差分を転送すると小さくならないか?
パッチファイルの基本構造 • 以下の操作の繰り返しでパッチファイルを構成 • ADD n [文字列] : 各文字ごとに new
= old + [文字] • INSERT n [文字列] : 新ファイルのnバイト目に [文 字列] を加える • DELETE n m : 新ファイルのnバイト目以降 m 文 字を削除 旧: ABCDEF GHIJKLFUGA 新: XBCDEF GXXXKL ADD 1 [アスキーコード23];INSERT 8 XXX;DELETE 13 4;
bsdiff • バイナリ差分の特性: ソースコードの変更部分と無関係な部分も変化 – 1命令付け加わるとそのあとの命令で指すアドレスは変化 • 各操作の適用領域を工夫して容量を削減 – 操作の個数は減らせるとよい.
0の連続はbzip2 により圧縮される – (一致したバイト数)^2 - (全体のバイト数) を最大化 • 再実装 – https://github.com/hiromi-mi/deltaup-prototype 旧: HhogefugahogeE 新: XhogefugahogeX ADD 1 [‘X’-’H’, 0, …,0, ‘X’-’E’] → ほとんど0
Courgette • 高効率のバイナリ差分を生成するアルゴリズムとその実 装 – 実行ファイルや命令の構造に依存 • Windows, Linux 向けの
Google Chrome の更新に利用 • Chromium に密結合。一般のプログラムには使いにくい – 使いやすくしたい • Developer Channel 190.1 → 190.4 の更新の差分ファイ ルのバイト数 [2]:
Courgette によるパッチ生成 • 1. 旧バイナリと新バイナリを逆アセンブル – バイナリ中の命令の call, jmp, mov,
je などの命令のアドレス情報 を取り出す – 元々のアドレス情報はプレースホルダーで置換 • 2. 旧新バイナリ間でのアドレス情報の対応付けを構成 – 旧と新の間でアドレス参照先のパターンが似ているものを Shingle を用いて検出 • 3. 出力 – プレースホルダーで置き換えられた新旧をbsdiff して出力 – 対応関係を出力
まとめと今後について • 実行バイナリファイルの差分アルゴリズムを理解しつ つ再実装 • 今後の課題 – Courgette の再実装 –
Courgette のアルゴリズムを使いやすくしたい • 光成さんやサイボウズラボの方々に感謝します
References • [1] 総務省 2019年度 通信利用動向調査 – https://www.soumu.go.jp/menu_news/s-news/ 01tsushin02_02000148.html •
[2] Software Updates: Courgette – http://dev.chromium.org/developers/design- documents/software-updates-courgette