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
630
実行ファイルにおけるバイナリ差分 アルゴリズム/cybozulabs-youth10-minoji
Cybozu
PRO
March 31, 2021
Tweet
Share
More Decks by Cybozu
See All by Cybozu
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
74k
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
150
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
700
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
97
つけまが降ってきた日
cybozuinsideout
PRO
1
530
「行ってよかった!」をみんなに広げる
cybozuinsideout
PRO
0
180
サイボウズの QAエンジニアについて / about cybozu QA
cybozuinsideout
PRO
3
4.4k
不具合の先にある面白さ~配属3か月目の新卒QAのいま~
cybozuinsideout
PRO
0
460
kintone開発チームの紹介
cybozuinsideout
PRO
1
88k
Other Decks in Technology
See All in Technology
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
2.1k
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
110
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
390
Exadata Fleet Update
oracle4engineer
PRO
0
1.1k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
670
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
170
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
Agile Leadership Summit Keynote 2026
m_seki
1
680
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
150
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Designing for Performance
lara
610
70k
Raft: Consensus for Rubyists
vanstee
141
7.3k
Design in an AI World
tapps
0
150
Ruling the World: When Life Gets Gamed
codingconduct
0
150
First, design no harm
axbom
PRO
2
1.1k
How to train your dragon (web standard)
notwaldorf
97
6.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
Making Projects Easy
brettharned
120
6.6k
The Pragmatic Product Professional
lauravandoore
37
7.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
How GitHub (no longer) Works
holman
316
140k
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