ずっとぶっ壊れたままだったbtrfsをいい加減直そうと思い,pokeに入門した。
自分は普段からバイナリを弄るために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 as3#B
, and “three bits” as3#b
.
offset
等の量を指定するには単位が要るらしい。ふーん。
なるほどね。
Btrfs pickle
本題。
<linux/btrfs_tree.h>
を参考にbtrfs.pk
を書いた。
type a = b