プロジェクト

全般

プロフィール

CTF Binary » 履歴 » バージョン 1

kanata, 2025/04/13 14:30

1 1 kanata
# CTF Binary
2
3
{{rawhtml(<canvas id="map"></canvas><script src="/javascripts/pagemap.min.js"></script><script>pagemap(document.querySelector("#map"));</script>)}}
4
5
{{toc}}
6
7
# Command gadgets
8
9
- Binary解析
10
11
file string nm ldd
12
13
## vi
14
15
バイナリ編集
16
17
```
18
vi -b $1
19
20
:%!xxd
21
:%!xxd -r
22
```
23
24
## hexdump
25
26
C付けないとよくわかんないことになる
27
28
```
29
hexdump -v -C
30
```
31
32
## hexedit
33
34
- Ctrl-xで保存・終了
35
- Ctrl-cで終了
36
37
## od
38
39
16進数ダンプ
40
41
```
42
od -Ax -tx1z -v
43
od -txCa
44
```
45
46
## stringsで出力した文字を横並びで表示する
47
48
```
49
strings file |tr '\n' '\t'|fold -w 80
50
strings file |grep -v "\W"|tr '\n' '\t'|fold -w 80
51
strings file |sort|uniq|tr '\n' '\t'|fold -w 80
52
strings file |grep -v "\W"|sort|uniq|tr '\n' '\t'|fold -w 80
53
```
54
55
## readelf
56
57
とりあえず-aオプションをつけとけばいい。
58
59
~~~
60
readelf -a
61
~~~
62
63
## objdump
64
65
~~~
66
objdump -d
67
objdump -d -M intel binary_file > out.asm
68
~~~
69
70
>-M intel はintel記法で出力の意味
71
72
73
74
# gdb
75
76
## よく使うコマンド
77
78
ディスアセンブルする。なんとなく、if文とかの場所がわかる。
79
80
```
81
disassemble main
82
```
83
84
そこにブレークポイントを設定する。
85
86
```
87
b *0x000000000040059e
88
b *0x40059e
89
```
90
91
そこまで進める
92
93
```
94
run
95
```
96
97
値を出力して確認してみる
98
99
```
100
x/1s $esi
101
x/1s 0x4005a3
102
```
103
104
固定値が格納されているスタックの始まりのアドレスがわかったら、こんな感じで全部出力できる。(x/sは文字列の出力)
105
106
```
107
x/100s 0x400666
108
```
109
110
int型だったりすると、よくわかんないから16進数表現にすればいい。
111
112
```
113
x/100x 0x400666
114
```
115
116
任意の関数も呼べます
117
118
```
119
0x00000000004010df:  call   0x4006b6
120
```
121
122
だったら、
123
124
```
125
set $pc=0x4006b6
126
c
127
```
128
129
引数に$pcを指定すれば、直後に実行される命令列が見れる。
130
131
```
132
x/10i $pc
133
```
134
135
常にアセンブラとレジスタの値を表示しておくこともできる。ほとんどolly dbg
136
137
```
138
layout asm
139
layout reg
140
```
141
142
143
----
144
フラグレジスタ
145
146
条件ジャンプとフラグ
147
http://wisdom.sakura.ne.jp/programming/asm/assembly13.html
148
149
|フラグレジスタの内訳|意味             |
150
|--------------------|-----------------|
151
|ビット 11 (OF)      |オーバーフロー発生 |
152
|ビット 10 (DF)      | ストリング命令の方向を指定するフラグ 
153
|ビット 7 (SF)       | 演算結果が負 |
154
|ビット 6 (ZF)       | 演算結果がゼロ |
155
|ビット 2 (PF)       | 演算結果の奇数パリティ (1 が偶数個のときに立つ) |
156
|ビット 0 (CF)       | キャリー発生 / ボロー発生 |
157
158
なんだけど、リトルエンディアンなので、実際にはひっくり返ってる。
159
160
eflagsとかで表現されるが、setする時は$psになる。
161
162
状態表示
163
164
```
165
(gdb) i r
166
中略
167
eflags         0x202    [ IF ]
168
```
169
170
設定
171
172
```
173
set $ps=0x242
174
```
175
176
## オリジナルな.gdb.init
177
178
```
179
set disassembly-flavor intel
180
set follow-fork-mode child
181
set history save on
182
set history filename ~/.gdb_history
183
set history size 32768
184
set history expansion on
185
186
define xall
187
  i r eip esp ebp eax
188
  x/5i $eip
189
  x/32xw $esp
190
end
191
192
document xall
193
  Stack and disas helper
194
end
195
196
define xenv
197
  x/20s *environ
198
end
199
200
document xenv
201
  Print the environment variables
202
  from the stack
203
end
204
```
205
206
出力例
207
208
```
209
(gdb) xall
210
eip 0x80484d5 0x80484d5
211
esp 0xffffd290 0xffffd290
212
ebp 0xffffd2c8 0xffffd2c8
213
eax 0xffffd2a0 -11616
214
=> 0x80484d5: call 0x8048350 <read@plt>
215
   0x80484da: lea eax,[ebp-0x28]
216
   0x80484dd: mov DWORD PTR [esp],eax
217
0xffffd290: 0x00000000 0xffffd2a0 0x00000032 0x08048319
218
0xffffd2a0: 0xffffd516 0x0000002f 0x0804a000 0x08048562
219
0xffffd2b0: 0x00000001 0xffffd374 0xffffd37c 0xf7e3b42d
220
221
(gdb) xenv
222
0xffffd52b: "XDG_VTNR=7"
223
0xffffd536: "XDG_SESSION_ID=c2"
224
0xffffd5b2: "SHELL=/bin/bash"
225
```
226
227
## gdb scriptの利用
228
229
打ち込みたいコマンドをメモしておいて,gdb起動と併せて実行できる。
230
231
```
232
$ gdb –q –x scriptfile ./binary
233
```
234
235
## アセンブラプログラムのデバックの方法
236
http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/kikaigo2008/gdb.pdf
237
238
アセンブラプログラムのデバックは、gdb(gnu debugger)を使って行うことができます。
239
240
ブレークポイントの設定と実行開始
241
課題のプログラムは main から始まるので、まず、ここで停止するように、break コマンドでmain にブレークポイントを設定します。(gdb)とプロンプトがでるので、ここで、
242
243
```
244
(gdb) break main
245
```
246
247
と入力します。次に、run コマンドmain まで実行します。
248
249
```
250
(gdb) run
251
```
252
253
すると、実行が始まり、main で停止するはずです。
254
プログラムのdisassembleここで、プログラムがどのようなコードになっているかについて、確認してみましょう。メモリ上の機械語になったプログラムをアセンブリプログラムで表示するのがdisassemble コマンドです。
255
disassemble とは、アセンブルの反対、つまり、機械語からアセンブラに直すことです。main から始まるプログラムをdisassemble してみましょう。
256
257
```
258
(gdb) disassemble main
259
```
260
261
main のところに、任意のラベル名を書くことでそのプログラムをdisassemble することができます。
262
プログラムのステップ実行1命令づつ実行するコマンドが、stepi です。
263
264
```
265
(gdb) stepi
266
```
267
268
ここで、stepi コマンドを実行するごとに1命令づつ実行されているのがわかるはずです。
269
レジスタの表示step 実行している途中で、レジスタの表示をして見ましょう。表示には2つの方法があります。
270
271
```
272
(gdb) info registers
273
```
274
275
では、すべてのレジスタの表示を行います。個別のレジスタを表示する場合には、
276
277
```
278
(gdb) print $レジスタ名
279
```
280
281
で表示させることができます。
282
実行の再開、ブレークポイントの設定continue コマンドは実行を次のブレークポイントまで(もしくは終わりまで)、実行を再開するコマン
283
ドです。
284
285
```
286
(gdb) continue
287
```
288
289
さて、main にブレークポイントを設定しましたが、main の代わりにラベル名を書くことで、そのラベルの前で実行を止めることができます。また、アドレスを指定したい場合には
290
291
```
292
(gdb) break *アドレス
293
```
294
295
で任意のアドレスで実行を中断することができます。
296
297
データの表示
298
データの表示を行うコマンドが x コマンドです。
299
300
```
301
(gdb) x アドレス
302
```
303
304
で、アドレスの内容をプリントすることができます。x のあとには、データ表示のフォーマットができて、例えば、x/のあとに、表示するデータの数、10 進(d)、16進(x)、8進(o)とそのあとに、b(byte), h(half), w(word)と指定します。たとえば、
305
306
```
307
(gdb) x/10dw 0x10000
308
```
309
310
では、0x10000 番地から、32 ビットごと(w)に10進(d)で、10ワード表示するという意味になります。詳しくは、help x としてみてください。他のコマンドについても、help コマンドで調べることができます。
311
312
```
313
(gdb) x/1s $esi
314
0x804c757:       "visilooksgoodinhotpants"
315
```
316
317
で、レジスタの指し先が出力されます。
318
319
320
## gdb参考
321
322
ももいろテクノロジー - gdbの使い方のメモ 
323
http://inaz2.hatenablog.com/entry/2014/05/03/044943
324
325
gdbについて 
326
http://tech-hack-maswag.blogspot.jp/2013/03/gdb.html?m=1
327
328
オンラインgdb
329
https://www.onlinegdb.com/
330
331
epasveer/seer
332
https://github.com/epasveer/seer
333
334
>Qt実装のgdbのGUIフロントエンド
335
336
337
# 最低限これだけ覚えておけばきっと解析できる命令 
338
339
よく使うASM命令ベスト100位に説明つけてみた
340
http://wiki.onakasuita.org/pukiwiki/?%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86ASM%E5%91%BD%E4%BB%A4%E3%83%99%E3%82%B9%E3%83%88100%E4%BD%8D%E3%81%AB%E8%AA%AC%E6%98%8E%E3%81%A4%E3%81%91%E3%81%A6%E3%81%BF%E3%81%9F
341
342
# CPU architecture
343
344
x86
345
>ハンド (逆) アセンブルを補助するための PDF リスト!
346
http://d.hatena.ne.jp/a4lg/20120225/1330180431 http://dl.dropbox.com/u/2476414/TechResources/x86_opcodemap_1_a4.pdf
347
>コンピュータアーキテクチャ
348
http://ist.ksc.kwansei.ac.jp/~ishiura/arc/ http://ist.ksc.kwansei.ac.jp/~ishiura/arc/n4.pdf
349
>0F拡張チートシート
350
http://shiho-elliptic.tumblr.com/post/108012619924/0f http://elliptic-shiho.xyz/0F%20Opcode.pdf
351
352
ARM
353
>[組み込み]ARMの場合、アセンブラが解れば機械語も解るCommentsAdd Star
354
http://d.hatena.ne.jp/kmt-t/20091105/1257380555 http://re-eject.gbadev.org/files/armref.pdf
355
356
機械語命令が ?? ?? ?? e? (リトルエンディアンなので、本当は 0xe? が先頭)になっているので、判別しやすい。
357
358
SPARC
359
>AWKによるSPARC V8逆アセンブラ
360
http://keisanki.at.webry.info/201001/article_2.html
361
362
PowerPC
363
>玄箱でアセンブリ 1 - はじめに
364
http://www.mztn.org/ppcasm/ppcasm01.html http://www.freescale.com/files/32bit/doc/ref_manual/MPC603EUM.pdf http://www.freescale.com/files/32bit/doc/ref_manual/G2CORERM.pdf
365
>Cell Broadband Engine アーキテクチャ
366
http://cell.scei.co.jp/pdf/CBE_Architecture_v102_j.pdf
367
>アセンブリ言語、はじめの一歩
368
http://www.comp.tmu.ac.jp/morbier/comparch/assem1new.html http://www.comp.tmu.ac.jp/morbier/comparch/6xx_pemchap8.pdf
369
370
MIPS
371
>コンピュータアーキテクチャ
372
http://ist.ksc.kwansei.ac.jp/~ishiura/arc/ http://ist.ksc.kwansei.ac.jp/~ishiura/arc/n3.pdf
373
>はじめて読むMIPS(リローデッド)
374
http://www.cqpub.co.jp/interface/TechI/Vol39/app/mips_asm.pdf
375
>MIPS I の命令形式
376
http://www.weblio.jp/wkpja/content/MIPS%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3_MIPS+I+%E3%81%AE%E5%91%BD%E4%BB%A4%E5%BD%A2%E5%BC%8F
377
378
MMX
379
>0から作るソフトウェア開発(をgoogle先生の検索で調べる)
380
https://www.google.co.jp/search?hl=ja&as_qdr=y15&lr=lang_ja&num=100&q=site:softwaretechnique.jp%200x0F&gws_rd=ssl
381
382
Z80
383
>8ビット CPU Z80命令セット
384
http://www.yamamo10.jp/yamamoto/comp/Z80/instructions/index.php
385
386
# x86
387
388
## x86 - 解説
389
390
神解説
391
392
x86-64機械語入門
393
https://zenn.dev/mod_poppo/articles/x86-64-machine-code
394
395
トリコロールな猫 - OllyDbgを使ってx86アセンブラを学ぶシリーズ
396
https://note.mu/nekotricolor
397
398
GNU/Linux (x86/x86-64) のシステムコールをアセンブラから呼んでみる
399
https://blog.amedama.jp/entry/linux-system-call-assembler
400
401
Linux システムコール 徹底入門
402
https://www.kimullaa.com/entry/2020/01/05/191221
403
404
x86-64 Assembly入門
405
https://speakerdeck.com/latte72/x86-64-assembly-essentials
406
407
---
408
神無料サンプル
409
410
31バイトでつくるアセンブラプログラミング: アセンブラ短歌の世界
411
https://play.google.com/store/books/details/%E5%9D%82%E4%BA%95%E5%BC%98%E4%BA%AE_31%E3%83%90%E3%82%A4%E3%83%88%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0?id=6aqYAgAAQBAJ&hl=ja
412
413
> Google Play の無料サンプルが、ちょうどいい感じの所まで読める。
414
415
---
416
神チートシート
417
418
d.sunnyone.org - x86/x86_64関数呼び出しチートシートを書いた 
419
http://d.sunnyone.org/2012/09/x86x8664.html
420
421
Windows X86 System Call Table (NT/2000/XP/2003/Vista/2008/7/8/10)
422
http://j00ru.vexillium.org/syscalls/nt/32/
423
424
解答略 @kaitou_ryaku x86の機械語をざっと見渡すには、このpdfが世界で一番整理されてると思う。
425
https://twitter.com/kaitou_ryaku/status/1067424249814540288
426
427
ハンド (逆) アセンブルのための x86 ニーモニックの覚え方
428
http://d.hatena.ne.jp/a4lg/20120225/1330180431
429
430
X86 Opcode and Instruction Reference
431
http://ref.x86asm.net/coder64.html
432
433
434
435
## レジスタ一覧
436
437
X86アセンブラ/x86アーキテクチャ
438
http://ja.wikibooks.org/wiki/X86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9/x86%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
439
440
X86_64のレジスタ
441
http://www.mztn.org/lxasm64/amd04.html
442
443
## レジスタ
444
445
| レジスタ | ビット | 
446
|----------|--------|
447
| eax      | 000    |
448
| ecx      | 001    |
449
| edx      | 010    |
450
| ebx      | 011    |
451
| esp      | 100    |
452
| ebp      | 101    |
453
| esi      | 110    |
454
| edi      | 111    |
455
456
## 基本の命令の形
457
458
http://ist.ksc.kwansei.ac.jp/~ishiura/arc/n4.pdf
459
460
複雑
461
462
レジスタ=レジスタ+即値
463
464
| 8    | 2                     | 3        | 3        | 8    |
465
|------|-----------------------|----------|----------|------|
466
| 命令 | reg or 即値フラグ(11) | レジスタ | 000      | 即値 |
467
468
| 8    | 2                     | 3        | 3        | 32   |
469
|------|-----------------------|----------|----------|------|
470
| 命令 | reg or 即値フラグ(11) | レジスタ | 000      | 即値 |
471
472
| 8    | 32   |
473
|------|------|
474
| 命令 | 即値 |
475
476
レジスタ=レジスタ+レジスタ
477
478
| 8    | 2                     | 3        | 3        |
479
|------|-----------------------|----------|----------|
480
| 命令 | reg or 即値フラグ(11) | レジスタ | レジスタ |
481
482
レジスタ=レジスタ+主記憶
483
484
ややこしいので略(pdf参照)
485
486
## よく使う命令
487
488
https://dl.dropboxusercontent.com/u/2476414/TechResources/x86_opcodemap_1_a4.pdf
489
490
| 命令 | OP     | Note |
491
|------|--------|------|
492
| mov  | b or 8 |
493
| push | 5[0-7] or 68 or 6A |
494
| pop  | 5[8-F] |
495
| add  | 0[0-5] | 
496
| xor  | 3[0-5] |
497
| nop  | 90     |
498
| int  | cd     |
499
| ret  | c3     |
500
501
システムコール
502
>%EAXにシステムコール番号を入れて int 0x80 する。必要な引数は、%EBX %ECX %EDX に入れたりする。
503
>writeシステムコールの戻り値は、%EAXに入る(文字数が入る)
504
505
関数復帰
506
>ABIで決められているが、%EBX %ESP は、関数呼び出し前の値に戻して置かなければいけない。
507
>ret前に%EAXには関数の復帰値を入れる必要がある
508
509
## 様々な代入法
510
511
movで即値(5byte)
512
513
```
514
mov $0x1 %eax
515
```
516
517
xorで初期化後に、レジスタ下位バイト(8bit)代入(2Byte+2Byte)
518
519
```
520
xor %eax %eax
521
mov %al
522
```
523
524
スタックにpushしてpop(2byte+1byte)
525
526
```
527
push $8
528
pop %eax
529
```
530
531
## アセンブラ短歌
532
533
簡単なのは、ここで試せる(JavaScriptエミュレーション方式)
534
http://07c00.com/asmtanka_on_js/
535
536
SECCON - Assembly Tanka on Web
537
ちょと込み入ってても、こっちでも試せる(SandBox方式)
538
http://x86.seccon.jp/99.html
539
540
x86でwriteシステムコールにより、文字を出力する方法
541
542
- %EAXに4(writeシステムコールの意味)を設定
543
- %EBXに1(標準出力の意味)を設定
544
- %ECXに表示する文字の先頭アドレスを設定
545
- %EDXに出力する文字の長さを設定
546
- int 0x80(システムコール)を実行
547
548
その後
549
550
- %EAXにはwriteした文字数が設定される
551
- retする前に%EAXには関数復帰値を設定する
552
- %EBXは関数呼び出し前の値を保証するようABIに定められている。つまり、%EBXの値は元に戻す必要がある。
553
554
# クロスコンパイル/実行環境
555
556
## Article
557
558
七誌の開発日記 - 全部入りbinutils
559
http://7shi.hateblo.jp/entry/2013/07/30/011348
560
561
ももいろテクノロジー - x86/x86-64/ARM/AArch64/PowerPC/PowerPC64のアセンブリコードを読んでみる
562
http://inaz2.hatenablog.com/entry/2015/11/21/182410
563
564
gotbolt - C → 様々なASMのリアルタイムオンラインコンパイラー。アセンブリ・REを勉強している方におすすめ
565
https://godbolt.org/
566
567
GitHub - shutingrz/busybox-static-binaries-fat
568
https://github.com/shutingrz/busybox-static-binaries-fat
569
570
## gdb
571
572
kozosより
573
574
[cross-gcc4-20130826.zip をインストール済みのCentOS6.5イメージ (OVAフォーマット)](http://kozos.jp/vmimage/burning-asm.html)
575
[FreeBSDのVirtualBox用イメージを,OVAフォーマットにしたもの](http://kozos.jp/vmimage/)
576
577
### Memo
578
579
ももいろテクノロジー - 各種アーキテクチャのクロスコンパイラ環境を構築する
580
http://inaz2.hatenablog.com/entry/2015/12/01/204201
581
582
## QEMU
583
584
### Memo
585
586
組み込みの人 - Aarch64で遊ぶ最も手軽な方法
587
http://d.hatena.ne.jp/embedded/20140819/p1
588
589
> dockerからのqemu
590
591
katagaitai CTF勉強会|hard
592
https://atnd.org/events/71808
593
594
> [fon.tar.gz](https://github.com/ctfs/write-ups-2014/blob/master/31c3-ctf-2014/pwn/nokia-1337/fon.tar.gz?raw=true)が、QEMU環境
595
596
> 動的解析できる別の ARM環境[このリンク先](http://pastebin.com/S9ssvy11)に手順を用意しています
597
598
599
ももいろテクノロジー - qemu-debootstrapを使ってユーザモードQEMUで動くDockerイメージを作ってみる
600
http://inaz2.hatenablog.com/entry/2015/11/26/220948
601
602
# Androidアプリの逆コンパイル
603
604
メモ
605
606
* [dex2jar](http://sourceforge.net/projects/dex2jar/) デコンパイラ
607
* jd-gui  ソースを読む
608
* [apktool](http://ibotpeaches.github.io/Apktool/) リバースエンジニアリングツール
609
610
BYTECODE VIEWER (AN ADVANCED YET USER FRIENDLY JAVA REVERSE ENGINEERING SUITE.)
611
http://bytecodeviewer.com/
612
613
改造apk(MOD)の作り方 & その対策 - Qiita
614
https://qiita.com/yukiarrr/items/764adb88f5a485f714d8
615
616
1,000行で作るオペレーティングシステム
617
https://seiya.me/blog/operating-system-in-1000-lines
618
619
620
621
622
# .NETの逆コンパイル
623
624
メモ
625
626
ILSpy
627
http://ilspy.net/
628
629
dnSpy
630
https://github.com/0xd4d/dnSpy/releases/tag/v5.0.0 [凄すぎて大草原不可避な.NET デコンパイラdnSpyを使ってみる](https://qiita.com/NetSeed/items/54fbf30cb21c77c05c41)
631
632
Reflexil
633
http://reflexil.net/
634
635
# Javaバイトコード
636
637
知らなくても困らない Javaクラスのバイトコードの読み方
638
http://etc9.hatenablog.com/entry/2017/11/02/231509
639
640
# WebAssembly
641
642
WebAssembly所感
643
https://zenn.dev/qnighy/articles/de8784dfeacde9
644
645
# Misc
646
647
コンピュータアーキテクチャ
648
http://ist.ksc.kwansei.ac.jp/~ishiura/arc/
649
650
Hexinator というCTFのために生まれてきたようなバイナリエディタ
651
https://hexinator.com/
652
653
POSTD - システムコールを経由する生のLinuxスレッド
654
http://postd.cc/raw-linux-threads-via-system-calls/
655
656
Programming Field - スタック
657
http://pf-j.sakura.ne.jp/program/stack.htm
658
659
POSTD - Linuxシステムコール徹底ガイド
660
http://postd.cc/the-definitive-guide-to-linux-system-calls/
661
662
組み込みの人。 - gdbで標準ライブラリの中を探検する
663
http://d.hatena.ne.jp/embedded/20130120/p1
664
665
ニコナレ - 機械学習を支えるx86-64の拡張命令セットを読む会
666
http://niconare.nicovideo.jp/watch/kn2333
667
668
C言語の文字列はどこに?-ELFバイナリに見る実行プログラムの挙動-
669
https://drumato.hatenablog.com/entry/2019/05/03/111608
670
671
オブジェクトファイルのシンボルテーブルを最低限理解する。
672
https://drumato.hatenablog.com/entry/2019/05/16/201234
673
674
strace コマンドの使い方をまとめてみた
675
http://blog.livedoor.jp/sonots/archives/18193659.html
676
677
定番のデバッグ・調査ツールであるstraceでエラーインジェクション
678
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0762?utm_source=feed
679
680
【CTF入門】ELFバイナリのリバースエンジニアリングに入門してみよう
681
https://yukituna.com/3711/
682
683
6502 アセンブラ プログラミング入門
684
https://euske.github.io/slides/asm6502/index.html
685
686
ふつうのLinuxプログラミング-プロセスとハードウェア
687
https://speakerdeck.com/sksat/hutuufalselinuxpuroguramingu-purosesutohadouea
688
689
Linux システムコール 徹底入門
690
https://www.kimullaa.com/posts/202001051012/
691
692
eBPFのリバースエンジニアリング入門
693
https://engineering.mercari.com/blog/entry/20240228-b47712375d/
694
695
ゼロからのハイパーバイザ自作入門
696
https://zenn.dev/hidenori3/books/55ce98070299db