Как загрузить «Hello World» в раздел «.data» в WebAssembly wast - PullRequest
0 голосов
/ 06 июля 2018

Я смотрю на тесты WebAssembly и вижу это для data:

(module
  (memory $m 1)
  (data (i32.const 0))
  (data (i32.const 1) "a" "" "bcd")
  (data (offset (i32.const 0)))
  (data (offset (i32.const 0)) "" "a" "bc" "")
  (data 0 (i32.const 0))
  (data 0x0 (i32.const 1) "a" "" "bcd")
  (data 0x000 (offset (i32.const 0)))
  (data 0 (offset (i32.const 0)) "" "a" "bc" "")
  (data $m (i32.const 0))
  (data $m (i32.const 1) "a" "" "bcd")
  (data $m (offset (i32.const 0)))
  (data $m (offset (i32.const 0)) "" "a" "bc" "")
)

Хотите знать, как будет выглядеть "Hello World" в разделе data. Я новичок в этой низкоуровневой функциональности. Что-то вроде:

(data "Hello World")

В сборке x86 вы можете сделать:

message:  db "Hello, World", 10

1 Ответ

0 голосов
/ 06 июля 2018

Определение синтаксиса сегмента данных можно найти в спецификации Текстовый формат WebAssembly . Это действительно довольно просто, вот в более простой форме:

data $memidx $offset $data

Где $memidx - необязательный индекс, который указывает, в какую память модуля заполняется сегмент данных. В текущей версии WebAssembly поддерживается только память одного модуля , поэтому она всегда будет равна нулю.

$offset - это константное выражение, указывающее начальную точку, в которую должны быть записаны данные.

Наконец $data - это сами данные. Он может представлять текстовые или двоичные данные с простой кодировкой, как , подробно описанной в спецификации .

Например, для добавления Hello World в память модуля со смещением нуля это сделает работу:

(data (i32.const 0) "Hello World")

...