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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Cybozu
PRO
March 31, 2021
Technology
660
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実行ファイルにおけるバイナリ差分 アルゴリズム/cybozulabs-youth10-minoji
Cybozu
PRO
March 31, 2021
More Decks by Cybozu
See All by Cybozu
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
280
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
82k
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
80
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
360
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
890
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.3k
LLMアプリの品質保証
cybozuinsideout
PRO
1
630
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
240
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
210
Other Decks in Technology
See All in Technology
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
450
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
110
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
20260619 私の日常業務での生成 AI 活用
masaruogura
1
190
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
140
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.4k
人材育成分科会.pdf
_awache
2
170
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
120
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
170
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
150
やさしいA2A入門
minorun365
PRO
12
1.8k
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
110
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Are puppies a ranking factor?
jonoalderson
1
3.5k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Making the Leap to Tech Lead
cromwellryan
135
9.9k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
180
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
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