# Solana で特定のプログラムの BPF バイナリをダンプする方法 Solana で特定のプログラムの BPF バイナリを取得する方法は無いのかと思い、 [JSON-RPC](https://docs.solana.com/developing/clients/jsonrpc-api) を確認したのですがそのようなことを実現する API は存在しませんでした。公式の Discord で質問した結果、 CLI ツールから特定のプログラムの BPF バイナリのダンプは実現できることが分かりました。 CLI ツールの該当する処理はこちらです。 https://github.com/solana-labs/solana/blob/master/cli/src/program.rs#L1235-L1304 bpf_loader に色々とバージョンがあり、そのバージョンごとに処理を分けているようです。 以下を実行すると、 `accout address` 渡したプログラムの BPF バイナリを `output filepath` にダンプすることができます。必要に応じて、`solana config` で RPC URL を変更しておきましょう。 ```:bash solana program dump <account address> <output filepath> ``` 実際に Serum V3 Program のダンプを試みた結果が以下になります。 ![](https://i.imgur.com/bMzAW1A.png) 次に、出力されたファイルのシンボルテーブルを確認します。 ![](https://i.imgur.com/1gjIh9e.png) `entrypoint` が定義されていることが分かりますね。 最後に、LLVMのツールを利用して、出力されたファイルの `objdump` をしてみます。 ![](https://i.imgur.com/ndRs3hP.png) BPF バイナリがきちんと出力されていることが分かります。 ## 参考文献 - [eBPF assembly with LLVM](https://qmonnet.github.io/whirl-offload/2020/04/12/llvm-ebpf-asm/)