@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WebAssembly text formatからwasmバイナリをつくる環境を整える

wasmバイナリのカスタムセクションを書いてみる - @ledsun blog でプリアンブルとセクションを持つwasmバイナリを書き出せるようになりました。 最低限のwasmバイナリファイルの構造を理解したといえます。

お題

Writingの次はReadingです。 シンプルなwasmバイナリを作って読んでみましょう。

WebAssemblyにはテキストフォーマットがあります。 たとえば、最小では次の文字列です。

(module)

このテキストフォーマットからどのようなwasmバイナリが生成されるのでしょうか?

  1. プリアンブルだけのバイナリ 0x00 0x61 0x73 0x6D 0x01 0x00 0x00 0x00になる
  2. 何かしらのセクションがつく

どちらになるでしょうか?

手法

WebAssembly text formatからwasmバイナリを生成してみましょう。 Converting WebAssembly text format to Wasm - WebAssembly | MDNによると、wabtというwasmバイナリ用のツールがあるようです。 これを使えばテキストフォーマットからwasmバイナリが作れそうです。

wabtのインストール

わたしの環境はWSL上のubuntuです。

リポジトリのClone

git clone --recursive https://github.com/WebAssembly/wabt
cd wabt
git submodule update --init

ビルドツールのインストール

CMakeninja-buildが必要です。 それぞれインストールします。

CMake

sudo apt install cmake
確認
►cmake --version
cmake version 3.22.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

ninja-build

sudo apt install ninja-build
確認
►ninja --version
1.10.1

ビルド

make

確認

►bin/wat2wasm --version
1.0.33 (git~1.0.33-31-gbceb2434)

検証

wabtにふくまれるwat2wasmを使って、WebAssembly text formatからwasmバイナリを生成します。

バイナリファイルを生成

echo '(module)' > minimam.wat
~/wabt/bin/wat2wasm minimam.wat -o minimam.wasm

バイナリファイルを確認

►hexdump -C minimam.wasm
00000000  00 61 73 6d 01 00 00 00                           |.asm....|
00000008

正解は 1. プリアンブルだけのバイナリ 0x00 0x61 0x73 0x6D 0x01 0x00 0x00 0x00になる でした。

参考