ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

RustでBPF CO-RE - execsnoop(8) を移植してみる

前回の続きです。

udzura.hatenablog.jp

今回はlibbpf-toolsにあるexecsnoopのコマンドライン部分をRustに移植する。まず、Rustのworkspaceを使って以下のように execsnoop クレートを作成した。 bpf/ ディレクトリにBPFのプログラムを置く。

続きを読む

RustでBPF CO-RE - とりあえずビルドしてみるの巻

2020年は色々やったんですが、不甲斐なさも残りました。2021年も頑張ります(1行で去年の総括と今年の抱負)。

で、RustとBPF CO-RE、2つのsota(2020年末に覚えた言葉の一つ) をブログに書いて気炎を上げていきたい。

(はじめに: 半分自分メモのつもりなんです! という言い訳をしておきます。認識や用語など間違いがあれば突っ込んで...)

続きを読む

任意のライブラリコールでプログラムを停止し、起動用のCRIUイメージを作成するアプローチについて

経緯の説明

続きを読む

Rubyで構造体を扱う(ただし、Cの)。あとELFの話。

飛び入りです。Rubyアドベントカレンダーその2 17日目の記事です。昨日はなんとなく似たような(?)、 Rubyの8進数と2進数の構文エラー文の違い の話です。

qiita.com

今日はRubyで構造体、と言うか、バイナリパックされた構造体を扱う話の触りをします。class Structの話はしない。

さてみなさんは String#unpack/Array#pack を使ってますか?

docs.ruby-lang.org

すこく正直な話をすると、おそらく多くの方は使っていなくて、使っている方も大半はbase64文字列を生成する m フォーマットぐらいしか使っていないのではないかと推測しています。

["Hello World"].pack('m')
#=> "SGVsbG8gV29ybGQ=\n"

ぼくも今まではそうだったのですが、最近は他のフォーマットも急に使うようになりました。というのも、Cで扱う構造体、実質バイナリ列を簡単にRubyの世界に持っていく際に便利な代物だからです。去年の終わりからずっと ffiをガッツリ使ったgem の開発に勤しんでいるので、やや詳しくなってしまった。

ということで今日は構造体とffiとpack/unpackの話をしていきます。

今回の環境

Cの構造体をRubyで取り出そう

続きを読む