[ web & v8] Web Assembly, wasm에 대해서

sangjun

·

2022. 1. 31. 11:56

Web Assembly로 할 수 있는 것들

- 웹 브라우저에서 windows 95 돌리기

https://github.com/clementp0/W95-Web-Project

-  Unity로 프로그래밍한 게임을 웹 브라우저로 실행

https://www.eteknix.com/gaming-in-your-browser-is-about-to-get-interesting-with-webassembly/

- 티스토리 이미지 편집 기능 또한 Web assembly를 이용함

JS대신 왜 굳이 Web Assembly를 이용하냐?

- Java Script는 High Level Language이기 때문에 변수의 타입을 자동으로 지정해주고 느린 부분을 최적화 해주는 작업이 필요하다. 이 과정은 v8 엔진의 TurboFan에서 일어난다. TurboFan을 여러번 거쳐서 최적화된 바이트 코드는 Ignition에서 실행되게 된다. Web Assembly는 이런 과정과는 다르다. Web Assembly는 Liftoff에서 실행되는데 이것은 Assembly를 바로 실행시켜주기 때문에 굉장히 빠르다고 한다. TurboFan을 거쳐 최적화 되긴 하지만 JS에 비해 여러번 최적화 과정을 거치진 않는다고 한다. 즉, 동일한 코드를 JS와 Web Assembly로 짜서 돌렸을 때 Web Assembly가 최대로 느려도 Java Script보다는 같은 성능이거나 빠르다는 것이다

https://segmentfault.com/a/1190000020317976
https://medium.com/commencis/what-is-the-webassembly-wasm-c19bfcfb34ad

Reference 또는 알게 된 점

1. v8 exploit을 공부하면서 wasm을 쓴다. 그때는 무엇인지 모르고 다른 분들이 요로코롬 익스플로잇해서 따라 했었다.이게 무엇인지 궁금했는데 이제야 궁금했던 것이 풀렸다.

--> wasm은 web assembly였던 것이다.

--> new WebAssembly.Instance()시에 메모리맵에 rwx페이지 생기고 여기에 쉘코드 올리기가 가능하다.

2. 웹의 가능성은 무긍무진하다. 램에 OS올리는데에도 엄청난 자원을 소모하는데 웹 브라우저에 OS까지 올리다니 정말 대단하다.

3. reference

https://www.youtube.com/watch?v=VJag_H2Cosc&t=149s 

https://www.youtube.com/watch?v=eJp_WtnZfao