PDA

View Full Version : emscripten nightmare



crazy-mike
07-27-2022, 12:14 AM
http://emscripten.org/

:101:

ну а теперь - почему собственно nightmare:

допустим , что у меня есть файл hell.c



#include <stdio.h>
#include <emscripten.h>

EM_JS(
void,greeter,(char* a),{
document.body.innerHTML="<h3>" + UTF8ToString(a) + "</h3>";
}
);


int EMSCRIPTEN_KEEPALIVE myCount() {
return 666;
}

int main() {
greeter("прощай , жестокий мир!");
EM_ASM({
document.body.appendChild(document.createElement("div").appendChild(document.createTextNode("="+_myCount())));
});
return 0;
}



я его компилирую по emcc ./hell.c -o ./hell.html
А потом создаю на локальном веб-сервере папку nightmare.
Копирую туда hell.html , hell.js и hell.wasm
потом из браузера запускаю http://127.0.0.1/nightmare/hell.html - и всё работает!

С - скомпилировано в веб-ассемблер. Модуль ( файл hell.wasm ) загружается через hell.js в стартовой страничке hell.html. Вызывается main из hell.wasm.

Дальше эта злостная main создаёт фунцкию на javascript , удаляет всё содержимое html-странички ( document.body ) и под занавес запускает ещё код на javascript , из которого вызывается функция на С. И всё делается без всяких cwrap.

Всё работает - другое дело , а какой ценой ?



-rw-rw-r-- 1 mike mike 102505 Jul 27 07:59 hell.html
-rw-rw-r-- 1 mike mike 125532 Jul 27 07:59 hell.js
-rw-rw-r-- 1 mike mike 926 Jul 27 07:59 hell.wasm


Ну - сам полезно-вредоносный код занимает 926 байт. Но вот "оболочка-запускалка" аж 220 килобайт !!!!!!! Хотя по сравнению с размером Windows 11 какой-нибудь - это ведь никакой роли не играет.

crazy-mike
07-27-2022, 03:39 PM
ну и всю эту радость можно просто в JavaScript компилировать ( без wasm ) - но так оно будет просто очень длинное.


emcc -sWASM=0 ./hell.c -o ./hell.html