2017-12-28 7 views
0

ワームをワームにコンパイルするとき、emscriptenはすべてのセクションにFIXUPサイズを与えます。この仕様では、生のバイトコードでセクションのサイズをすべてのセクションの最後に含める必要があることは決してありません。私はここで少し混乱している。 FIXUPを省略したり、その背後にある理由は何ですか?セクションコードの直後のセクションサイズは0です。セクションを読む前にサイズを知っていてはいけませんか?理にかなっていないのですか?私は、2つのセクションサイズの順序を逆にする必要があるように感じます。ウェブアセンブリのフィックスアップセクションのサイズは、各セクションの最後にありますか?

いくつかの洞察をいただければ幸いです。

0000029: 00          ; section code 
000002a: 00          ; section size (guess) 
000002b: 04          ; string length 
000002c: 6e61 6d65        name ; custom section name 
0000030: 01          ; function name type 
0000031: 00          ; subsection size (guess) 
0000032: 01          ; num functions 
0000033: 00          ; function index 
0000034: 06          ; string length 
0000035: 6164 6454 776f       test ; func name 0 
0000031: 09          ; FIXUP subsection size 
000003b: 02          ; local name type 
000003c: 00          ; subsection size (guess) 
000003d: 01          ; num functions 
000003e: 00          ; function index 
000003f: 01          ; num locals 
0000040: 00          ; local index 
0000041: 00          ; string length 
000003c: 05          ; FIXUP subsection size 
000002a: 17          ; FIXUP section size 

答えて

1

注意左側のバイトオフセット:すべての行は、FIXUPが以前0として書かれており、「推測」としてマークされたバイト位置を参照してくださいマークしました。

他のWasmジェネレータと同様に、Emscriptenはバイナリを1回のパスで生成します。つまり、セクションサイズが生成されなければならないことはまだ分かりません。したがって、それぞれのセクションが完成してそのサイズが分かると、00と書き戻します。

関連する問題