切腹のイラスト

pokeでbtrfsを弄る

{
  date: "",
  category: "/unix-like"
}

ずっとぶっ壊れたままだったbtrfsをいい加減直そうと思い,pokeに入門した。

壊れたbtrfs

自分は普段からバイナリを弄るためにhyxというソフトウェアを使用している。 Vim風のシンプルなエディタで大変重宝していたのだが,btrfsを弄るにはちょっとキツかった。 かといってファイルをアドホックに弄る為だけにC++やRustを書くのは実にかったるい。

そこで,バイナリをREPLでいい感じにつんつんできる環境としてのpokeの出番である。 とっつき難くて今まで入門すらしてなかったが,やっと使い所さんを理解できた気がする。

入門

基本はマニュアルに全部書いてあるが,個人的にわかりづらかったところだけ抜粋。

… we came to realize that offsets and data sizes in Poke should not be pure magnitudes or mere integer values: they should be united. They should have units.

The syntax that we eventually used to denote united values is to specify the magnitude part, a hash ('#' character, and then the unit. For example, the size “three bytes” is expressed as 3#B, and “three bits” as 3#b.

offset等の量を指定するには単位が要るらしい。ふーん。

pokeの次元

なるほどね。

Btrfs pickle

本題。

<linux/btrfs_tree.h>を参考にbtrfs.pkを書いた。

type a = b