1. 환경 설정 (wsl 기준)
$ git clone https://github.com/emscripten-core/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest
$ source ./emsdk_env.sh
$ emcc --version
2. hello.c 작성
#include <stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
3. 컴파일
emcc hello.c -o hello.html
4. 서버 구동
npx http-server ~ -o -p 9999
참고
https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install
https://emscripten.org/docs/tools_reference/emcc.html#emccdoc
https://developer.mozilla.org/ko/docs/WebAssembly/C_to_Wasm
알아낸 것 1. 샌드 박스 내부는 리눅스 스타일로 구성되어 있음. 아래는 직접 돌려본 예시
/tmp
/home
/home/web_user
/dev
/dev/null
/dev/tty
/dev/tty1
/dev/random
/dev/urandom
/dev/shm
/dev/shm/tmp
/dev/stdin
/dev/stdout
/dev/stderr
/proc
/proc/self
/proc/self/fd
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
/proc/self/fd/3
/proc/self/fd/4
/proc/self/fd/5
/proc/self/fd/6
알아낸 것 2. C코드로 디컴파일 가능
LLVM 기반이기 때문에 OLLVM 개발 가능
https://github.com/HakonHarnes/emcc-obf
알아낸 것 3. int main()의 주소는 0x1
이것은 전형적인 메모리 레이아웃은 아님