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
バイナリダンプの模様を読む
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Satoru Takeuchi
PRO
July 01, 2026
Technology
68
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
バイナリダンプの模様を読む
以下動画のスライドです
https://youtu.be/0coXcaoMSjw
Satoru Takeuchi
PRO
July 01, 2026
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Machine Check Exception
sat
PRO
2
36
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
54
114-ファイルのshallow_copy.pdf
sat
PRO
2
38
113-Btrfsのスナップショット.pdf
sat
PRO
0
16
システム強制終了時にファイルシステムの整合性を保つ~ コピーオンライト編 ~
sat
PRO
0
59
システム強制終了時に ファイルシステムの整合性を保つ ~ ジャーナリング編 ~
sat
PRO
2
63
ファイルシステムの整合性を回復するfsck
sat
PRO
1
65
小学校5,6年生向けキャリア教育 大人になるまでの道
sat
PRO
8
5.3k
ファイルシステムの不整合
sat
PRO
2
160
Other Decks in Technology
See All in Technology
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
240
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
810
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5.1k
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
400
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.8k
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
410
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
320
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
300
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
Are puppies a ranking factor?
jonoalderson
1
3.7k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
AI: The stuff that nobody shows you
jnunemaker
PRO
8
830
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
BBQ
matthewcrist
89
10k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
ラッコキーワード サービス紹介資料
rakko
1
3.9M
Transcript
バイナリダンプの模様を読む Jul. 2nd, 2026 Satoru Takeuchi X: satoru_takeuchi 1
• 任意のデータを数値や文字として出力したもの • 人間が与えた意味(どのオフセットどんなデータがあるとか)をツールが解釈せず、 データをただのバイト列という形で読むためのもの • 使用例 ◦ データが期待通りのかたちでバイト列に変換されているかの確認 ◦
データ破壊が起きた場合の調査 ◦ 何を意味しているのか分からないデータの解析 バイナリダンプとは 2
文字列データのバイナリダンプ 3 $ cat hello.txt Hello, world! $ xxd hello.txt
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 210a Hello, world!. $
画像データ(png)の先頭部分 4 $ xxd -l 64 niconico.png 00000000: 8950 4e47
0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0058 0000 0050 0806 0000 009d c6b2 ...X...P........ 00000020: 5900 0000 0173 5247 4200 aece 1ce9 0000 Y....sRGB....... 00000030: 0004 6741 4d41 0000 b18f 0bfc 6105 0000 ..gAMA......a… $
ランダムデータの場合 5 $ dd if=/dev/random of=random.data bs=64 count=1 … $
xxd random.data 00000000: 2f5c 7530 7953 159a 4e13 516b a5be 618c /\u0yS..N.Qk..a. 00000010: d012 9c19 a8b8 ef57 dcdc ea85 4b86 fa80 .......W....K... 00000020: 1a45 9e84 bed4 38dd 93f2 17d0 a2aa 5d1d .E....8.......]. 00000030: 84f7 7fbb 8f74 734a 19e1 f754 1632 2e26 .....tsJ...T.2.& $
バイナリダンプの模様 • 同じような形式のバイナリダンプを眺め続けると次第に浮かんでくるもの ◦ バイナリダンプのどこにどんなデータがあるかが識別できる • 正式に定義された言葉ではない ◦ たぶん「目grep」という言葉のほうが有名 •
📝 メモリダンプと模様が見える男 ◦ https://note.com/hkamezawa/n/na4a01c712142 6
わたしが見える模様を実例として紹介 • Linuxカーネルのプロセスのスタックをバイナリダンプしたときに見える模様 ◦ スタックは関数呼び出し履歴やローカル変数などコンテキストを保存する領域 ◦ Linuxカーネルはプロセス (正確にはスレッド)ごとにスタックが存在する • 例えばどういうときに読むか
◦ Linuxカーネルに問題が発生して異常終了した (Windowsでいうブルースクリーン )ときにkdumpと言 うツールでシステムのメモリを全てファイルにダンプする ◦ 再起動後に、そのファイルを crashなどのツールを使って解析する ▪ 📝 その80 動作中にLinux環境の全メモリを見る ◦ 解析の一環としてプロセスのカーネルスタックをバイナリダンプして読むことがある • カーネル: Ubuntu 24.04同梱のLinux v6.8.0-117-generic • ややこしい話なので完全理解しようとせずフィーリングで観てほしい 7
状況 • ファイルコピーなどに使うddコマンドがwriteシステムコール呼び出しの延長で長時 間戻ってこない状態になる ◦ SIGKILLでも殺せない、いわゆる D state • その後システムが異常終了
• 異常終了に上記プロセスが関わっているかを知りたい ◦ 📝 わかりやすさのために通常の調査の流れと変えているところが多々あります 8
ddのスタックのバイナリダンプの抜粋 • スタックが0xffffd137cbfd8000から16KiBだとする 9
ぐっとにらむと模様が見える 10
ぐっとにらむと模様が見える 11 • プロセスごとに存在するアーキテクチャ依存の情報を保持する thread_infoという構造体へのポインタ • スタックの頂上(最低位アドレス)に置くことが決まっている
ぐっとにらむと模様が見える 12 • システムコールを呼び出し時のシステムコールおよびレジスタの値 (ピンクの部分) • CPU、およびentry_SYSCALL_64_after_hardwareが • スタックの底(最高位アドレス)から数十バイトに積むことが決まっている
ぐっとにらむと模様が見える 13 • entry_SYSCALL_64_after_hwframeからdo_syscall_64を呼んだ際の戻りアドレス • CPUのCALL命令を呼んだら自動的に積まれるようになっている
ぐっとにらむと模様が見える 14 • do_syscall_64のスタックフレーム(ローカル変数などが入る領域 )へのポインタ • カーネルのビルド設定 CONFIG_FRAME_POINTERが有効ならこうすると決まっている do_syscall_64から何らかの関数を呼んだときの戻りアドレス
ぐっとにらむと模様が見える 15 do_syscall_64から何らかの関数を呼んだときの戻りアドレス • do_syscall_64のスタックフレーム(ローカル変数などが入る領域 )へのポインタ • カーネルのビルド設定 CONFIG_FRAME_POINTERが有効ならこうすると決まっている •
スタックフレームのポインタらしきものとコードのアドレスらしきものが並んでいれば関数呼び 出しと、その後に呼ばれる呼び出し元のスタックフレームのアドレスが並んでいると推測できる • どのアドレスがどこの領域のものかはルールが決まっている ◦ https://github.com/torvalds/linux/blob/v6.8/Documentation/arch/x86/x86_64/mm.rst
ぐっとにらむと模様が見える 16 前述のルールに従うとこのデータ (0xffff8dc8105a5840)も恐らくカーネ ル内のコード or データであろうことがわかる
ぐっとにらむと模様が見える 17 • schedule関数からプロセスをスリープさせる __scheduleを呼んだ時の戻りアドレス • プロセスのスリープ前に呼ぶ関数は schedule → __scheduleなので、スタックフレームをこれ
以上先にたどれないときは、これらが最後 2つの関数だと推測できる
重要なポイント • 一種の覚えゲーである ◦ データのバイトオフセットやデータのパターンは何らかの仕様で決まっていることが多い • できると万能感と多幸感がある • たくさん同じようなデータを眺めていれば自然とできるようになる ◦
できる人は天才とかそういうことはない ◦ どこまで模様が鮮明なのかは人による • 普通はできなくても困らず、だいたいは楽できるコマンドがある ◦ 例: crashでスタックを見るにも関数呼び出し履歴を出力する btコマンド • 稀にバイナリダンプが最後の望みの綱ということがある 18
まとめ • バイナリダンプを眺めていると模様が浮かぶことがある ◦ 目grepができる、とも表現する • 模様が浮かぶと便利だが、いつも必要というわけではない • 慣れると誰でもできるが鮮明度は人それぞれ •
できるとかっこいいので、興味があればフォーマットが決まっている適当なバイナリ ダンプを何十個か眺めてみてほしい 19