x86 эквивалент инструкции WebAssembly - PullRequest
0 голосов
/ 02 ноября 2019

Я играл с программой WebAssembly. Я хотел получить x86-эквивалент программы WebAssembly. Путем поиска в Google я обнаружил, что objdump можно использовать для любого объектного файла с помощью команды

objdump -M intel <file_name>

Однако дизассемблер для файла wasm wasm-objdump не имеет флага m для разборки кода в x86формат по очевидной причине, что это приложение веб-сборки.

Есть ли (простой) способ сопоставления инструкции, заданной в WebAssembly, с эквивалентной инструкцией x86 без явного соответствия каждой инструкции?

1 Ответ

0 голосов
/ 03 ноября 2019

Онлайн WasmExplorer компилирует код C для WebAssembly и FireFox x86, используя компилятор SpiderMonkey. Учитывая следующую простую функцию:

int testFunction(int* input, int length) {
  int sum = 0;
  for (int i = 0; i < length; ++i) {
    sum += input[i];
  }
  return sum;
}

Вот вывод x86:

wasm-function[0]:
  sub rsp, 8                            ; 0x000000 48 83 ec 08
  cmp esi, 1                            ; 0x000004 83 fe 01
  jge 0x14                              ; 0x000007 0f 8d 07 00 00 00
 0x00000d:                              
  xor eax, eax                          ; 0x00000d 33 c0
  jmp 0x26                              ; 0x00000f e9 12 00 00 00
 0x000014:                              
  xor eax, eax                          ; 0x000014 33 c0
 0x000016:                              ; 0x000016 from: [0x000024]
  mov ecx, dword ptr [r15 + rdi]        ; 0x000016 41 8b 0c 3f
  add eax, ecx                          ; 0x00001a 03 c1
  add edi, 4                            ; 0x00001c 83 c7 04
  add esi, -1                           ; 0x00001f 83 c6 ff
  test esi, esi                         ; 0x000022 85 f6
  jne 0x16                              ; 0x000024 75 f0
 0x000026:                              
  nop                                   ; 0x000026 66 90
  add rsp, 8                            ; 0x000028 48 83 c4 08
  ret 

Вы можете просмотреть этот пример онлайн .

WasmExplorerкомпилирует код в wasm / x86 через сервис - вы можете видеть скрипты , которые выполняются на Github - вы должны иметь возможность использовать их для самостоятельного создания инструмента командной строки.

...