2017-12-28 16 views
0

와츠를 컴파일 할 때 emscripten이 나에게 모든 섹션에 맞는 크기를 준다. 본 명세서에서는 원시 바이트 코드에서 모든 섹션의 끝 부분에 섹션 크기를 포함시켜야한다고 명시하지 않습니다. 조금 혼란스러워. FIXUP을 생략하거나 뒤에있는 이유는 무엇입니까? 섹션 코드 직후의 섹션 크기는 0입니다. 섹션을 읽기 전에 크기를 알고 있어야합니까? 이해가되지 않습니까? 두 섹션 크기의 순서가 바뀌어야한다고 생각합니다.웹 어셈블리 수정 섹션 크기가 각 섹션의 끝에 있습니까?

몇 가지 통찰력을 고맙게 생각합니다.

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은 바이너리를 한 번에 생성하기 때문에 섹션 크기를 생성해야 할 때 섹션 크기를 아직 알지 못합니다. 따라서 각 섹션이 완성되고 크기가 알려지면 00을 쓰고 백 패치합니다.